Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
cmake: customizable installation directories
authorMillian Poquet <millian.poquet@inria.fr>
Tue, 25 Feb 2020 18:23:40 +0000 (19:23 +0100)
committerMillian Poquet <millian.poquet@inria.fr>
Tue, 25 Feb 2020 18:23:40 +0000 (19:23 +0100)
- uses GNUInstallDirs: https://cmake.org/cmake/help/latest/module/GNUInstallDirs.html
- cmake standard: https://cmake.org/cmake/help/latest/command/install.html#installing-targets

CMakeLists.txt
tools/cmake/Distrib.cmake
tools/cmake/Documentation.cmake
tools/cmake/MakeLib.cmake
tools/graphicator/CMakeLists.txt
tools/pkg-config/simgrid.pc.in

index 21d4b05..43f42e3 100644 (file)
@@ -26,7 +26,10 @@ endif()
 message(STATUS "Cmake version ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION}")
 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_HOME_DIRECTORY}/tools/cmake/Modules)
 
-project(SimGrid C CXX)
+project(simgrid C CXX)
+
+# customizable installation directories
+include(GNUInstallDirs)
 
 ## Save compiler flags preset with environment variables CFLAGS or CXXFLAGS;
 ## they will used within smpicc, smpicxx.
@@ -550,10 +553,10 @@ file(READ ${CMAKE_HOME_DIRECTORY}/src/smpi/smpitools.sh SMPITOOLS_SH) # Definiti
 
 ### SMPI script used when simgrid is installed
 set(exec_prefix ${CMAKE_INSTALL_PREFIX})
-set(includeflag "-I${CMAKE_INSTALL_PREFIX}/include -I${CMAKE_INSTALL_PREFIX}/include/smpi")
-set(includedir "${CMAKE_INSTALL_PREFIX}/include")
-set(libdir ${exec_prefix}/lib)
-set(CMAKE_SMPI_COMMAND "export LD_LIBRARY_PATH=\"${CMAKE_INSTALL_PREFIX}/lib")
+set(includeflag "-I${CMAKE_INSTALL_INCLUDEDIR} -I${CMAKE_INSTALL_INCLUDEDIR}/smpi")
+set(includedir "${CMAKE_INSTALL_INCLUDEDIR}")
+set(libdir "${CMAKE_INSTALL_LIBDIR}")
+set(CMAKE_SMPI_COMMAND "export LD_LIBRARY_PATH=\"${CMAKE_INSTALL_LIBDIR}")
 if(NS3_LIBRARY_PATH)
   set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}:${NS3_LIBRARY_PATH}")
 endif()
index 44e46fc..31f04b0 100644 (file)
@@ -3,7 +3,7 @@
 #########################################
 
 # doc
-install(DIRECTORY "${CMAKE_BINARY_DIR}/doc/html/" DESTINATION doc/simgrid/html/ OPTIONAL)
+install(DIRECTORY "${CMAKE_BINARY_DIR}/doc/html/" DESTINATION ${CMAKE_INSTALL_DOCDIR}/html/ OPTIONAL)
 
 # binaries
 if(enable_smpi)
@@ -11,22 +11,22 @@ if(enable_smpi)
     ${CMAKE_BINARY_DIR}/bin/smpicc
     ${CMAKE_BINARY_DIR}/bin/smpicxx
     ${CMAKE_BINARY_DIR}/bin/smpirun
-    DESTINATION bin/)
+    DESTINATION ${CMAKE_INSTALL_BINDIR}/)
   if(SMPI_FORTRAN)
     install(PROGRAMS
       ${CMAKE_BINARY_DIR}/bin/smpif90
       ${CMAKE_BINARY_DIR}/bin/smpiff
-      DESTINATION bin/)
+      DESTINATION ${CMAKE_INSTALL_BINDIR}/)
     install(PROGRAMS
       ${CMAKE_BINARY_DIR}/include/smpi/mpi.mod
-      DESTINATION include/smpi/)
+      DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/smpi/)
   endif()
 endif()
 
-install(PROGRAMS ${CMAKE_BINARY_DIR}/bin/tesh  DESTINATION bin/)
+install(PROGRAMS ${CMAKE_BINARY_DIR}/bin/tesh DESTINATION ${CMAKE_INSTALL_BINDIR}/)
 
 install(PROGRAMS ${CMAKE_HOME_DIRECTORY}/tools/MSG_visualization/colorize.pl
-  DESTINATION bin/
+  DESTINATION ${CMAKE_INSTALL_BINDIR}/
   RENAME simgrid-colorizer)
 
 add_custom_target(simgrid-colorizer ALL
@@ -34,7 +34,7 @@ add_custom_target(simgrid-colorizer ALL
   COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_HOME_DIRECTORY}/tools/MSG_visualization/colorize.pl ${CMAKE_BINARY_DIR}/bin/colorize)
 
 install(PROGRAMS ${CMAKE_HOME_DIRECTORY}/tools/simgrid_update_xml.pl
-  DESTINATION bin/
+  DESTINATION ${CMAKE_INSTALL_BINDIR}/
   RENAME simgrid_update_xml)
 
 add_custom_target(simgrid_update_xml ALL
@@ -42,7 +42,7 @@ add_custom_target(simgrid_update_xml ALL
   COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_HOME_DIRECTORY}/tools/simgrid_update_xml.pl ${CMAKE_BINARY_DIR}/bin/simgrid_update_xml)
 
 install(PROGRAMS ${CMAKE_HOME_DIRECTORY}/tools/simgrid_convert_TI_traces.py
-  DESTINATION bin/
+  DESTINATION ${CMAKE_INSTALL_BINDIR}/
   RENAME simgrid_convert_TI_traces)
 
 add_custom_target(simgrid_convert_TI_traces ALL
@@ -50,11 +50,11 @@ add_custom_target(simgrid_convert_TI_traces ALL
     COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_HOME_DIRECTORY}/tools/simgrid_convert_TI_traces.py ${CMAKE_BINARY_DIR}/bin/simgrid_convert_TI_traces)
 
 # libraries
-install(TARGETS simgrid DESTINATION lib/)
+install(TARGETS simgrid DESTINATION ${CMAKE_INSTALL_LIBDIR}/)
 
 if(enable_java)
   set(SIMGRID_JAR_TO_INSTALL "${SIMGRID_JAR}")
-  install(TARGETS simgrid-java   DESTINATION lib/)
+  install(TARGETS simgrid-java DESTINATION ${CMAKE_INSTALL_LIBDIR}/)
   install(FILES ${SIMGRID_JAR_TO_INSTALL}
       DESTINATION java/
       RENAME simgrid.jar)
@@ -63,21 +63,25 @@ endif()
 # pkg-config files
 configure_file("${CMAKE_HOME_DIRECTORY}/tools/pkg-config/simgrid.pc.in"
   "${PROJECT_BINARY_DIR}/simgrid.pc" @ONLY)
-install(FILES "${PROJECT_BINARY_DIR}/simgrid.pc" DESTINATION lib/pkgconfig/)
+install(FILES "${PROJECT_BINARY_DIR}/simgrid.pc" DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig/)
 
 # include files
-foreach(file ${headers_to_install}  ${generated_headers_to_install})
+foreach(file ${headers_to_install} ${generated_headers_to_install})
   get_filename_component(location ${file} PATH)
   string(REPLACE "${CMAKE_CURRENT_BINARY_DIR}/" "" location "${location}")
-  install(FILES ${file} DESTINATION ${location})
+  string(REGEX REPLACE "^include/" "" location "${location}")
+  string(REGEX REPLACE "^include$" "" location "${location}")
+  # message("installing '${file}' into '${CMAKE_INSTALL_INCLUDEDIR}/${location}'")
+  install(FILES ${file} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${location})
 endforeach()
 
 # example files
 foreach(file ${examples_to_install})
   string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/examples/" "" file ${file})
   get_filename_component(location ${file} PATH)
+  # message("DOC installing 'examples/${file}' into '${CMAKE_INSTALL_DOCDIR}/examples/${location}'")
   install(FILES "examples/${file}"
-    DESTINATION doc/simgrid/examples/${location})
+    DESTINATION ${CMAKE_INSTALL_DOCDIR}/examples/${location})
 endforeach(file ${examples_to_install})
 
 ###########################################
@@ -202,7 +206,7 @@ foreach(file ${source_to_pack})
   #message(${file})
   # This damn prefix is still set somewhere (seems to be in subdirs)
   string(REPLACE "${CMAKE_HOME_DIRECTORY}/" "" file "${file}")
-  
+
   # Prepare the list of files to include in the python sdist, one per line
   set(PYTHON_SOURCES "${PYTHON_SOURCES}\ninclude ${file}")
 
index 1386b18..da57877 100644 (file)
@@ -131,7 +131,7 @@ if(enable_documentation)
     ${CMAKE_HOME_DIRECTORY}/docs/manpages/smpif90.1
     ${CMAKE_HOME_DIRECTORY}/docs/manpages/smpiff.1
     ${CMAKE_HOME_DIRECTORY}/docs/manpages/smpirun.1
-    DESTINATION $ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/share/man/man1
+    DESTINATION ${CMAKE_INSTALL_MANDIR}/man1
   )
 
 else(enable_documentation)
index b29b592..2fddb53 100644 (file)
@@ -10,7 +10,7 @@ if(APPLE)
 
   # add the current location of libsimgrid-java.dynlib as a location for libsimgrid.dynlib
   # (useful when unpacking the native libraries from the jarfile)
-  set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
+  set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_FULL_LIBDIR}")
 endif()
 
 ###############################
@@ -34,7 +34,7 @@ if(enable_model-checking)
   set_property(TARGET simgrid-mc
                APPEND PROPERTY INCLUDE_DIRECTORIES "${INTERNAL_INCLUDES}")
   install(TARGETS simgrid-mc # install that binary without breaking the rpath on Mac
-    RUNTIME DESTINATION bin/)
+    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}/)
   add_dependencies(tests simgrid-mc)
 endif()
 
@@ -109,7 +109,7 @@ if(enable_smpi)
   set_target_properties(smpimain
     PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib/simgrid)
   install(TARGETS smpimain # install that binary without breaking the rpath on Mac
-    RUNTIME DESTINATION lib/simgrid)
+    RUNTIME DESTINATION ${CMAKE_INSTALL_LIBDIR}/simgrid)
   add_dependencies(tests smpimain)
 
   add_executable(smpireplaymain src/smpi/smpi_replay_main.cpp)
@@ -118,7 +118,7 @@ if(enable_smpi)
   set_target_properties(smpireplaymain
     PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib/simgrid)
   install(TARGETS smpireplaymain # install that binary without breaking the rpath on Mac
-    RUNTIME DESTINATION lib/simgrid)
+    RUNTIME DESTINATION ${CMAKE_INSTALL_LIBDIR}/simgrid)
   add_dependencies(tests smpireplaymain)
 
   if(SMPI_FORTRAN)
index 7c03fac..4c526be 100644 (file)
@@ -5,7 +5,7 @@ if(enable_msg)
   set_target_properties(graphicator PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
   ADD_TESH(graphicator --setenv srcdir=${CMAKE_HOME_DIRECTORY} --setenv bindir=${CMAKE_BINARY_DIR}/bin --cd ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/graphicator.tesh)
 
-  install(TARGETS graphicator DESTINATION bin/)
+  install(TARGETS graphicator DESTINATION ${CMAKE_INSTALL_BINDIR}/)
 
   ## Clean generated files
   get_directory_property(extra_clean_files ADDITIONAL_MAKE_CLEAN_FILES)
index 31af77d..10b5a69 100644 (file)
@@ -1,7 +1,7 @@
 prefix=@CMAKE_INSTALL_PREFIX@
-exec_prefix=${prefix}
-libdir=${prefix}/lib
-includedir=${prefix}/include
+exec_prefix=@CMAKE_INSTALL_FULL_BINDIR@
+libdir=@CMAKE_INSTALL_FULL_LIBDIR@
+includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@
 
 Name: SimGrid
 Description: Framework for the simulation of distributed applications (Clouds, HPC, Grids, IoT and others)