File: CMakeLists.txt

package info (click to toggle)
apbs 3.4.1-7
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 199,188 kB
  • sloc: ansic: 284,988; cpp: 60,416; fortran: 44,896; xml: 13,895; sh: 13,838; python: 8,105; yacc: 2,922; makefile: 1,428; f90: 989; objc: 448; lex: 294; awk: 266; sed: 205; java: 134; csh: 79
file content (136 lines) | stat: -rw-r--r-- 5,255 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
################################################################################
# TODO:  Generate license.html
################################################################################

################################################################################
# NOTE: Don't do this unless you have LaTex and way too much time to kill
################################################################################
option(BUILD_DOXYGEN "Build/Rebuild documentation using doxygen" OFF)

if(BUILD_DOXYGEN)

	find_package(Doxygen)

	if(Doxygen_FOUND)
		configure_file(
	    	${CMAKE_CURRENT_SOURCE_DIR}/programmer/.config/Doxyfile.in
	    	${CMAKE_CURRENT_BINARY_DIR}/programmer/Doxyfile
	    	ESCAPE_QUOTES
	    	)
	
		configure_file(
	    	${CMAKE_CURRENT_SOURCE_DIR}/programmer/.config/programmer.html.in
	    	${CMAKE_CURRENT_BINARY_DIR}/programmer/programmer.html
	    	)
	
		configure_file(
	    	${CMAKE_CURRENT_SOURCE_DIR}/programmer/.config/mainpage.h.in
	    	${CMAKE_CURRENT_BINARY_DIR}/programmer/mainpage.h
	    	)
	
		add_custom_target(
	    	doc
	    	ALL
	    	#COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/programmer/Doxyfile
	    	COMMAND doxygen ${CMAKE_CURRENT_BINARY_DIR}/programmer/Doxyfile
	    	WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/programmer
	    	COMMENT "Generating documentation with Doxygen" VERBATIM
	  	)

		#file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/programmer/latex)
	
		add_custom_target(
	    	doc-pdf
	    	ALL
	    	COMMAND make
	    	COMMAND cp refman.pdf ../programmer.pdf
	    	WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/programmer/latex
	    	DEPENDS doc
	    	COMMENT "Generating pdf documentation" VERBATIM
		)

    	install(DIRECTORY ${APBS_BUILD}/docs/programmer
            DESTINATION ${CMAKE_INSTALL_DATADIR}/docs
            PATTERN "Doxyfile" EXCLUDE
            PATTERN "latex" EXCLUDE
			PATTERN "mainpage.h" EXCLUDE
            COMPONENT docs
		)

	endif(Doxygen_FOUND)

endif()

################################################################################
# TODO:  Generate RTD for the APBS src
################################################################################
option(BUILD_BREATHE "Build/Rebuild documentation using Sphinx/Breathe for APBS src" OFF)

# This is part of issue https://github.com/Electrostatics/apbs/issues/41
# Based on https://devblogs.microsoft.com/cppblog/clear-functional-c-documentation-with-sphinx-breathe-doxygen-cmake/

message(STATUS "================================================================")
if(BUILD_BREATHE)
  message(STATUS "BUILD RTD using Sphinx/Breathe")
  find_package(Doxygen REQUIRED)

  include(FindPackageHandleStandardArgs)
  find_program(Sphinx_EXECUTABLE NAMES sphinx-build)

  # Find all the public headers
  file(GLOB_RECURSE APBS_SRC_PUBLIC_HEADERS ${PROJECT_SOURCE_DIR}/*.h)

  set(DOXYGEN_INPUT_DIR ${PROJECT_SOURCE_DIR}/src)
  set(DOXYGEN_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR}/build)
  set(DOXYGEN_INDEX_FILE ${DOXYGEN_OUTPUT_DIR}/xml/index.xml)
  set(DOXYFILE_IN ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in)
  set(DOXYFILE_OUT ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile)

  # Replace variables inside @@ with the current values
  #configure_file(${DOXYFILE_IN} ${DOXYFILE_OUT} @ONLY)

  # Doxygen won't create this for us
  file(MAKE_DIRECTORY ${DOXYGEN_OUTPUT_DIR})

  # Only regenerate Doxygen when the Doxyfile or public headers change
  add_custom_command(OUTPUT ${DOXYGEN_INDEX_FILE}
                     DEPENDS ${APBS_SRC_PUBLIC_HEADERS}
                     COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYFILE_OUT}
                     MAIN_DEPENDENCY ${DOXYFILE_OUT} ${DOXYFILE_IN}
                     COMMENT "Generating docs"
                     VERBATIM)

  # Nice named target so we can run the job easily
  add_custom_target(Doxygen ALL DEPENDS ${DOXYGEN_INDEX_FILE})

  set(SPHINX_SOURCE ${CMAKE_CURRENT_SOURCE_DIR})
  set(SPHINX_BUILD ${CMAKE_CURRENT_BINARY_DIR}/sphinx)
  set(SPHINX_INDEX_FILE ${SPHINX_BUILD}/index.html)

  # Only regenerate Sphinx when:
  # - Doxygen has rerun
  # - Our doc files have been updated
  # - The Sphinx config has been updated
  add_custom_command(OUTPUT ${SPHINX_INDEX_FILE}
                     COMMAND 
                       ${Sphinx_EXECUTABLE} -b html
                       # - Tell Breathe where to find the Doxygen output
                       -Dbreathe_projects.src=${DOXYGEN_OUTPUT_DIR}/xml
                       ${SPHINX_SOURCE} ${SPHINX_BUILD}
                     WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
                     DEPENDS
                     # Other docs files you want to track should go here (or in some variable)
                       ${CMAKE_CURRENT_SOURCE_DIR}/index.rst
                       ${DOXYGEN_INDEX_FILE}
                     MAIN_DEPENDENCY ${SPHINX_SOURCE}/conf.py
                     COMMENT "Generating documentation with Sphinx")

  # Nice named target so we can run the job easily
  add_custom_target(Sphinx ALL DEPENDS ${SPHINX_INDEX_FILE})

  # Add an install target to install the docs
  include(GNUInstallDirs)
  install(DIRECTORY ${SPHINX_BUILD} DESTINATION ${CMAKE_INSTALL_DOCDIR} COMPONENT docs)

endif()
message(STATUS "================================================================")