# Documentation # http://www.stack.nl/~dimitri/doxygen # http://www.stack.nl/~dimitri/doxygen/commands.html#cmdsa if(GDCM_DOCUMENTATION) find_package(Doxygen REQUIRED) if(GDCM_DOXYGEN_NO_FOOTER) set(GDCM_HTML_FOOTER) else() # Otherwise use gdcm/piwik/sf.net footer: set(GDCM_HTML_FOOTER ${GDCM_SOURCE_DIR}/Utilities/doxygen/footer.html) endif() configure_file( ${GDCM_SOURCE_DIR}/Utilities/doxygen/doxyfile.in ${GDCM_BINARY_DIR}/Utilities/doxygen/Doxyfile ) file(GLOB_RECURSE headerfiles "${GDCM_SOURCE_DIR}/Source/*.h" "${GDCM_SOURCE_DIR}/Wrapping/*.h" "${GDCM_SOURCE_DIR}/Utilities/VTK/*.h" #"${GDCM_SOURCE_DIR}/Utilities/doxygen/man/*.dox" ) list(REMOVE_ITEM headerfiles "${GDCM_SOURCE_DIR}/Source/DataDictionary/gdcmTagKeywords.h" "${GDCM_SOURCE_DIR}/Source/DataDictionary/gdcmTagToType.h" ) #message(${headerfiles}) # We are depending only on header files and README.txt but other files # could be needed for complete dependencies file(GLOB_RECURSE examplefiles "${GDCM_SOURCE_DIR}/Examples/*.cxx" "${GDCM_SOURCE_DIR}/Examples/*.cs" "${GDCM_SOURCE_DIR}/Examples/*.java" "${GDCM_SOURCE_DIR}/Examples/*.py" ) file(GLOB_RECURSE vtkexamplefiles "${GDCM_SOURCE_DIR}/Utilities/VTK/Examples/*.cxx" "${GDCM_SOURCE_DIR}/Utilities/VTK/Examples/*.cs" "${GDCM_SOURCE_DIR}/Utilities/VTK/Examples/*.java" "${GDCM_SOURCE_DIR}/Utilities/VTK/Examples/*.py" ) set(DOXYFILE_EXAMPLES) foreach(file ${examplefiles} ${vtkexamplefiles}) get_filename_component(f ${file} NAME) set(DOXYFILE_EXAMPLES "${DOXYFILE_EXAMPLES}\n\\example ${f}") endforeach() configure_file( ${GDCM_SOURCE_DIR}/Utilities/doxygen/TestsList.txt.in ${GDCM_BINARY_DIR}/Utilities/doxygen/TestsList.txt @ONLY ) if(GDCM_MINOR_VERSION MATCHES "[02468]$") set(GDCM_DOC_PDF_LINK "http://gdcm.sourceforge.net/${GDCM_MAJOR_VERSION}.${GDCM_MINOR_VERSION}/gdcm-${GDCM_VERSION}.pdf" ) set(GDCM_DOC_TARBALL_LINK "http://gdcm.sourceforge.net/${GDCM_MAJOR_VERSION}.${GDCM_MINOR_VERSION}/gdcm-${GDCM_VERSION}-doc.tar.gz" ) else() set(GDCM_DOC_PDF_LINK "http://gdcm.sourceforge.net/gdcm-${GDCM_VERSION}.pdf" ) set(GDCM_DOC_TARBALL_LINK "http://gdcm.sourceforge.net/gdcm-${GDCM_VERSION}-doc.tar.gz" ) endif() configure_file( ${GDCM_SOURCE_DIR}/Utilities/doxygen/README.txt.in ${GDCM_BINARY_DIR}/Utilities/doxygen/README.txt @ONLY ) set(GDCM_DOC_TARBALL ${CMAKE_CURRENT_BINARY_DIR}/gdcm-${GDCM_VERSION}-doc.tar.gz ) # epstopdf is needed: sudo apt-get install texlive-extra-utils # pdflatex is needed: sudo apt-get install texlive-latex-extra add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/html/index.html ${CMAKE_CURRENT_BINARY_DIR}/latex/Makefile # let's create the tarball within the same custom command to avoid complex dep. rules. ${GDCM_DOC_TARBALL} ${CMAKE_CURRENT_BINARY_DIR}/latex/refman.tex # output #1 (fake) # 1. first thing first let's run doxygen COMMAND ${DOXYGEN} ARGS ${GDCM_BINARY_DIR}/Utilities/doxygen/Doxyfile # 2. tarball gen. COMMAND ${CMAKE_COMMAND} ARGS -E tar cfz ${GDCM_DOC_TARBALL} html DEPENDS ${GDCM_BINARY_DIR}/Utilities/doxygen/Doxyfile ${GDCM_BINARY_DIR}/Utilities/doxygen/README.txt ${GDCM_BINARY_DIR}/Utilities/doxygen/TestsList.txt ${headerfiles} COMMENT "GDCM: Creating doxygen doc + tarball" #WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} ) # PDF building part: # When building latex, we have to run a custom command to produce the pdf file: if(UNIX AND GDCM_PDF_DOCUMENTATION) find_program(PDFOPT_EXECUTABLE pdfopt) find_program(SED_EXECUTABLE sed) find_package(LATEX REQUIRED) mark_as_advanced(PDFOPT_EXECUTABLE SED_EXECUTABLE) # Let's customize the pdf tags a little usind sed: # Apparently egrep is also needed... # BAD: there is a circular dependency where refman.tex depend on refman.tex in the sed steps... # hack our way in anyway by simply removing the dep... #add_custom_command( # ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/patchtex.cmake #) # TODO, foreach(*.tex) # sed -i -e "/home/mmalaterre/Projects/" ... string(REPLACE "/" "\\/" sed_gdcm_source_dir ${GDCM_SOURCE_DIR}) #message(${sed_gdcm_source_dir}) add_custom_command( OUTPUT #${CMAKE_CURRENT_BINARY_DIR}/latex/refman.tex # output #1 (fake) ${CMAKE_CURRENT_BINARY_DIR}/latex/refman.pdf # output #2 # Command #1 COMMAND ${SED_EXECUTABLE} ARGS -i.tmp -e "'s/]{hyperref}/]{hyperref}\\\\hypersetup{pdftitle={GDCM ${GDCM_VERSION} Reference Manual},pdfauthor={Mathieu Malaterre and co.},pdfsubject={Grassroots DICOM API reference},pdfkeywords={GDCM,DICOM,Network,Query\\/Retrieve,JPEG,Lossless JPEG,JPEG-LS,J2K,JPEG 2000,RLE},pdfpagemode={UseOutlines},bookmarks,bookmarksopen,pdfstartview={FitH},backref,colorlinks,linkcolor={black},citecolor={black},urlcolor={black},baseurl={http:\\/\\/gdcm.sourceforge.net}}\\\\hyperbaseurl{http:\\/\\/gdcm.sourceforge.net}/g'" ${CMAKE_CURRENT_BINARY_DIR}/latex/refman.tex # Command #2 COMMAND ${SED_EXECUTABLE} ARGS -i.tmp -e "'s/${sed_gdcm_source_dir}/gdcm/g'" ${CMAKE_CURRENT_BINARY_DIR}/latex/*.tex # Command #3 COMMAND make ARGS -C ${CMAKE_CURRENT_BINARY_DIR}/latex DEPENDS #${CMAKE_CURRENT_BINARY_DIR}/latex/refman.tex ${CMAKE_CURRENT_BINARY_DIR}/latex/Makefile #${GDCM_DOC_TARBALL} COMMENT "GDCM: Creating (patched) pdf of documentation" ) if(PDFOPT_EXECUTABLE) add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/latex/gdcm-${GDCM_VERSION}.pdf COMMAND ${PDFOPT_EXECUTABLE} ARGS ${CMAKE_CURRENT_BINARY_DIR}/latex/refman.pdf ${CMAKE_CURRENT_BINARY_DIR}/latex/gdcm-${GDCM_VERSION}.pdf DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/latex/refman.pdf COMMENT "GDCM: Creating optimized pdf version of documentation" WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/latex ) else() add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/latex/gdcm-${GDCM_VERSION}.pdf COMMAND ${CMAKE_COMMAND} -E copy ARGS ${CMAKE_CURRENT_BINARY_DIR}/latex/refman.pdf ${CMAKE_CURRENT_BINARY_DIR}/latex/gdcm-${GDCM_VERSION}.pdf DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/latex/refman.pdf COMMENT "GDCM: Creating unoptimized pdf version of documentation" WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/latex ) endif() # add target to 'ALL' add_custom_target(GDCMDoxygenPDF DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/latex/gdcm-${GDCM_VERSION}.pdf COMMENT "GDCM: Executing GDCMDoxygenPDF" ) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/latex/gdcm-${GDCM_VERSION}.pdf DESTINATION ${GDCM_INSTALL_DOC_DIR} ) add_dependencies(DoxygenDoc GDCMDoxygenPDF) else() # make DoxygenDoc depends on the final tarball thus all file are garantee to be generated add_custom_target(GDCMDoxygenDoc DEPENDS ${GDCM_DOC_TARBALL} COMMENT "GDCM: Executing GDCMDoxygenDoc" ) add_dependencies(DoxygenDoc GDCMDoxygenDoc) endif() # Install html pages: #install(FILES # ${CMAKE_CURRENT_BINARY_DIR}/html/gdcm2vtk.html # ${CMAKE_CURRENT_BINARY_DIR}/html/gdcmconv.html # ${CMAKE_CURRENT_BINARY_DIR}/html/gdcmanon.html # ${CMAKE_CURRENT_BINARY_DIR}/html/gdcmgendir.html # ${CMAKE_CURRENT_BINARY_DIR}/html/gdcmdump.html # ${CMAKE_CURRENT_BINARY_DIR}/html/gdcmimg.html # ${CMAKE_CURRENT_BINARY_DIR}/html/gdcminfo.html # ${CMAKE_CURRENT_BINARY_DIR}/html/gdcmpdf.html # ${CMAKE_CURRENT_BINARY_DIR}/html/gdcmraw.html # ${CMAKE_CURRENT_BINARY_DIR}/html/gdcmscanner.html # ${CMAKE_CURRENT_BINARY_DIR}/html/gdcmtar.html # ${CMAKE_CURRENT_BINARY_DIR}/html/gdcmviewer.html # DESTINATION ${GDCM_INSTALL_DOC_DIR} COMPONENT DebugDevel #) #install(FILES # ${CMAKE_CURRENT_BINARY_DIR}/man/man1/gdcm2vtk.1 # ${CMAKE_CURRENT_BINARY_DIR}/man/man1/gdcm2pnm.1 # ${CMAKE_CURRENT_BINARY_DIR}/man/man1/gdcmconv.1 # ${CMAKE_CURRENT_BINARY_DIR}/man/man1/gdcmpap3.1 # ${CMAKE_CURRENT_BINARY_DIR}/man/man1/gdcmxml.1 # ${CMAKE_CURRENT_BINARY_DIR}/man/man1/gdcmanon.1 # ${CMAKE_CURRENT_BINARY_DIR}/man/man1/gdcmgendir.1 # ${CMAKE_CURRENT_BINARY_DIR}/man/man1/gdcmdump.1 # ${CMAKE_CURRENT_BINARY_DIR}/man/man1/gdcmdiff.1 # ${CMAKE_CURRENT_BINARY_DIR}/man/man1/gdcmimg.1 # ${CMAKE_CURRENT_BINARY_DIR}/man/man1/gdcminfo.1 # ${CMAKE_CURRENT_BINARY_DIR}/man/man1/gdcmpdf.1 # ${CMAKE_CURRENT_BINARY_DIR}/man/man1/gdcmraw.1 # ${CMAKE_CURRENT_BINARY_DIR}/man/man1/gdcmscu.1 # ${CMAKE_CURRENT_BINARY_DIR}/man/man1/gdcmscanner.1 # ${CMAKE_CURRENT_BINARY_DIR}/man/man1/gdcmtar.1 # ${CMAKE_CURRENT_BINARY_DIR}/man/man1/gdcmviewer.1 # DESTINATION ${GDCM_INSTALL_MAN_DIR}/man1 COMPONENT DebugDevel #) install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html DESTINATION ${GDCM_INSTALL_DOC_DIR} PATTERN "*.md5" EXCLUDE PATTERN "*.dot" EXCLUDE ) # http://lists.debian.org/debian-italian/2006/12/msg00878.html # man2txt : man man | col -b | less if(GDCM_USE_VTK) # Make this option a hidden option as vtkgdcm/doxygen stuff is a mess (copy/paste # from paraview). It always rerun -sigh- if(GDCM_VTK_DOCUMENTATION) set(BUILD_DOCUMENTATION 1) endif() add_subdirectory(vtk) endif() endif() option(GDCM_BUILD_DOCBOOK_MANPAGES "Build man pages from XML docbook ?" OFF) mark_as_advanced(GDCM_BUILD_DOCBOOK_MANPAGES) if(GDCM_BUILD_DOCBOOK_MANPAGES) set(MANPAGES_XML gdcm2pnm gdcm2vtk gdcmanon gdcmconv gdcmdiff gdcmdump gdcmgendir gdcmimg gdcminfo gdcmpap3 gdcmpdf gdcmraw gdcmscanner gdcmscu gdcmtar gdcmviewer gdcmxml ) find_package(LibXslt) # need an XSLT 1.0 processor, use xsltproc, maybe add more implementations later if(LIBXSLT_XSLTPROC_EXECUTABLE) set(XSLT_PROCESSOR ${LIBXSLT_XSLTPROC_EXECUTABLE}) # http://docbook.sourceforge.net/release/xsl/current/doc/manpages/man.output.quietly.html set(XSLT_PROCESSOR_ARG --param man.output.quietly 1 --maxdepth 6000 ) # User can change the behavior at cmake time: if(NOT DEFINED GDCM_MANPAGES_USE_NONET) set(GDCM_MANPAGES_USE_NONET FALSE) # By default I want nonet on Debian (docbook-xsl-ns) # on fedora you need to install docbook-style-xsl if(EXISTS /etc/xml/catalog) # https://cmake.org/pipermail/cmake/2007-May/014317.html file(READ /etc/xml/catalog xml_catalog_in) # # string(REGEX REPLACE "\r?\n" ";" xml_catalog ${xml_catalog_in}) set(DOCBOOK_REWRITE_PREFIX_FOUND FALSE) foreach(line ${xml_catalog}) string(REGEX MATCH "^.*systemIdStartString=\"http://docbook.sourceforge.net/release/xsl-ns/\".*" out1 ${line}) string(REGEX REPLACE "^.*systemIdStartString=\"http://docbook.sourceforge.net/release/xsl-ns/\".*\"([A-Za-z ]*)\".*" "\\1" output_variable ${line}) if(out1) message(STATUS "Your docbook install was found here :${output_variable}") set(DOCBOOK_REWRITE_PREFIX_FOUND TRUE) endif() endforeach() # Need both the catalog and the docbook installation if(DOCBOOK_REWRITE_PREFIX_FOUND) set(GDCM_MANPAGES_USE_NONET TRUE) else() message(WARNING "Could not find the location of your docbook-xsl-ns installation. Please make sure your internet connection works. Or skip man pages generation: GDCM_BUILD_DOCBOOK_MANPAGES:BOOL=OFF.") endif() else() message(STATUS "Could not find /etc/xml/catalog") endif() endif() if(GDCM_MANPAGES_USE_NONET) list(APPEND XSLT_PROCESSOR_ARG --nonet) endif() else() find_program(MSXSL_EXECUTABLE msxsl ) mark_as_advanced(MSXSL_EXECUTABLE) if(MSXSL_EXECUTABLE) set(XSLT_PROCESSOR ${MSXSL_EXECUTABLE}) set(XSLT_PROCESSOR_ARG "-pi") # msxsl.exe -pi gdcmimg.xml # #Error occurred while executing stylesheet 'http://docbook.sourceforge.net/release/xsl-ns/current/manpages/docbook.xsl'. # #Code: 0x80004005 #Namespace 'http://exslt.org/common' does not contain any functions. # -> http://stackoverflow.com/a/16605034/136285 ?? endif() endif() if(XSLT_PROCESSOR) configure_file(version.txt.in version.txt @ONLY) foreach(docbook ${MANPAGES_XML}) add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${docbook}.1 COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/man/${docbook}.xml ${CMAKE_CURRENT_BINARY_DIR}/${docbook}.xml COMMAND ${XSLT_PROCESSOR} ${XSLT_PROCESSOR_ARG} ${CMAKE_CURRENT_BINARY_DIR}/${docbook}.xml DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/man/${docbook}.xml ) list(APPEND MANPAGES ${CMAKE_CURRENT_BINARY_DIR}/${docbook}.1 ) endforeach() add_custom_target(DOCBOOK_MANPAGES ALL DEPENDS ${MANPAGES} COMMENT "docbook manpages" ) install(FILES ${MANPAGES} DESTINATION ${GDCM_INSTALL_MAN_DIR}/man1 COMPONENT DebugDevel ) else() message(WARNING "Cannot build man page from docbook (need an XSL processor)") endif() endif() # GDCM_BUILD_DOCBOOK_MANPAGES