1include(Documentation) 2 3function(doc2tex file) 4 string(REPLACE ".doc" ".tex" tex ${file}) 5 add_custom_command( 6 OUTPUT ${tex} 7 COMMAND ${PROG_SWIPL} -f none --no-packs ${DOC2TEX} ${CMAKE_CURRENT_SOURCE_DIR}/${file} ${tex} 8 DEPENDS ${file} ${DOC2TEX_DEPENDS}) 9 set(texfiles ${texfiles} ${tex} PARENT_SCOPE) 10endfunction() 11 12function(txt2tex file) 13 string(REPLACE ".txt" ".tex" tex ${file}) 14 add_custom_command( 15 OUTPUT ${tex} 16 COMMAND ${PROG_SWIPL} -f none --no-packs ${PLDOC2TEX} --outdir=. ${CMAKE_CURRENT_SOURCE_DIR}/${file} 17 DEPENDS ${PLDOC2TEX_DEPENDS} ${file}) 18 set(texfiles ${texfiles} ${tex} PARENT_SCOPE) 19endfunction() 20 21function(copy_file file) 22 add_custom_command( 23 OUTPUT ${file} 24 COMMAND ${CMAKE_COMMAND} -E copy_if_different 25 ${CMAKE_CURRENT_SOURCE_DIR}/${file} ${file}) 26 set(cpfiles ${cpfiles} ${file} PARENT_SCOPE) 27endfunction() 28 29 30# pldoc file.pl [out.tex] [library(lib)] 31 32function(pldoc file) 33 set(tex) 34 set(lib) 35 set(options) 36 37 foreach(arg ${ARGN}) 38 if(arg MATCHES ".*\\.tex") 39 set(tex ${arg}) 40 elseif(arg MATCHES "library") 41 set(lib "\"${arg}\"") 42 elseif(arg MATCHES "^--") 43 set(options ${options} ${arg}) 44 endif() 45 endforeach() 46 47 if(NOT tex) 48 string(REGEX REPLACE "\\.(pl|md)" ".tex" tex ${file}) 49 string(REPLACE "_" "" tex ${tex}) 50 endif() 51 52 if(NOT lib) 53 if(file MATCHES "\\.md") 54 set(lib ${CMAKE_CURRENT_SOURCE_DIR}/${file}) 55 else() 56 get_filename_component(base ${file} NAME_WE) 57 if(libsubdir) 58 set(lib "\"library('${libsubdir}/${base}')\"") 59 else() 60 set(lib "\"library('${base}')\"") 61 endif() 62 endif() 63 endif() 64 65 get_filename_component(base ${file} NAME_WE) 66 add_custom_command( 67 OUTPUT ${tex} 68 COMMAND ${PROG_SWIPL} -f none --no-packs ${PLDOC2TEX} --out=${tex} ${seclevel} ${options} ${lib} 69 DEPENDS ${PLDOC2TEX_DEPENDS} ${file}) 70 71 set(texfiles ${texfiles} ${tex} PARENT_SCOPE) 72endfunction() 73 74function(flush_src) 75 if(src) 76 pldoc(${src}) 77 endif() 78 set(src "" PARENT_SCOPE) 79 set(texfiles ${texfiles} PARENT_SCOPE) 80endfunction() 81 82# pkg_doc(pkg 83# [ SOURCE file.pl [out.tex] [library(...)] ]* 84# [ SOURCES file.pl file.doc ... ]) 85 86function(pkg_doc pkg) 87 set(pldoc) 88 set(docfiles) 89 set(mode) 90 set(texfiles) 91 set(cpfiles) 92 set(src) 93 set(seclevel) 94 set(libsubdir) 95 set(bbl) 96 set(depends) 97 set(vimages) 98 99 foreach(arg ${ARGN}) 100 if(arg STREQUAL "DEPENDS") 101 set(mode m_depends) 102 elseif(arg STREQUAL "SOURCES") 103 flush_src() 104 set(mode sources) 105 elseif(arg STREQUAL "SOURCE") 106 flush_src() 107 set(mode source) 108 set(src) 109 elseif(arg STREQUAL "IMAGES") 110 flush_src() 111 set(mode images) 112 elseif(arg STREQUAL "LIBSUBDIR") 113 set(mode lbsubdir) 114 elseif(arg STREQUAL "SECTION") 115 flush_src() 116 set(seclevel --section) 117 set(mode sources) 118 elseif(arg STREQUAL "SUBSECTION") 119 flush_src() 120 set(seclevel --subsection) 121 set(mode sources) 122 elseif(arg STREQUAL "SUBSUBSECTION") 123 flush_src() 124 set(seclevel --subsubsection) 125 set(mode sources) 126 elseif(mode STREQUAL "source") 127 set(src ${src} ${arg}) 128 elseif(mode STREQUAL "lbsubdir") 129 set(libsubdir ${arg}) 130 set(mode) 131 elseif(mode STREQUAL "images") 132 set(vimages ${vimages} ${arg}) 133 elseif(mode STREQUAL "m_depends") 134 set(depends ${depends} ${arg}) 135 else() 136 if(arg MATCHES "\\.(pl|md)") 137 pldoc(${arg}) 138 elseif(arg MATCHES "\\.doc") 139 doc2tex(${arg}) 140 elseif(arg MATCHES "\\.txt") 141 txt2tex(${arg}) 142 elseif(arg MATCHES "\\.bib") 143 set(bbl ${pkg}.bbl) 144 copy_file(${arg}) 145 elseif(arg MATCHES "\\.(gif|png|pdf|eps)") 146 copy_file(${arg}) 147 elseif(arg MATCHES "\\.tex") 148 set(texfiles ${texfiles} ${arg}) 149 endif() 150 endif() 151 endforeach() 152 flush_src() 153 154 # Some packages rely on man/pl.bib rather than a local bibliography 155 if(NOT bbl AND EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/gen/${pkg}.bbl) 156 set(bbl ${pkg}.bbl) 157 endif() 158 159 doc2tex(${pkg}.doc) 160 161 tex_byproducts(${pkg} byproducts) 162 SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES 163 "${byproducts}") 164 165 prepend(texdeps ${CMAKE_CURRENT_BINARY_DIR}/ ${pkg}.tex ${texfiles} ${cpfiles}) 166 167 if(NOT depends) 168 set(depends ${pkg}) 169 endif() 170 171 if(INSTALL_DOCUMENTATION) 172 if(BUILD_PDF_DOCUMENTATION) 173 add_custom_command( 174 OUTPUT ${pkg}.pdf ${bbl} 175 COMMAND ${RUNTEX} --pdf ${pkg} 176 DEPENDS ${texdeps} ${depends} 177 COMMENT "Generating ${pkg}.pdf") 178 179 add_custom_target( 180 ${pkg}.doc.pdf 181 DEPENDS ${pkg}.pdf) 182 add_dependencies(doc.pdf ${pkg}.doc.pdf) 183 elseif(bbl) 184 add_custom_command( 185 OUTPUT ${bbl} 186 COMMAND ${CMAKE_COMMAND} -E copy_if_different 187 ${CMAKE_CURRENT_SOURCE_DIR}/gen/${bbl} ${bbl} 188 COMMENT "Copying pre-build LaTeX .bbl file") 189 endif(BUILD_PDF_DOCUMENTATION) 190 191 add_custom_command( 192 OUTPUT ${pkg}.html 193 COMMAND ${PROG_SWIPL} -f none --no-packs ${LATEX2HTML} ${pkg} 194 COMMAND ${CMAKE_COMMAND} -E remove ${MAN_INDEX} 195 DEPENDS latex2html core ${texdeps} ${bbl} ${depends}) 196 197 add_custom_target( 198 ${pkg}.doc.html 199 DEPENDS ${pkg}.html) 200 201 add_dependencies(doc.html ${pkg}.doc.html) 202 203 set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME Documentation) 204 prepend(doc_files ${CMAKE_CURRENT_BINARY_DIR}/ ${pkg}.html ${vimages}) 205 install(FILES ${doc_files} 206 DESTINATION ${SWIPL_INSTALL_DOC}/packages 207 COMPONENT Documentation 208 OPTIONAL) 209 endif(INSTALL_DOCUMENTATION) 210endfunction() 211