Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
fc492b6b6db70c4e34349134e2770615bef0d8f9
[simgrid.git] / buildtools / Cmake / GenerateUserGuide.cmake
1 #### Generate the html documentation for the user guide.
2
3 find_path(FIG2DEV_PATH  NAMES fig2dev   PATHS NO_DEFAULT_PATHS)
4 find_path(DOXYGEN_PATH  NAMES doxygen   PATHS NO_DEFAULT_PATHS)
5
6
7 file(GLOB_RECURSE source_doxygen
8         "${CMAKE_HOME_DIRECTORY}/tools/gras/*.[chl]"
9         "${CMAKE_HOME_DIRECTORY}/src/*.[chl]"
10         "${CMAKE_HOME_DIRECTORY}/include/*.[chl]"
11 )
12
13
14 if(DOXYGEN_PATH AND FIG2DEV_PATH)
15
16         set(DOCSSOURCES "${source_doxygen}\n${USER_GUIDE_SOURCES}")
17         string(REPLACE "\n" ";" DOCSSOURCES ${DOCSSOURCES})
18
19
20         set(DOC_PNGS 
21                 ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid_logo_2011.png
22                 ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid_logo_2011_small.png                
23                 ${CMAKE_HOME_DIRECTORY}/doc/webcruft/poster_thumbnail.png
24                 ${CMAKE_HOME_DIRECTORY}/doc/webcruft/win_install_01.png
25                 ${CMAKE_HOME_DIRECTORY}/doc/webcruft/win_install_02.png
26                 ${CMAKE_HOME_DIRECTORY}/doc/webcruft/win_install_03.png
27                 ${CMAKE_HOME_DIRECTORY}/doc/webcruft/win_install_04.png
28                 ${CMAKE_HOME_DIRECTORY}/doc/webcruft/win_install_05.png
29                 ${CMAKE_HOME_DIRECTORY}/doc/webcruft/win_install_06.png
30         )
31         
32         configure_file(${CMAKE_HOME_DIRECTORY}/doc/user_guide/doxygen/UserGuideDoxyfile.in ${CMAKE_HOME_DIRECTORY}/doc/user_guide/doxygen/UserGuideDoxyfile @ONLY)
33         
34         ADD_CUSTOM_TARGET(user_guide
35                 COMMENT "Generating the SimGrid user guide..."
36                 DEPENDS ${DOC_SOURCES} ${DOC_FIGS} ${source_doxygen}
37                 COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_HOME_DIRECTORY}/doc/user_guide/html
38             COMMAND ${CMAKE_COMMAND} -E make_directory   ${CMAKE_HOME_DIRECTORY}/doc/user_guide/html            
39                 WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}/doc/user_guide/doxygen
40         )
41                 
42         ADD_CUSTOM_COMMAND(TARGET user_guide
43                 DEPENDS ${source_doxygen}
44                 COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_HOME_DIRECTORY}/doc/logcategories.doc
45                 COMMAND ${CMAKE_HOME_DIRECTORY}/tools/doxygen/xbt_log_extract_hierarchy.pl > ${CMAKE_HOME_DIRECTORY}/doc/user_guide/doxygen/logcategories.doc
46                 WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}
47         )
48
49         foreach(file ${DOC_FIGS})
50                 string(REPLACE ".fig" ".png" tmp_file ${file})
51                 string(REPLACE "${CMAKE_HOME_DIRECTORY}/doc/shared/fig/" "${CMAKE_HOME_DIRECTORY}/doc/user_guide/html/" tmp_file ${tmp_file})           
52                 ADD_CUSTOM_COMMAND(TARGET user_guide
53                         COMMAND ${FIG2DEV_PATH}/fig2dev -Lpng -S 4 ${file} ${tmp_file}
54                 )
55         endforeach(file ${DOC_FIGS})
56         
57         foreach(file ${DOC_PNGS})
58                 ADD_CUSTOM_COMMAND(TARGET user_guide
59                         COMMAND ${CMAKE_COMMAND} -E copy ${file} ${CMAKE_HOME_DIRECTORY}/doc/user_guide/html/
60                 )
61         endforeach(file ${DOC_PNGS})
62
63         ADD_CUSTOM_COMMAND(TARGET user_guide
64                 COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_HOME_DIRECTORY}/doc/webcruft/Paje_MSG_screenshot_thn.jpg ${CMAKE_HOME_DIRECTORY}/doc/user_guide/html/
65                 COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_HOME_DIRECTORY}/doc/webcruft/Paje_MSG_screenshot.jpg     ${CMAKE_HOME_DIRECTORY}/doc/user_guide/html/
66                 COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_HOME_DIRECTORY}/doc/triva-graph_configuration.png        ${CMAKE_HOME_DIRECTORY}/doc/user_guide/html/
67                 COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_HOME_DIRECTORY}/doc/triva-graph_visualization.png        ${CMAKE_HOME_DIRECTORY}/doc/user_guide/html/
68                 COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_HOME_DIRECTORY}/doc/AS_hierarchy.png        ${CMAKE_HOME_DIRECTORY}/doc/user_guide/html/               
69                 COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_HOME_DIRECTORY}/doc/simgrid.css                          ${CMAKE_HOME_DIRECTORY}/doc/user_guide/html/
70         )
71         
72         ADD_CUSTOM_COMMAND(TARGET user_guide
73            COMMAND ${FIG2DEV_PATH}/fig2dev -Lmap ${CMAKE_HOME_DIRECTORY}/doc/shared/fig/simgrid_modules.fig | perl -pe 's/imagemap/simgrid_modules/g'| perl -pe 's/<IMG/<IMG style=border:0px/g' | ${CMAKE_HOME_DIRECTORY}/tools/doxygen/fig2dev_postprocessor.pl > ${CMAKE_HOME_DIRECTORY}/doc/user_guide/doxygen/simgrid_modules.map
74             COMMAND ${CMAKE_COMMAND} -E echo "XX First Doxygen pass"
75                 COMMAND ${DOXYGEN_PATH}/doxygen UserGuideDoxyfile
76                 COMMAND ${CMAKE_HOME_DIRECTORY}/tools/doxygen/index_create.pl simgriduserguide.tag index-API.doc
77                 
78                 COMMAND ${CMAKE_COMMAND} -E echo "XX Second Doxygen pass"
79                 COMMAND ${DOXYGEN_PATH}/doxygen UserGuideDoxyfile
80                 
81                 COMMAND ${CMAKE_COMMAND} -E remove -f ${CMAKE_HOME_DIRECTORY}/doc/user_guide/html/dir*
82                                 
83                 WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}/doc/user_guide/doxygen
84         )
85         
86 else(DOXYGEN_PATH AND FIG2DEV_PATH)
87
88         ADD_CUSTOM_TARGET(user_guide
89                         COMMENT "Generating the SimGrid user guide..."
90                         )
91
92         ADD_CUSTOM_COMMAND(TARGET user_guide
93                         COMMAND ${CMAKE_COMMAND} -E echo "DOXYGEN_PATH          = ${DOXYGEN_PATH}"
94                         COMMAND ${CMAKE_COMMAND} -E echo "FIG2DEV_PATH          = ${FIG2DEV_PATH}"
95                         COMMAND ${CMAKE_COMMAND} -E echo "IN ORDER TO GENERATE THE DOCUMENTATION YOU NEED ALL TOOLS !!!"
96                         COMMAND ${CMAKE_COMMAND} -E echo "FAIL TO MAKE SIMGRID DOCUMENTATION see previous messages for details ..."
97                         COMMAND false
98                         )
99
100                 
101 endif(DOXYGEN_PATH AND FIG2DEV_PATH)
102
103 ##############################################################################"
104
105 message(STATUS "Check individual TOCs")
106 set(LISTE_GTUT
107         doc/user_guide/doxygen/gtut-tour-00-install.doc
108         doc/user_guide/doxygen/gtut-tour-01-bones.doc
109         doc/user_guide/doxygen/gtut-tour-02-simple.doc
110         doc/user_guide/doxygen/gtut-tour-03-args.doc
111         doc/user_guide/doxygen/gtut-tour-04-callback.doc
112         doc/user_guide/doxygen/gtut-tour-05-globals.doc
113         doc/user_guide/doxygen/gtut-tour-06-logs.doc
114         doc/user_guide/doxygen/gtut-tour-07-timers.doc
115         doc/user_guide/doxygen/gtut-tour-08-exceptions.doc
116         doc/user_guide/doxygen/gtut-tour-09-simpledata.doc
117         doc/user_guide/doxygen/gtut-tour-10-rpc.doc
118         doc/user_guide/doxygen/gtut-tour-11-explicitwait.doc
119         doc/user_guide/doxygen/gtut-tour-recap-messages.doc
120         doc/user_guide/doxygen/gtut-tour-12-staticstruct.doc
121         doc/user_guide/doxygen/gtut-tour-13-pointers.doc
122         doc/user_guide/doxygen/gtut-tour-14-dynar.doc
123         doc/user_guide/doxygen/gtut-tour-15-manualdatadef.doc
124         doc/user_guide/doxygen/gtut-tour-16-exchangecb.doc
125 )
126
127 foreach(file_name ${LISTE_GTUT})
128         file(REMOVE ${CMAKE_HOME_DIRECTORY}/doc/user_guide/doxygen/tmp.curtoc)
129         file(REMOVE ${CMAKE_HOME_DIRECTORY}/doc/user_guide/doxygen/tmp.realtoc)
130         
131         file(READ "${file_name}" file_content)
132         string(REGEX MATCH "Table of Contents.*<hr>" valeur_line "${file_content}")
133         string(REPLACE "\n" ";" valeur_line "${valeur_line}")
134         string(REPLACE "\n" ";" file_content "${file_content}")
135                
136         file(APPEND ${CMAKE_HOME_DIRECTORY}/doc/user_guide/doxygen/tmp.realtoc "\n") # make sure it exists
137         foreach(line ${file_content})
138                 string(REGEX MATCH "[\\]s?u?b?s?u?b?section.*" line2 "${line}")
139                 string(REGEX MATCH ".*_toc.*" line3 "${line}")
140                 if(line2 AND NOT line3)
141                         string(REPLACE "\\section " "" line2 ${line2})
142                         string(REPLACE "\\subsection " "subsection" line2 ${line2})
143                         string(REPLACE "\\subsubsection " "subsubsection" line2 ${line2})
144                         string(REGEX REPLACE " .*" "" line2 ${line2})
145                         set(line2                               " - \\ref ${line2}")
146                         string(REPLACE " - \\ref subsection"    "   - \\ref " line2 ${line2})
147                         string(REPLACE " - \\ref subsubsection" "     - \\ref " line2 ${line2})
148                         file(APPEND ${CMAKE_HOME_DIRECTORY}/doc/user_guide/doxygen/tmp.realtoc "${line2}\n")
149                 endif(line2 AND NOT line3)
150         endforeach(line ${file_content})
151         
152         file(APPEND ${CMAKE_HOME_DIRECTORY}/doc/user_guide/doxygen/tmp.curtoc "\n") # make sure it exists
153         foreach(line ${valeur_line})
154                 string(REGEX MATCH ".*ref.*" line_ok ${line})
155                 if(line_ok)
156                         file(APPEND ${CMAKE_HOME_DIRECTORY}/doc/user_guide/doxygen/tmp.curtoc "${line_ok}\n")
157                 endif(line_ok)
158         endforeach(line ${valeur_line})
159         
160         exec_program("${CMAKE_COMMAND} -E compare_files ${CMAKE_HOME_DIRECTORY}/doc/user_guide/doxygen/tmp.curtoc ${CMAKE_HOME_DIRECTORY}/doc/user_guide/doxygen/tmp.realtoc" OUTPUT_VARIABLE compare_files)
161         if(compare_files)
162                 message(STATUS "Wrong toc for ${file_name}. Should be:")
163                 file(READ "${CMAKE_HOME_DIRECTORY}/doc/user_guide/doxygen/tmp.realtoc" file_content)
164                 message("${file_content}")
165                 exec_program("diff -u ${CMAKE_HOME_DIRECTORY}/doc/user_guide/doxygen/tmp.curtoc ${CMAKE_HOME_DIRECTORY}/doc/user_guide/doxygen/tmp.realtoc")
166         endif(compare_files)
167 endforeach(file_name ${LISTE_GTUT})
168
169 file(REMOVE ${CMAKE_HOME_DIRECTORY}/doc/user_guide/doxygen/tmp.curtoc)
170 file(REMOVE ${CMAKE_HOME_DIRECTORY}/doc/user_guide/doxygen/tmp.realtoc)
171
172 message(STATUS "Check main TOC")
173
174 foreach(file_name ${LISTE_GTUT})
175         file(READ "${file_name}" file_content)  
176         string(REGEX MATCH "Table of Contents.*<hr>" valeur_line "${file_content}")
177         string(REPLACE "\n" ";" valeur_line "${valeur_line}")
178         string(REPLACE "\n" ";" file_content "${file_content}")
179         
180         foreach(line ${file_content})
181                 string(REGEX MATCH ".*@page.*" line2 "${line}")
182                 if(line2)
183                         string(REPLACE "@page " "" line2 "${line2}")
184                         string(REGEX REPLACE " .*" "" line2 "${line2}")
185                         set(line2 " - \\ref ${line2}")
186                         file(APPEND ${CMAKE_HOME_DIRECTORY}/doc/user_guide/doxygen/tmp.realtoc "${line2}\n")
187                 endif(line2)
188         endforeach(line ${file_content})
189         
190         foreach(line ${valeur_line})
191                 string(REGEX MATCH ".*toc.*" line1 "${line}")
192                 string(REGEX MATCH ".*<hr>.*" line2 "${line}")
193                 string(REGEX MATCH "^[ ]*$" line3 "${line}")
194                 string(REGEX MATCH "Table of Contents" line4 "${line}")
195                 if(NOT line1 AND NOT line2 AND NOT line3 AND NOT line4)
196                         file(APPEND ${CMAKE_HOME_DIRECTORY}/doc/user_guide/doxygen/tmp.realtoc "   ${line}\n")
197                 endif(NOT line1 AND NOT line2 AND NOT line3 AND NOT line4)
198         endforeach(line ${valeur_line})
199 endforeach(file_name ${LISTE_GTUT})     
200
201 file(READ "${CMAKE_HOME_DIRECTORY}/doc/user_guide/doxygen/gtut-tour.doc" file_content)
202 string(REPLACE "\n" ";" file_content "${file_content}")
203 foreach(line ${file_content})
204         string(REGEX MATCH "^[ ]+.*\\ref" line1 "${line}")
205         if(line1)
206                 file(APPEND ${CMAKE_HOME_DIRECTORY}/doc/user_guide/doxygen/tmp.curtoc "${line}\n")
207         endif(line1)
208 endforeach(line ${file_content})
209         
210 exec_program("${CMAKE_COMMAND} -E compare_files ${CMAKE_HOME_DIRECTORY}/doc/user_guide/doxygen/tmp.curtoc ${CMAKE_HOME_DIRECTORY}/doc/user_guide/doxygen/tmp.realtoc" OUTPUT_VARIABLE compare_files)
211 if(compare_files)
212         message(STATUS "Wrong toc for gtut-tour.doc Right one is in tmp.realtoc")
213         exec_program("diff -u ${CMAKE_HOME_DIRECTORY}/doc/user_guide/doxygen/tmp.curtoc ${CMAKE_HOME_DIRECTORY}/doc/user_guide/doxygen/tmp.realtoc")
214 else(compare_files)
215         file(REMOVE ${CMAKE_HOME_DIRECTORY}/doc/user_guide/doxygen/tmp.realtoc)
216 endif(compare_files)    
217   
218 file(REMOVE ${CMAKE_HOME_DIRECTORY}/doc/user_guide/doxygen/tmp.curtoc)
219
220 ADD_CUSTOM_TARGET(user_guide_pdf
221     COMMAND ${CMAKE_COMMAND} -E echo "XX First pass simgrid_user_guide.pdf"
222     COMMAND make clean
223     COMMAND make pdf || true
224     COMMAND ${CMAKE_COMMAND} -E echo "XX Second pass simgrid_user_guide.pdf"
225     COMMAND ${CMAKE_COMMAND} -E remove -f ${CMAKE_HOME_DIRECTORY}/doc/latex/refman.pdf
226     COMMAND make pdf || true
227     COMMAND ${CMAKE_COMMAND} -E echo "XX Write Simgrid_documentation.pdf"
228     COMMAND ${CMAKE_COMMAND} -E rename ${CMAKE_HOME_DIRECTORY}/doc/latex/refman.pdf ${CMAKE_HOME_DIRECTORY}/doc/latex/simgrid_documentation.pdf
229   
230     WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}/doc/latex/
231 )
232 add_dependencies(user_guide_pdf user_guide)