From c3cfe3c2ce3037e52906efe28347b925af0c056f Mon Sep 17 00:00:00 2001 From: Axel Naumann <Axel.Naumann@cern.ch> Date: Mon, 18 Jul 2011 08:57:28 +0000 Subject: [PATCH] From Pere: Adds CPack installer capabilities to the CMake system. To generate the installers is as simple as making the target 'package' . Alternatively you can use the cpack command like this: cpack -G NSIS or cpack -G PackageMaker git-svn-id: http://root.cern.ch/svn/root/trunk@40270 27541ba8-7e3a-0410-8455-c3a389f83636 --- CMakeLists.txt | 61 +++++++++++++++++++++--- cmake/modules/CMakeCPackOptions.cmake.in | 39 +++++++++++++++ cmake/modules/RootNewMacros.cmake | 42 +++++++++------- core/CMakeLists.txt | 3 ++ math/genetic/CMakeLists.txt | 2 +- 5 files changed, 123 insertions(+), 24 deletions(-) create mode 100644 cmake/modules/CMakeCPackOptions.cmake.in diff --git a/CMakeLists.txt b/CMakeLists.txt index 343c3b52dd3..f38113d66f7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -36,9 +36,11 @@ include(SearchInstalledSoftware) ROOT_SHOW_OPTIONS() #---Set the library version in the main CMakeLists.txt------------------------------------------ -set(ROOT_MAJOR_VERSION 5) -set(ROOT_MINOR_VERSION 28) -set(ROOT_PATCH_VERSION 00) +file(READ ${CMAKE_SOURCE_DIR}/build/version_number versionstr) +string(STRIP ${versionstr} versionstr) +string(REGEX REPLACE "([0-9]+)[.][0-9]+[/][0-9]+" "\\1" ROOT_MAJOR_VERSION ${versionstr}) +string(REGEX REPLACE "[0-9]+[.]([0-9]+)[/][0-9]+" "\\1" ROOT_MINOR_VERSION ${versionstr}) +string(REGEX REPLACE "[0-9]+[.][0-9]+[/]([0-9]+)" "\\1" ROOT_PATCH_VERSION ${versionstr}) set(ROOT_VERSION "${ROOT_MAJOR_VERSION}.${ROOT_MINOR_VERSION}.${ROOT_PATCH_VERSION}") #---Configure and install various files neded later and for clients ----------------------------- @@ -79,6 +81,8 @@ if(roofit) endif() include(PostInstalledSoftware) +install(EXPORT ${CMAKE_PROJECT_NAME}Exports DESTINATION cmake/modules) + #---Installation of project-wise artifacts------------------------------------------------------- if(NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_INSTALL_PREFIX) install(FILES LICENSE DESTINATION .) @@ -87,12 +91,55 @@ if(NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_INSTALL_PREFIX) PATTERN ".svn" EXCLUDE REGEX system.rootrc EXCLUDE REGEX root.mimes EXCLUDE) - install(DIRECTORY geom/ DESTINATION geom PATTERN ".svn" EXCLUDE) install(DIRECTORY fonts/ DESTINATION fonts PATTERN ".svn" EXCLUDE) install(DIRECTORY icons/ DESTINATION icons PATTERN ".svn" EXCLUDE) install(DIRECTORY macros/ DESTINATION macros PATTERN ".svn" EXCLUDE) install(DIRECTORY man/ DESTINATION man PATTERN ".svn" EXCLUDE) - install(DIRECTORY test/ DESTINATION test PATTERN ".svn" EXCLUDE) - install(DIRECTORY tutorials/ DESTINATION tutorials PATTERN ".svn" EXCLUDE) + install(DIRECTORY test/ DESTINATION test COMPONENT tests PATTERN ".svn" EXCLUDE) + install(DIRECTORY tutorials/ DESTINATION tutorials COMPONENT tests PATTERN ".svn" EXCLUDE) install(DIRECTORY cmake/modules DESTINATION cmake PATTERN ".svn" EXCLUDE) -endif() \ No newline at end of file +endif() + +#---Packaging------------------------------------------------------------------------------------- +include(InstallRequiredSystemLibraries) +configure_file(cmake/modules/CMakeCPackOptions.cmake.in CMakeCPackOptions.cmake @ONLY) +configure_file(README/README README.txt COPYONLY) +configure_file(LICENSE LICENSE.txt COPYONLY) +set(CPACK_PROJECT_CONFIG_FILE ${CMAKE_BINARY_DIR}/CMakeCPackOptions.cmake) +set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "ROOT project") +set(CPACK_PACKAGE_VENDOR "HEPSoft") +set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_BINARY_DIR}/README.txt") +set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_BINARY_DIR}/LICENSE.txt") +set(CPACK_RESOURCE_FILE_README "${CMAKE_BINARY_DIR}/README.txt") +set(CPACK_PACKAGE_VERSION_MAJOR ${ROOT_MAJOR_VERSION}) +set(CPACK_PACKAGE_VERSION_MINOR ${ROOT_MINOR_VERSION}) +set(CPACK_PACKAGE_VERSION_PATCH ${ROOT_PATCH_VERSION}) +set(CPACK_PACKAGE_RELOCATABLE True) +set(CPACK_PACKAGE_INSTALL_DIRECTORY "ROOT ${ROOT_MAJOR_VERSION}.${ROOT_MINOR_VERSION}") +if(CMAKE_BUILD_TYPE STREQUAL Release) + set(CPACK_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${ROOT_VERSION}-${ROOT_ARCHITECTURE}") +else() + set(CPACK_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${ROOT_VERSION}-${ROOT_ARCHITECTURE}-${CMAKE_BUILD_TYPE}") +endif() +set(CPACK_SOURCE_STRIP_FILES "") +set(CPACK_PACKAGE_EXECUTABLES "root" "ROOT") +include(CPack) + +#---Define components and installation types-------------------------------------------------- +cpack_add_install_type(full DISPLAY_NAME "Full Installation") +cpack_add_install_type(minimal DISPLAY_NAME "Minimal Installation") +cpack_add_install_type(developer DISPLAY_NAME "Developer Installation") +cpack_add_component(applications DISPLAY_NAME "ROOT Applications" + DESCRIPTION "ROOT executables such as root.exe" + INSTALL_TYPES full minimal developer) +cpack_add_component(libraries DISPLAY_NAME "ROOT Libraries" + DESCRIPTION "All ROOT libraries and dictionaries" + INSTALL_TYPES full minimal developer) +cpack_add_component(headers DISPLAY_NAME "C++ Headers" + DESCRIPTION "These are needed to do any development" + INSTALL_TYPES full developer) +cpack_add_component(tests DISPLAY_NAME "ROOT Tests and Tutorials" + DESCRIPTION "These are needed to do any test and tutorial" + INSTALL_TYPES full developer) + + diff --git a/cmake/modules/CMakeCPackOptions.cmake.in b/cmake/modules/CMakeCPackOptions.cmake.in new file mode 100644 index 00000000000..21972aaa239 --- /dev/null +++ b/cmake/modules/CMakeCPackOptions.cmake.in @@ -0,0 +1,39 @@ +# This file is configured at cmake time, and loaded at cpack time. +# To pass variables to cpack from cmake, they must be configured +# in this file. + +# This file is configured at cmake time, and loaded at cpack time. +# To pass variables to cpack from cmake, they must be configured +# in this file. + +if(CPACK_GENERATOR MATCHES "NSIS") + # There is a bug in NSI that does not handle full unix paths properly. Make + # sure there is at least one set of four (4) backlasshes. + set(CPACK_PACKAGE_ICON "@CMAKE_SOURCE_DIR@\\icons\\rootdrawing-logo.bmp") + set(CPACK_NSIS_MUI_ICON "@CMAKE_SOURCE_DIR@\\icons\\RootIcon.ico") + set(CPACK_NSIS_MUI_UNIICON "@CMAKE_SOURCE_DIR@\\icons\\RootIcon.ico") + set(CPACK_NSIS_DISPLAY_NAME "${CPACK_PACKAGE_INSTALL_DIRECTORY}") + set(CPACK_NSIS_HELP_LINK "http:\\\\root.cern.ch") + set(CPACK_NSIS_URL_INFO_ABOUT "http:\\\\root.cern.ch\\drupal\\content\\about") + set(CPACK_NSIS_CONTACT "roottalk@root.cern.ch") + set(CPACK_NSIS_MODIFY_PATH ON) + # Register .root file type + set(CPACK_NSIS_EXTRA_INSTALL_COMMANDS " + WriteRegStr HKCR '.root' '' 'RootFile' + WriteRegStr HKCR 'RootFile' '' 'Root Data File' + WriteRegStr HKCR 'RootFile\\shell' '' 'open' + WriteRegStr HKCR 'RootFile\\shell\\DefaultIcon' '' '$INSTDIR\\icons\\RootIcon.ico' + WriteRegStr HKCR 'RootFile\\shell\\open\\command' '' \\ + '$INSTDIR\\bin\\root.exe -l \"%1\" \"$INSTDIR\\macros\\fileopen.C\"' + ") + set(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS " + DeleteRegKey HKCR '.root' + DeleteRegKey HKCR 'RootFile' + ") +endif() + + +if("${CPACK_GENERATOR}" STREQUAL "PackageMaker") + set(CPACK_PACKAGING_INSTALL_PREFIX "/${CPACK_PACKAGE_INSTALL_DIRECTORY}") + set(CPACK_PACKAGE_DEFAULT_LOCATION "/Applications") +endif() diff --git a/cmake/modules/RootNewMacros.cmake b/cmake/modules/RootNewMacros.cmake index 6ca6e1f7330..0cb0c7d1628 100644 --- a/cmake/modules/RootNewMacros.cmake +++ b/cmake/modules/RootNewMacros.cmake @@ -246,21 +246,32 @@ function(ROOT_LINKER_LIBRARY library) if(ARG_CMAKENOEXPORT) install(TARGETS ${library} RUNTIME DESTINATION bin LIBRARY DESTINATION lib - ARCHIVE DESTINATION lib) + ARCHIVE DESTINATION lib + COMPONENT libraries) else() install(TARGETS ${library} EXPORT ${CMAKE_PROJECT_NAME}Exports RUNTIME DESTINATION bin LIBRARY DESTINATION lib - ARCHIVE DESTINATION lib) - install(EXPORT ${CMAKE_PROJECT_NAME}Exports DESTINATION cmake/modules) + ARCHIVE DESTINATION lib + COMPONENT libraries) + #install(EXPORT ${CMAKE_PROJECT_NAME}Exports DESTINATION cmake/modules) endif() if(WIN32) if(CMAKE_GENERATOR MATCHES "Visual Studio") - install(FILES ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/Debug/lib${library}.pdb CONFIGURATIONS Debug DESTINATION bin) - install(FILES ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/RelWithDebInfo/lib${library}.pdb CONFIGURATIONS RelWithDebInfo DESTINATION bin) - else() - install(FILES ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/lib${library}.pdb CONFIGURATIONS Debug RelWithDebInfo DESTINATION bin) - endif() + install(FILES ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/Debug/lib${library}.pdb + CONFIGURATIONS Debug + DESTINATION bin + COMPONENT libraries) + install(FILES ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/RelWithDebInfo/lib${library}.pdb + CONFIGURATIONS RelWithDebInfo + DESTINATION bin + COMPONENT libraries) + else() + install(FILES ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/lib${library}.pdb + CONFIGURATIONS Debug RelWithDebInfo + DESTINATION bin + COMPONENT libraries) + endif() endif() endfunction() @@ -275,11 +286,10 @@ function(ROOT_MODULE_LIBRARY library) set_target_properties(${library} PROPERTIES ${ROOT_LIBRARY_PROPERTIES}) target_link_libraries(${library} ${ARG_LIBRARIES}) #----Installation details------------------------------------------------------- - #install(TARGETS ${library} EXPORT ${CMAKE_PROJECT_NAME}Exports DESTINATION ${lib}) install(TARGETS ${library} RUNTIME DESTINATION bin LIBRARY DESTINATION lib - ARCHIVE DESTINATION lib) - #install(EXPORT ${CMAKE_PROJECT_NAME}Exports DESTINATION cmake) + ARCHIVE DESTINATION lib + COMPONENT libraries) endfunction() #--------------------------------------------------------------------------------------------------- @@ -349,7 +359,7 @@ function(ROOT_GENERATE_ROOTMAP library) add_custom_target( ${libprefix}${library}.rootmap ALL DEPENDS ${outfile}) set_target_properties(${libprefix}${library}.rootmap PROPERTIES FOLDER RootMaps ) #---Install the rootmap file------------------------------------ - install(FILES ${outfile} DESTINATION lib) + install(FILES ${outfile} DESTINATION lib COMPONENT libraries) endfunction() #--------------------------------------------------------------------------------------------------- @@ -362,7 +372,8 @@ function(ROOT_INSTALL_HEADERS) set(dirs inc/) endif() foreach(d ${dirs}) - install(DIRECTORY ${d} DESTINATION include + install(DIRECTORY ${d} DESTINATION include + COMPONENT headers PATTERN ".svn" EXCLUDE REGEX "LinkDef" EXCLUDE ) endforeach() @@ -393,10 +404,9 @@ function(ROOT_EXECUTABLE executable) endif() #----Installation details------------------------------------------------------ if(ARG_CMAKENOEXPORT) - install(TARGETS ${executable} RUNTIME DESTINATION ${bin}) + install(TARGETS ${executable} RUNTIME DESTINATION ${bin} COMPONENT applications) else() - install(TARGETS ${executable} EXPORT ${CMAKE_PROJECT_NAME}Exports RUNTIME DESTINATION ${bin}) - install(EXPORT ${CMAKE_PROJECT_NAME}Exports DESTINATION cmake/modules) + install(TARGETS ${executable} EXPORT ${CMAKE_PROJECT_NAME}Exports RUNTIME DESTINATION ${bin} COMPONENT applications) endif() endfunction() diff --git a/core/CMakeLists.txt b/core/CMakeLists.txt index 18e5334d356..c091a201ab3 100644 --- a/core/CMakeLists.txt +++ b/core/CMakeLists.txt @@ -74,6 +74,9 @@ set_source_files_properties(${CMAKE_SOURCE_DIR}/core/base/src/TPRegexp.cxx ${BASE1_DICTIONARY} ${BASE2_DICTIONARY} COMPILE_FLAGS -I${PCRE_INCLUDE_DIR} ) +set_source_files_properties(${CMAKE_SOURCE_DIR}/core/lzma/src/ZipLZMA.c + COMPILE_FLAGS -I${LZMA_INCLUDE_DIR} + ) if(${GCC_MAJOR} EQUAL 4 AND ${GCC_MINOR} EQUAL 1) set_source_files_properties(${CMAKE_SOURCE_DIR}/core/base/src/TString.cxx diff --git a/math/genetic/CMakeLists.txt b/math/genetic/CMakeLists.txt index c14c62c1b72..00c9097d632 100644 --- a/math/genetic/CMakeLists.txt +++ b/math/genetic/CMakeLists.txt @@ -8,6 +8,6 @@ ROOT_USE_PACKAGE(tmva) ROOT_GENERATE_DICTIONARY(G__Genetic Math/GeneticMinimizer.h LINKDEF LinkDef.h) ROOT_GENERATE_ROOTMAP(Genetic LINKDEF LinkDef.h DEPENDENCIES RIO Hist Matrix Tree Graf Gpad TreePlayer MLP Minuit MathCore XMLIO TMVA) -ROOT_LINKER_LIBRARY(Genetic *.cxx G__Genetic.cxx LIBRARIES Core Cint DEPENDENCIES MathCore TMVA) +ROOT_LINKER_LIBRARY(Genetic *.cxx G__Genetic.cxx CMAKENOEXPORT LIBRARIES Core Cint DEPENDENCIES MathCore TMVA) ROOT_INSTALL_HEADERS() -- GitLab