diff --git a/CMakeLists.txt b/CMakeLists.txt index 619bfedd4f73a27d4c91cd2a1074878c30f5308a..2d2ef573a582c83e5fdc273326b7111e2594cfeb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -28,13 +28,14 @@ add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} -LE Fullcheck) add_custom_target(fullcheck COMMAND ${CMAKE_CTEST_COMMAND}) # => 'make check' is an alias for 'ctest' -## declare project-wide user flags, and set default values +## Project-wide user flags -# options that can be switched off to simplify the build and reduce its scope +# options that are on by default (switch off for accelerated builds of limited scope) option(BORNAGAIN_PYTHON "Build with python support" ON) option(BORNAGAIN_GUI "Build a graphical user interface" ON) option(BORNAGAIN_TIFF_SUPPORT "Tiff files read/write support" ON) +# options that are off by default (switch on for additional functionality) option(BORNAGAIN_MPI "Build with MPI support" OFF) option(SLOWTESTS "CTest also covers slow tests" OFF) @@ -63,44 +64,50 @@ if(ALLCONFIG) set(CONFIGURE_DOXY ON) endif() -# include CMake macros and functions -#--- Setup details depending on the major platform type --- +## Various CMake settings (include order is of critical importance) + +# function definitions +include(commons/GetFilenameComponent) # overwrite CMake command + +include(BornAgain/Directories) if(CMAKE_SYSTEM_NAME MATCHES Linux) include(BornAgain/Linux) + include(BornAgain/NixInstall) elseif(APPLE) include(BornAgain/MacOS) + include(BornAgain/NixInstall) elseif(WIN32) include(BornAgain/Windows) endif() -include(commons/GetFilenameComponent) # overwrite CMake command -include(BornAgain/Directories) include(BornAgain/Compiler) -include(BornAgain/Dependences) if(ZERO_TOLERANCE) string(APPEND CMAKE_CXX_FLAGS " -Werror -Wfatal-errors") endif() + +include(BornAgain/Dependences) if(BORNAGAIN_GUI) include(BornAgain/Qt) string(APPEND CMAKE_CXX_FLAGS " -DHAVE_QT=ON") endif() include(BornAgain/Config) include(BornAgain/PythonDocs) -include(BornAgain/LineLength) # debug optimization if(BORNAGAIN_DEBUG_OPTIMIZATION) include(commons/DebugOptimization) endif() -# code coverage analysis +# code analysis +include(BornAgain/LineLength) if(BORNAGAIN_COVERAGE) include(commons/CoverageFunction) include(BornAgain/Coverage) endif() -# recurse into the given subdirectories +## recurse into the given subdirectories + if(BORNAGAIN_USERMANUAL) add_subdirectory(Doc/UserManual) endif() diff --git a/Core/CMakeLists.txt b/Core/CMakeLists.txt index 2c90cb7a7a1b07868d1b328a5a232010178caeb7..7fe50862f6b75129576f58bb2bec1ab99596e36f 100644 --- a/Core/CMakeLists.txt +++ b/Core/CMakeLists.txt @@ -263,37 +263,6 @@ if(WIN32) endforeach() message(STATUS "Other dlls: ${DLL_MSG}") -else() - # Install thisbornagain.sh. - install(FILES - ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/thisbornagain.sh - ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/thisbornagain.csh - PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ - GROUP_EXECUTE GROUP_READ WORLD_EXECUTE WORLD_READ - DESTINATION ${destination_libexec}) - - if(NOT BORNAGAIN_APPLE_BUNDLE AND NOT BUILD_DEBIAN) - # Create bin directory for links. - install(CODE " - FILE(MAKE_DIRECTORY \"${CMAKE_INSTALL_PREFIX}/${destination_bin}\") - " - COMPONENT Runtime) - # Make links. - install(CODE " - execute_process(COMMAND \${CMAKE_COMMAND} -E create_symlink - \"../${destination_libexec}/thisbornagain.sh\" \"thisbornagain.sh\" - WORKING_DIRECTORY \"${CMAKE_INSTALL_PREFIX}/${destination_bin}\") - " COMPONENT Runtime) - install(CODE " - execute_process(COMMAND \${CMAKE_COMMAND} -E create_symlink - \"../${destination_libexec}/thisbornagain.csh\" \"thisbornagain.csh\" - WORKING_DIRECTORY \"${CMAKE_INSTALL_PREFIX}/${destination_bin}\") - " COMPONENT Runtime) - else() - - install(FILES ${WRAP_DIR}/python/bornagain_python_install.py - DESTINATION ${destination_libexec}) - endif() endif() # Install bornagain/__init__.py and utilites diff --git a/cmake/BornAgain/Config.cmake b/cmake/BornAgain/Config.cmake index 72ce1d8a4b68a09ef3e1ba3f5302814f0f052c84..bd48224c063cf03230168482f1e317191908f46e 100644 --- a/cmake/BornAgain/Config.cmake +++ b/cmake/BornAgain/Config.cmake @@ -2,67 +2,6 @@ # BornAgain project configuration ############################################################################### -# ----------------------------------------------------------------------------- -# file extensions -# ----------------------------------------------------------------------------- - -if(WIN32) - set(libprefix _lib) - set(libsuffix .dll) -elseif(APPLE) - set(libprefix _lib) - set(libsuffix .so) -else() - set(libprefix _lib) - set(libsuffix .so) -endif() - -# ----------------------------------------------------------------------------- -# destinations -# ----------------------------------------------------------------------------- - -if(WIN32) - set(destination_bin bin) - set(destination_lib ${destination_bin}) - set(destination_gui bin) - set(destination_include include) - set(destination_examples Examples) - set(destination_images Images) - set(destination_libexec python) -else() - set(destination_suffix BornAgain-${BornAgain_VERSION_MAJOR}.${BornAgain_VERSION_MINOR}) - if(APPLE AND BORNAGAIN_APPLE_BUNDLE) - set(destination_bundle BornAgain.app) - set(destination_prefix ${destination_bundle}/Contents/) - set(destination_libexec ${destination_prefix}libexec/${destination_suffix}) - else() - if(APPLE) - set(QTDIR $ENV{QTDIR}) - message(STATUS "QTDIR is ${QTDIR}") - set(CMAKE_INSTALL_RPATH ${QTDIR}/lib) - endif() - set(destination_prefix "") - set(destination_libexec ${destination_prefix}lib/${destination_suffix}) - endif() - set(destination_bin ${destination_prefix}bin) - set(destination_gui ${destination_libexec}) - set(destination_lib ${destination_prefix}lib/${destination_suffix}) - set(destination_include ${destination_prefix}include/${destination_suffix}) - set(destination_share ${destination_prefix}share/${destination_suffix}/) - set(destination_examples ${destination_share}Examples) - set(destination_images ${destination_share}Images) -endif() - -message(STATUS "Destination directories: - bin->${destination_bin}, - lib->${destination_lib}, - gui->${destination_gui}, - include->${destination_include}, - share->${destination_share}, - examples->${destination_examples}, - images->${destination_images}, - libexec->${destination_libexec}") - # ----------------------------------------------------------------------------- # configure files # ----------------------------------------------------------------------------- diff --git a/cmake/BornAgain/Directories.cmake b/cmake/BornAgain/Directories.cmake index 36386c67183a1106212e6ad4c947b9261a43472d..85354d7ec01a18fe75fa684762bd3fb42fff7ce0 100644 --- a/cmake/BornAgain/Directories.cmake +++ b/cmake/BornAgain/Directories.cmake @@ -31,3 +31,64 @@ file(MAKE_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) file(MAKE_DIRECTORY ${BUILD_VAR_DIR}) file(MAKE_DIRECTORY ${BUILD_INC_DIR}) file(MAKE_DIRECTORY ${BUILD_SRC_DIR}) + +# ----------------------------------------------------------------------------- +# file extensions +# ----------------------------------------------------------------------------- + +if(WIN32) + set(libprefix _lib) + set(libsuffix .dll) +elseif(APPLE) + set(libprefix _lib) + set(libsuffix .so) +else() + set(libprefix _lib) + set(libsuffix .so) +endif() + +# ----------------------------------------------------------------------------- +# destinations +# ----------------------------------------------------------------------------- + +if(WIN32) + set(destination_bin bin) + set(destination_lib ${destination_bin}) + set(destination_gui bin) + set(destination_include include) + set(destination_examples Examples) + set(destination_images Images) + set(destination_libexec python) +else() + set(destination_suffix BornAgain-${BornAgain_VERSION_MAJOR}.${BornAgain_VERSION_MINOR}) + if(APPLE AND BORNAGAIN_APPLE_BUNDLE) + set(destination_bundle BornAgain.app) + set(destination_prefix ${destination_bundle}/Contents/) + set(destination_libexec ${destination_prefix}libexec/${destination_suffix}) + else() + if(APPLE) + set(QTDIR $ENV{QTDIR}) + message(STATUS "QTDIR is ${QTDIR}") + set(CMAKE_INSTALL_RPATH ${QTDIR}/lib) + endif() + set(destination_prefix "") + set(destination_libexec ${destination_prefix}lib/${destination_suffix}) + endif() + set(destination_bin ${destination_prefix}bin) + set(destination_gui ${destination_libexec}) + set(destination_lib ${destination_prefix}lib/${destination_suffix}) + set(destination_include ${destination_prefix}include/${destination_suffix}) + set(destination_share ${destination_prefix}share/${destination_suffix}/) + set(destination_examples ${destination_share}Examples) + set(destination_images ${destination_share}Images) +endif() + +message(STATUS "Destination directories: + bin->${destination_bin}, + lib->${destination_lib}, + gui->${destination_gui}, + include->${destination_include}, + share->${destination_share}, + examples->${destination_examples}, + images->${destination_images}, + libexec->${destination_libexec}") diff --git a/cmake/BornAgain/NixInstall.cmake b/cmake/BornAgain/NixInstall.cmake new file mode 100644 index 0000000000000000000000000000000000000000..6c7bdfbb5155adf9902b1abb905a88e2d37f4b77 --- /dev/null +++ b/cmake/BornAgain/NixInstall.cmake @@ -0,0 +1,34 @@ +if(WIN32) + message(FATAL_ERROR "Invalid invocation of NixInstall.cmake") +endif() + +# Install thisbornagain.sh. +install(FILES + ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/thisbornagain.sh + ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/thisbornagain.csh + PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ + GROUP_EXECUTE GROUP_READ WORLD_EXECUTE WORLD_READ + DESTINATION ${destination_libexec}) + +if(NOT BORNAGAIN_APPLE_BUNDLE AND NOT BUILD_DEBIAN) + # Create bin directory for links. + install(CODE " + FILE(MAKE_DIRECTORY \"${CMAKE_INSTALL_PREFIX}/${destination_bin}\") + " + COMPONENT Runtime) + # Make links. + install(CODE " + execute_process(COMMAND \${CMAKE_COMMAND} -E create_symlink + \"../${destination_libexec}/thisbornagain.sh\" \"thisbornagain.sh\" + WORKING_DIRECTORY \"${CMAKE_INSTALL_PREFIX}/${destination_bin}\") + " COMPONENT Runtime) + install(CODE " + execute_process(COMMAND \${CMAKE_COMMAND} -E create_symlink + \"../${destination_libexec}/thisbornagain.csh\" \"thisbornagain.csh\" + WORKING_DIRECTORY \"${CMAKE_INSTALL_PREFIX}/${destination_bin}\") + " COMPONENT Runtime) +else() + + install(FILES ${WRAP_DIR}/python/bornagain_python_install.py + DESTINATION ${destination_libexec}) +endif()