Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'master' into mc
[simgrid.git] / buildtools / Cmake / Distrib.cmake
1 #########################################
2 ### Fill in the "make install" target ###
3 #########################################
4
5 # doc
6 file(MAKE_DIRECTORY ${CMAKE_HOME_DIRECTORY}/doc/html/)
7 install(DIRECTORY "${CMAKE_HOME_DIRECTORY}/doc/html/"
8   DESTINATION $ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/doc/simgrid/html/)
9 install(DIRECTORY "${CMAKE_HOME_DIRECTORY}/doc/HelloWorld/"
10   DESTINATION $ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/doc/simgrid/HelloWorld/)
11
12 #### Generate the manpages
13 if(NOT WIN32)
14   if( NOT MANPAGE_DIR)
15     set( MANPAGE_DIR ${CMAKE_BINARY_DIR}/manpages )
16   endif()
17
18   add_custom_target(manpages ALL
19     COMMAND ${CMAKE_COMMAND} -E make_directory ${MANPAGE_DIR}
20     COMMAND pod2man ${CMAKE_HOME_DIRECTORY}/tools/simgrid_update_xml.pl > ${MANPAGE_DIR}/simgrid_update_xml.1
21     COMMENT "Generating manpages"
22     )
23   install(FILES ${MANPAGE_DIR}/simgrid_update_xml.1 ${CMAKE_HOME_DIRECTORY}/tools/tesh/tesh.1 ${CMAKE_HOME_DIRECTORY}/doc/manpage/smpirun.1 ${CMAKE_HOME_DIRECTORY}/doc/manpage/smpicc.1
24     DESTINATION $ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/share/man/man1)
25
26 endif()
27
28 # binaries
29 if(enable_smpi)
30   install(PROGRAMS
31     ${CMAKE_BINARY_DIR}/bin/smpicc
32     ${CMAKE_BINARY_DIR}/bin/smpicxx
33     ${CMAKE_BINARY_DIR}/bin/smpirun
34     DESTINATION $ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/)
35   if(SMPI_F2C)
36     install(PROGRAMS
37       ${CMAKE_BINARY_DIR}/bin/smpif2c
38       ${CMAKE_BINARY_DIR}/bin/smpiff
39       DESTINATION $ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/)
40   endif()
41   if(SMPI_F90)
42     install(PROGRAMS
43       ${CMAKE_BINARY_DIR}/bin/smpif90
44       DESTINATION $ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/)
45   endif()
46 endif()
47
48 install(PROGRAMS ${CMAKE_BINARY_DIR}/bin/tesh
49   DESTINATION $ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/)
50
51 install(PROGRAMS ${CMAKE_BINARY_DIR}/bin/graphicator
52   DESTINATION $ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/)
53
54 install(PROGRAMS ${CMAKE_HOME_DIRECTORY}/tools/MSG_visualization/colorize.pl
55   DESTINATION $ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/
56   RENAME simgrid-colorizer)
57
58 add_custom_target(simgrid-colorizer ALL
59   COMMENT "Install ${CMAKE_BINARY_DIR}/bin/colorize"
60   COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_HOME_DIRECTORY}/tools/MSG_visualization/colorize.pl ${CMAKE_BINARY_DIR}/bin/colorize
61   )
62
63 install(PROGRAMS ${CMAKE_HOME_DIRECTORY}/tools/simgrid_update_xml.pl
64   DESTINATION $ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/
65   RENAME simgrid_update_xml)
66
67 add_custom_target(simgrid_update_xml ALL
68   COMMENT "Install ${CMAKE_BINARY_DIR}/bin/simgrid_update_xml"
69   COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_HOME_DIRECTORY}/tools/simgrid_update_xml.pl ${CMAKE_BINARY_DIR}/bin/simgrid_update_xml
70   )
71
72 # libraries
73 install(TARGETS simgrid
74   DESTINATION $ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/)
75
76 if(enable_lib_static AND NOT WIN32)
77   install(TARGETS simgrid_static
78     DESTINATION $ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/)
79 endif()
80
81 if(enable_java)
82   if(enable_lib_in_jar)
83     set(SIMGRID_JAR_TO_INSTALL "${SIMGRID_FULL_JAR}")
84   else()
85     set(SIMGRID_JAR_TO_INSTALL "${SIMGRID_JAR}")
86   endif()
87   install(TARGETS simgrid-java
88       DESTINATION $ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/)
89   install(FILES ${SIMGRID_JAR_TO_INSTALL}
90       DESTINATION $ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/java/
91       RENAME simgrid.jar)
92 endif()
93
94 # include files
95 set(HEADERS
96   ${headers_to_install}
97   ${generated_headers_to_install}
98   )
99 foreach(file ${HEADERS})
100   get_filename_component(location ${file} PATH)
101   string(REPLACE "${CMAKE_CURRENT_BINARY_DIR}/" "" location "${location}")
102   install(FILES ${file}
103     DESTINATION $ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/${location})
104 endforeach(file ${HEADERS})
105
106 # example files
107 foreach(file ${examples_to_install})
108   string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/examples/" "" file ${file})
109   get_filename_component(location ${file} PATH)
110   install(FILES "examples/${file}"
111     DESTINATION $ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/doc/simgrid/examples/${location})
112 endforeach(file ${examples_to_install})
113
114 # bindings cruft
115
116 if(HAVE_LUA)
117   file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/lib/lua/5.1")
118   add_custom_target(simgrid_lua ALL
119     DEPENDS simgrid
120     ${CMAKE_BINARY_DIR}/lib/lua/5.1/simgrid.${LIB_EXE}
121     )
122   add_custom_command(
123     OUTPUT ${CMAKE_BINARY_DIR}/lib/lua/5.1/simgrid.${LIB_EXE}
124     COMMAND ${CMAKE_COMMAND} -E create_symlink ../../libsimgrid.${LIB_EXE} ${CMAKE_BINARY_DIR}/lib/lua/5.1/simgrid.${LIB_EXE}
125     )
126   install(FILES ${CMAKE_BINARY_DIR}/lib/lua/5.1/simgrid.${LIB_EXE}
127     DESTINATION $ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/lua/5.1
128     )
129 endif()
130
131 ###########################################
132 ### Fill in the "make uninstall" target ###
133 ###########################################
134
135 add_custom_target(uninstall
136   COMMAND ${CMAKE_COMMAND} -E   remove_directory ${CMAKE_INSTALL_PREFIX}/doc/simgrid
137   COMMAND ${CMAKE_COMMAND} -E   echo "uninstall doc ok"
138   COMMAND ${CMAKE_COMMAND} -E   remove -f ${CMAKE_INSTALL_PREFIX}/lib/libsimgrid*
139   COMMAND ${CMAKE_COMMAND} -E   remove -f ${CMAKE_INSTALL_PREFIX}/lib/lua/5.1/simgrid*
140   COMMAND ${CMAKE_COMMAND} -E   echo "uninstall lib ok"
141   COMMAND ${CMAKE_COMMAND} -E   remove -f ${CMAKE_INSTALL_PREFIX}/bin/smpicc
142   COMMAND ${CMAKE_COMMAND} -E   remove -f ${CMAKE_INSTALL_PREFIX}/bin/smpicxx
143   COMMAND ${CMAKE_COMMAND} -E   remove -f ${CMAKE_INSTALL_PREFIX}/bin/smpif2c
144   COMMAND ${CMAKE_COMMAND} -E   remove -f ${CMAKE_INSTALL_PREFIX}/bin/smpiff
145   COMMAND ${CMAKE_COMMAND} -E   remove -f ${CMAKE_INSTALL_PREFIX}/bin/smpif90
146   COMMAND ${CMAKE_COMMAND} -E   remove -f ${CMAKE_INSTALL_PREFIX}/bin/smpirun
147   COMMAND ${CMAKE_COMMAND} -E   remove -f ${CMAKE_INSTALL_PREFIX}/bin/tesh
148   COMMAND ${CMAKE_COMMAND} -E   remove -f ${CMAKE_INSTALL_PREFIX}/bin/simgrid-colorizer
149   COMMAND ${CMAKE_COMMAND} -E   remove -f ${CMAKE_INSTALL_PREFIX}/bin/simgrid_update_xml
150   COMMAND ${CMAKE_COMMAND} -E   remove -f ${CMAKE_INSTALL_PREFIX}/bin/graphicator
151   COMMAND ${CMAKE_COMMAND} -E   echo "uninstall bin ok"
152   COMMAND ${CMAKE_COMMAND} -E   remove_directory ${CMAKE_INSTALL_PREFIX}/include/instr
153   COMMAND ${CMAKE_COMMAND} -E   remove_directory ${CMAKE_INSTALL_PREFIX}/include/msg
154   COMMAND ${CMAKE_COMMAND} -E   remove_directory ${CMAKE_INSTALL_PREFIX}/include/simdag
155   COMMAND ${CMAKE_COMMAND} -E   remove_directory ${CMAKE_INSTALL_PREFIX}/include/smpi
156   COMMAND ${CMAKE_COMMAND} -E   remove_directory ${CMAKE_INSTALL_PREFIX}/include/simix
157   COMMAND ${CMAKE_COMMAND} -E   remove_directory ${CMAKE_INSTALL_PREFIX}/include/surf
158   COMMAND ${CMAKE_COMMAND} -E   remove_directory ${CMAKE_INSTALL_PREFIX}/include/xbt
159   COMMAND ${CMAKE_COMMAND} -E   remove_directory ${CMAKE_INSTALL_PREFIX}/include/mc
160   COMMAND ${CMAKE_COMMAND} -E   remove_directory ${CMAKE_INSTALL_PREFIX}/include/simgrid
161   COMMAND ${CMAKE_COMMAND} -E   remove -f ${CMAKE_INSTALL_PREFIX}/include/simgrid.h
162   COMMAND ${CMAKE_COMMAND} -E   remove -f ${CMAKE_INSTALL_PREFIX}/include/simgrid_config.h
163   COMMAND ${CMAKE_COMMAND} -E   remove -f ${CMAKE_INSTALL_PREFIX}/include/xbt.h
164   COMMAND ${CMAKE_COMMAND} -E   echo "uninstall include ok"
165   COMMAND ${CMAKE_COMMAND} -E   remove -f ${CMAKE_INSTALL_PREFIX}/share/man/man1/simgrid_update_xml.1
166     COMMAND ${CMAKE_COMMAND} -E remove -f ${CMAKE_INSTALL_PREFIX}/share/man/man1/tesh.1
167   COMMAND ${CMAKE_COMMAND} -E   echo "uninstall man ok"
168   WORKING_DIRECTORY "${CMAKE_INSTALL_PREFIX}"
169   )
170
171 if(HAVE_LUA)
172   add_custom_command(TARGET uninstall
173     COMMAND ${CMAKE_COMMAND} -E echo "uninstall binding lua ok"
174     COMMAND ${CMAKE_COMMAND} -E remove -f ${CMAKE_INSTALL_PREFIX}/lib/lua/5.1/simgrid.${LIB_EXE}
175     WORKING_DIRECTORY "${CMAKE_HOME_DIRECTORY}/"
176     )
177 endif()
178
179 ################################################################
180 ## Build a sain "make dist" target to build a source package ###
181 ##   containing only the files that I explicitely state      ###
182 ##   (instead of any cruft laying on my disk as CPack does)  ###
183 ################################################################
184
185 # This is the complete list of what will be added to the source archive
186 set(source_to_pack
187   ${headers_to_install}
188   ${source_of_generated_headers}
189   ${BINDINGS_SRC}
190   ${GTNETS_SRC}
191   ${JEDULE_SRC}
192   ${JMSG_C_SRC}
193   ${JMSG_JAVA_SRC}
194   ${JSURF_SWIG_SRC}
195   ${JSURF_SWIG_SRC_EXTRA}
196   ${JSURF_C_SRC}
197   ${LUA_SRC}
198   ${MC_SRC}
199   ${MSG_SRC}
200   ${NS3_SRC}
201   ${RNGSTREAM_SRC}
202   ${SIMDAG_SRC}
203   ${SIMGRID_SRC}
204   ${SIMIX_SRC}
205   ${SMPI_SRC}
206   ${SURF_SRC}
207   ${TRACING_SRC}
208   ${XBT_RL_SRC}
209   ${XBT_SRC}
210   ${EXTRA_DIST}
211   ${CMAKE_SOURCE_FILES}
212   ${EXAMPLES_CMAKEFILES_TXT}
213   ${TESHSUITE_CMAKEFILES_TXT}
214   ${TOOLS_CMAKEFILES_TXT}
215   ${DOC_FIGS}
216   ${DOC_IMG}
217   ${DOC_SOURCES}
218   ${DOC_TOOLS}
219   ${PLATFORMS_EXAMPLES}
220   ${README_files}
221   ${bin_files}
222   ${examples_src}
223   ${tesh_files}
224   ${teshsuite_src}
225   ${testsuite_src}
226   ${tools_src}
227   ${txt_files}
228   ${xml_files}
229   )
230
231 ##########################################
232 ### Fill in the "make dist-dir" target ###
233 ##########################################
234
235 add_custom_target(dist-dir
236   COMMENT "Generating the distribution directory"
237   COMMAND ${CMAKE_COMMAND} -E remove_directory ${PROJECT_NAME}-${release_version}/
238   COMMAND ${CMAKE_COMMAND} -E remove ${PROJECT_NAME}-${release_version}.tar.gz
239   COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_NAME}-${release_version}
240   COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_NAME}-${release_version}/doc/html/
241   COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_HOME_DIRECTORY}/doc/html/ ${PROJECT_NAME}-${release_version}/doc/html/
242   )
243 add_dependencies(dist-dir simgrid_documentation)
244 add_dependencies(dist-dir maintainer_files)
245
246 set(dirs_in_tarball "")
247 foreach(file ${source_to_pack})
248   #message(${file})
249   # This damn prefix is still set somewhere (seems to be in subdirs)
250   string(REPLACE "${CMAKE_HOME_DIRECTORY}/" "" file "${file}")
251
252   # Create the directory on need
253   get_filename_component(file_location ${file} PATH)
254   string(REGEX MATCH ";${file_location};" OPERATION "${dirs_in_tarball}")
255   if(NOT OPERATION)
256     set(dirs_in_tarball "${dirs_in_tarball};${file_location};")
257     add_custom_command(
258       TARGET dist-dir
259       COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_NAME}-${release_version}/${file_location}/
260       )
261   endif()
262
263   # Actually copy the file
264   add_custom_command(
265     TARGET dist-dir
266     COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_HOME_DIRECTORY}/${file} ${PROJECT_NAME}-${release_version}/${file_location}
267     )
268 endforeach(file ${source_to_pack})
269
270 add_custom_command(
271   TARGET dist-dir
272   COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/Scripts/Makefile.default ${PROJECT_NAME}-${release_version}/Makefile
273   COMMAND ${CMAKE_COMMAND} -E echo "${GIT_VERSION}" > ${PROJECT_NAME}-${release_version}/.gitversion
274   )
275
276 ######################################
277 ### Fill in the "make dist" target ###
278 ######################################
279
280 add_custom_target(dist
281   COMMENT "Removing the distribution directory"
282   DEPENDS ${CMAKE_BINARY_DIR}/${PROJECT_NAME}-${release_version}.tar.gz
283   COMMAND ${CMAKE_COMMAND} -E echo ${PROJECT_NAME}-${release_version} > ${CMAKE_BINARY_DIR}/VERSION
284   COMMAND ${CMAKE_COMMAND} -E remove_directory ${PROJECT_NAME}-${release_version}/
285   )
286
287 add_custom_command(
288   OUTPUT ${CMAKE_BINARY_DIR}/${PROJECT_NAME}-${release_version}.tar.gz
289   COMMENT "Compressing the archive from the distribution directory"
290   COMMAND ${CMAKE_COMMAND} -E tar cf ${PROJECT_NAME}-${release_version}.tar ${PROJECT_NAME}-${release_version}/
291   COMMAND gzip -9v ${PROJECT_NAME}-${release_version}.tar
292   COMMAND ${CMAKE_COMMAND} -E remove_directory ${PROJECT_NAME}-${release_version}/
293   )
294 add_dependencies(dist dist-dir)
295
296 if(NOT enable_maintainer_mode)
297   add_custom_target(echo-dist
298     COMMAND ${CMAKE_COMMAND} -E echo "WARNING: ----------------------------------------------------"
299     COMMAND ${CMAKE_COMMAND} -E echo "WARNING: Distrib is generated without option maintainer mode "
300     COMMAND ${CMAKE_COMMAND} -E echo "WARNING: ----------------------------------------------------"
301     )
302   add_dependencies(dist echo-dist)
303 endif()
304
305 ###########################################
306 ### Fill in the "make distcheck" target ###
307 ###########################################
308
309 set(CMAKE_BINARY_TEST_DIR ${CMAKE_BINARY_DIR})
310
311 # Allow to test the "make dist"
312 add_custom_target(distcheck
313   COMMAND ${CMAKE_COMMAND} -E echo "XXX compare archive with git repository"
314   COMMAND ${CMAKE_HOME_DIRECTORY}/tools/check_dist_archive -batch ${CMAKE_BINARY_TEST_DIR}/${PROJECT_NAME}-${release_version}.tar.gz
315
316   COMMAND ${CMAKE_COMMAND} -E echo "XXX remove old copy"
317   COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_BINARY_TEST_DIR}/${PROJECT_NAME}-${release_version}
318
319   COMMAND ${CMAKE_COMMAND} -E echo "XXX Untar distrib"
320   COMMAND ${CMAKE_COMMAND} -E tar xf ${CMAKE_BINARY_TEST_DIR}/${PROJECT_NAME}-${release_version}.tar.gz ${CMAKE_BINARY_TEST_DIR}/${PROJECT_NAME}-${release_version}
321
322   COMMAND ${CMAKE_COMMAND} -E echo "XXX create build and install subtrees"
323   COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_TEST_DIR}/${PROJECT_NAME}-${release_version}/_build
324   COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_TEST_DIR}/${PROJECT_NAME}-${release_version}/_inst
325
326   COMMAND ${CMAKE_COMMAND} -E echo "XXX Configure"
327   COMMAND ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_TEST_DIR}/${PROJECT_NAME}-${release_version}/_build
328   ${CMAKE_COMMAND}
329   -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_TEST_DIR}/${PROJECT_NAME}-${release_version}/_inst
330   ..
331   COMMAND ${CMAKE_COMMAND} -E echo "XXX Build"
332   COMMAND ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_TEST_DIR}/${PROJECT_NAME}-${release_version}/_build ${CMAKE_MAKE_PROGRAM}
333
334   COMMAND ${CMAKE_COMMAND} -E echo "XXX Test"
335   COMMAND ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_TEST_DIR}/${PROJECT_NAME}-${release_version}/_build ctest --output-on-failure
336
337   COMMAND ${CMAKE_COMMAND} -E echo "XXX Install"
338   COMMAND ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_TEST_DIR}/${PROJECT_NAME}-${release_version}/_build ${CMAKE_MAKE_PROGRAM} install
339   COMMAND ${CMAKE_COMMAND} -E create_symlink
340   ${CMAKE_BINARY_TEST_DIR}/${PROJECT_NAME}-${release_version}/_inst/lib/libsimgrid.so
341   ${CMAKE_BINARY_TEST_DIR}/${PROJECT_NAME}-${release_version}/_inst/lib/libsimgridtest.so
342
343   COMMAND ${CMAKE_COMMAND} -E echo "XXX Build documentation"
344   COMMAND ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_TEST_DIR}/${PROJECT_NAME}-${release_version}/_build ${CMAKE_MAKE_PROGRAM} simgrid_documentation
345
346   COMMAND ${CMAKE_COMMAND} -E echo "XXX Install with documentation"
347   COMMAND ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_TEST_DIR}/${PROJECT_NAME}-${release_version}/_build ${CMAKE_MAKE_PROGRAM} install
348
349   COMMAND ${CMAKE_COMMAND} -E echo "XXX Remove temp directories"
350   COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_BINARY_TEST_DIR}/${PROJECT_NAME}-${release_version}
351   )
352 add_dependencies(distcheck dist)
353
354 #######################################
355 ### Fill in the "make check" target ###
356 #######################################
357
358 if(enable_memcheck)
359   add_custom_target(check
360     COMMAND ctest -D ExperimentalMemCheck
361     )
362 else()
363   add_custom_target(check
364     COMMAND make test
365     )
366 endif()
367
368 #######################################
369 ### Fill in the "make xxx-clean" target ###
370 #######################################
371
372 add_custom_target(maintainer-clean
373   COMMAND ${CMAKE_COMMAND} -E remove -f src/config_unit.c
374   COMMAND ${CMAKE_COMMAND} -E remove -f src/cunit_unit.c
375   COMMAND ${CMAKE_COMMAND} -E remove -f src/dict_unit.c
376   COMMAND ${CMAKE_COMMAND} -E remove -f src/dynar_unit.c
377   COMMAND ${CMAKE_COMMAND} -E remove -f src/ex_unit.c
378   COMMAND ${CMAKE_COMMAND} -E remove -f src/set_unit.c
379   COMMAND ${CMAKE_COMMAND} -E remove -f src/simgrid_units_main.c
380   COMMAND ${CMAKE_COMMAND} -E remove -f src/swag_unit.c
381   COMMAND ${CMAKE_COMMAND} -E remove -f src/xbt_sha_unit.c
382   COMMAND ${CMAKE_COMMAND} -E remove -f src/xbt_str_unit.c
383   COMMAND ${CMAKE_COMMAND} -E remove -f src/xbt_strbuff_unit.c
384   COMMAND ${CMAKE_COMMAND} -E remove -f src/xbt_synchro_unit.c
385   WORKING_DIRECTORY "${CMAKE_HOME_DIRECTORY}"
386   )
387
388 include(CPack)