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