diff --git a/MultimakeCMake.cmake b/MultimakeCMake.cmake index 15cfa2a..d6a5892 100644 --- a/MultimakeCMake.cmake +++ b/MultimakeCMake.cmake @@ -28,7 +28,7 @@ macro(read_cmake_properties PROJECT) # INSTALL_COMMAND might already set to be disabled if(NOT ${${PROJECT}_NO_INSTALL}) - set(INSTALL_COMMAND ${MAKE_COMMAND} install) + set(INSTALL_COMMAND INSTALL_COMMAND ${MAKE_COMMAND} install) endif() set(DEPLOY_COMMAND DESTDIR=${DEPLOYMENT_PATH} ninja install) @@ -76,8 +76,6 @@ macro(add_cmake_external_project PROJECT PATH DEPENDENCIES CONFIGURATION_OPTIONS endmacro() - - macro(add_cmake_external_git_project PROJECT REPOSITORY_URL DEPENDENCIES CONFIGURATION_OPTIONS) validate_git_commit(${PROJECT}) diff --git a/MultimakeConfig.cmake b/MultimakeConfig.cmake index 2ec5549..d9280c5 100644 --- a/MultimakeConfig.cmake +++ b/MultimakeConfig.cmake @@ -65,6 +65,8 @@ endif() option(ENABLE_DEDICATED_INSTALLATION "Enable installation of every package in its own installation folder" OFF) +option(ENABLE_UP_TO_DATE_CHECK "Enable the generation of files needed to check if the build folder is up to date" OFF) + if(WITH_ICECC) message("icecc enabled") @@ -89,7 +91,7 @@ if(WITH_CLANG) endif() -option( ENABLE_UNINSTALLED_PKG_CONFIG "Enable the use of the uninstalled pkg-config file variants" OFF ) +option(ENABLE_UNINSTALLED_PKG_CONFIG "Enable the use of the uninstalled pkg-config file variants" OFF) option(ALWAYS_BUILD "Always build or install the projects by default, even if they have been sucessfully installed already" ON) @@ -113,18 +115,20 @@ macro(set_package_defined_with_git_repository PROJECT) endmacro() -set(UP_TO_DATE_CHECK_PATH ${CMAKE_INSTALL_PREFIX}/lib/cmake/MultimakeCheck) +if(ENABLE_UP_TO_DATE_CHECK) + set(UP_TO_DATE_CHECK_PATH ${CMAKE_INSTALL_PREFIX}/lib/cmake/MultimakeCheck) + file(MAKE_DIRECTORY ${UP_TO_DATE_CHECK_PATH}) -file(MAKE_DIRECTORY ${UP_TO_DATE_CHECK_PATH}) + add_custom_target(up_to_date_check_package_list) -add_custom_target(up_to_date_check_package_list) + file(GENERATE OUTPUT ${UP_TO_DATE_CHECK_PATH}/MultimakeCheckConfig.cmake CONTENT " + add_custom_target(_check_dummy) + foreach(PACKAGE_NAME $) + include(${UP_TO_DATE_CHECK_PATH}/Check_\${PACKAGE_NAME}.cmake) + endforeach() + ") +endif() -file(GENERATE OUTPUT ${UP_TO_DATE_CHECK_PATH}/MultimakeCheckConfig.cmake CONTENT " -add_custom_target(_check_dummy) -foreach(PACKAGE_NAME $) - include(${UP_TO_DATE_CHECK_PATH}/Check_\${PACKAGE_NAME}.cmake) -endforeach() -") macro(init_repository PROJECT) @@ -273,6 +277,10 @@ macro(read_common_properties PROJECT) endif() endif() + if(NOT DEFINED ${PROJECT}_NO_INSTALL) + set(${PROJECT}_NO_INSTALL 0) + endif() + if(${${PROJECT}_NO_INSTALL}) set(INSTALL_COMMAND INSTALL_COMMAND echo Installation of ${PROJECT} is disabled) else() @@ -328,25 +336,28 @@ endfunction() function(add_up_to_date_check_project PROJECT) - ExternalProject_Get_Property(${PROJECT} source_dir) - - # write a file identifying the version which we built - ExternalProject_Add_Step(${PROJECT} write_git_sha - DEPENDEES install - WORKING_DIRECTORY ${source_dir} - COMMAND git log -1 . > ${UP_TO_DATE_CHECK_PATH}/${PROJECT}.gitlog - ) - get_property(DEPS TARGET ${PROJECT} PROPERTY _EP_DEPENDS) - foreach(DEP ${DEPS}) - set(DEPENDENCIES ${DEPENDENCIES} check_${DEP}) - endforeach() + if (ENABLE_UP_TO_DATE_CHECK) + ExternalProject_Get_Property(${PROJECT} source_dir) + + # write a file identifying the version which we built + ExternalProject_Add_Step(${PROJECT} write_git_sha + DEPENDEES install + WORKING_DIRECTORY ${source_dir} + COMMAND git log -1 . > ${UP_TO_DATE_CHECK_PATH}/${PROJECT}.gitlog + ) - set(TARGET_NAME ${PROJECT}) # needed for the configure_file command - set(REPOSITORY_FOLDER ${source_dir}) # needed for the configure_file command - configure_file(${MULTIMAKE_FOLDER}/MultimakeCheck.cmake ${UP_TO_DATE_CHECK_PATH}/Check_${PROJECT}.cmake @ONLY) + get_property(DEPS TARGET ${PROJECT} PROPERTY _EP_DEPENDS) + foreach(DEP ${DEPS}) + set(DEPENDENCIES ${DEPENDENCIES} check_${DEP}) + endforeach() - append_target_property(up_to_date_check_package_list CONTENT ${PROJECT}) + set(TARGET_NAME ${PROJECT}) # needed for the configure_file command + set(REPOSITORY_FOLDER ${source_dir}) # needed for the configure_file command + configure_file(${MULTIMAKE_FOLDER}/MultimakeCheck.cmake ${UP_TO_DATE_CHECK_PATH}/Check_${PROJECT}.cmake @ONLY) + + append_target_property(up_to_date_check_package_list CONTENT ${PROJECT}) + endif() endfunction() diff --git a/MultimakeQt.cmake b/MultimakeQt.cmake index c316f56..25b8ae0 100644 --- a/MultimakeQt.cmake +++ b/MultimakeQt.cmake @@ -17,7 +17,6 @@ # # For further information see LICENSE - set(QT_STANDARD_CONFIGURE_PROPERTIES "-opensource;-confirm-license") if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") @@ -35,33 +34,47 @@ endmacro() macro(locate_qt) - - if(NOT DEFINED QT_PATH) - + + if (NOT DEFINED QT_QMAKE_PATH) + execute_process(COMMAND which qmake - OUTPUT_VARIABLE QT_PATH + OUTPUT_VARIABLE QT_QMAKE_PATH RESULT_VARIABLE RES + OUTPUT_STRIP_TRAILING_WHITESPACE ) - + if(RES EQUAL 0) - - get_filename_component(QT_PATH ${QT_PATH} DIRECTORY) - get_filename_component(QT_PATH ${QT_PATH} DIRECTORY) - - message("Qt installation located in ${QT_PATH} ${RES}") - - set(QT_CMAKE_PATH ${QT_PATH}/lib/cmake) - set(QT_CMAKE_OPTIONS -DCMAKE_PREFIX_PATH=${QT_CMAKE_PATH}) - + message("qmake path ${QT_QMAKE_PATH}") else() - message( FATAL_ERROR "A \"qmake\" executable could not be found in your $PATH => Unable to build Qt-based packages !") + message(FATAL "Could not find qmake executable. Set the QT_QMAKE_PATH variable.") endif() - + + endif() + + if (NOT DEFINED QT_CMAKE_OPTIONS) + + execute_process(COMMAND ${QT_QMAKE_PATH} -query QT_INSTALL_LIBS + OUTPUT_VARIABLE QT_LIBS_PATH + RESULT_VARIABLE RES + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + + if(NOT RES EQUAL 0) + message(FATAL_ERROR "Error invoking ${QT_QMAKE_PATH}") + endif() + + set(QT_CMAKE_OPTIONS "-DCMAKE_PREFIX_PATH=${QT_LIBS_PATH}/cmake") + endif() endmacro() +macro(multimake_find_qt PACKAGE_NAME) + locate_qt() + add_available_package(${PACKAGE_NAME}) +endmacro() + macro(add_qmake_external_project PROJECT PATH DEPENDENCIES CONFIGURATION_OPTIONS) @@ -70,7 +83,7 @@ macro(add_qmake_external_project PROJECT PATH DEPENDENCIES CONFIGURATION_OPTIONS add_dependencies_target(${PROJECT} "${DEPENDENCIES}") read_qmake_properties(${PROJECT}) - set(CONFIGURE_COMMAND ${QT_PATH}/bin/qmake ${PATH} ${QMAKE_COMMON_CONFIGURATION_OPTIONS} ${CONFIGURATION_OPTIONS}) + set(CONFIGURE_COMMAND ${QT_QMAKE_PATH} ${PATH} ${QMAKE_COMMON_CONFIGURATION_OPTIONS} ${CONFIGURATION_OPTIONS}) ExternalProject_Add(${PROJECT} DEPENDS ${DEPENDENCIES} @@ -105,9 +118,9 @@ macro(add_qmake_external_git_project PROJECT REPOSITORY_URL DEPENDENCIES CONFIGU set_package_defined_with_git_repository(${PROJECT}) add_dependencies_target(${PROJECT} "${DEPENDENCIES}") - - set(CONFIGURE_COMMAND ${QT_PATH}/bin/qmake ${PROJECTS_DOWNLOAD_DIR}/${PATH} ${QMAKE_COMMON_CONFIGURATION_OPTIONS} ${CONFIGURATION_OPTIONS}) - + + set(CONFIGURE_COMMAND ${QT_QMAKE_PATH} ${PROJECTS_DOWNLOAD_DIR}/${PATH} ${QMAKE_COMMON_CONFIGURATION_OPTIONS} ${CONFIGURATION_OPTIONS}) + ExternalProject_Add(${PROJECT} DEPENDS ${DEPENDENCIES} SOURCE_DIR ${PROJECTS_DOWNLOAD_DIR}/${PATH} @@ -135,20 +148,28 @@ macro(add_qmake_external_git_project PROJECT REPOSITORY_URL DEPENDENCIES CONFIGU endmacro() +macro(set_qt_location INSTALL_PREFIX) + set(QT_QMAKE_PATH ${INSTALL_PREFIX}/bin/qmake) + set(QT_CMAKE_OPTIONS "-DCMAKE_PREFIX_PATH=${INSTALL_PREFIX}/lib/cmake") + message("QT_QMAKE_PATH=${QT_QMAKE_PATH}") + message("QT_CMAKE_OPTIONS=${QT_CMAKE_OPTIONS}") +endmacro() + + macro(add_qt_external_tgz_project PROJECT PATH REPOSITORY_URL DEPENDENCIES INIT_REPOSITORY_OPTIONS CONFIGURATION_OPTIONS) - + read_common_properties(${PROJECT}) - + if(NOT ${PROJECT}_DEFINED) - + # We build Qt ourselves => point to that Qt to build other packages - set(QT_PATH ${${PROJECT}_INSTALL_PREFIX}) - + set_qt_location(${${PROJECT}_INSTALL_PREFIX}) + set_package_defined(${PROJECT}) add_dependencies_target(${PROJECT} "${DEPENDENCIES}") - set(CONFIGURE_CMD configure "${QT_STANDARD_CONFIGURE_PROPERTIES};${CONFIGURATION_OPTIONS}" ) + set(CONFIGURE_CMD configure "${QT_STANDARD_CONFIGURE_PROPERTIES};-prefix;${${PROJECT}_INSTALL_PREFIX};${CONFIGURATION_OPTIONS};" ) ExternalProject_Add(${PROJECT} DEPENDS ${DEPENDENCIES} @@ -162,11 +183,11 @@ macro(add_qt_external_tgz_project PROJECT PATH REPOSITORY_URL DEPENDENCIES INIT_ CONFIGURE_COMMAND ${SET_ENV} /${CONFIGURE_CMD} BUILD_COMMAND ${SET_ENV} $(MAKE) ) - + add_deployment_steps(${PROJECT} "$(MAKE);install;INSTALL_ROOT=${DEPLOYMENT_PATH}") - + write_variables_file() - + endif() endmacro() @@ -180,13 +201,13 @@ macro(add_qt_external_git_project PROJECT REPOSITORY_URL DEPENDENCIES INIT_REPOS if(NOT ${PROJECT}_DEFINED) # We build Qt ourselves => point to that Qt to build other packages - set(QT_PATH ${${PROJECT}_INSTALL_PREFIX}) + set_qt_location(${${PROJECT}_INSTALL_PREFIX}) set_package_defined_with_git_repository(${PROJECT}) add_dependencies_target(${PROJECT} "${DEPENDENCIES}") - set(CONFIGURE_CMD configure "${QT_STANDARD_CONFIGURE_PROPERTIES};${CONFIGURATION_OPTIONS}" ) + set(CONFIGURE_CMD configure "${QT_STANDARD_CONFIGURE_PROPERTIES};-prefix;${${PROJECT}_INSTALL_PREFIX};${CONFIGURATION_OPTIONS}" ) ExternalProject_Add(${PROJECT} DEPENDS ${DEPENDENCIES} diff --git a/examples/BuildIVIPackages/CMakeLists.txt b/examples/BuildIVIPackages/CMakeLists.txt index 9581c61..c560929 100644 --- a/examples/BuildIVIPackages/CMakeLists.txt +++ b/examples/BuildIVIPackages/CMakeLists.txt @@ -21,9 +21,10 @@ cmake_minimum_required(VERSION 2.6) -PROJECT(BuildIVIPackages) +project(BuildIVIPackages) -find_package(Multimake REQUIRED) +find_package(Multimake REQUIRED HINTS ${CMAKE_CURRENT_SOURCE_DIR}/../..) -find_layer(Ubuntu REQUIRED) -find_layer(IVI REQUIRED) +add_cmake_external_git_project(dlt "https://github.com/Pelagicore/dlt.git" "" "-DWITH_DLT_DBUS=OFF") +add_cmake_external_git_project(ivi-logging "https://github.com/Pelagicore/ivi-logging.git" "dlt" "-DENABLE_DLT_BACKEND=ON") +add_cmake_external_git_project(ivi-main-loop "https://github.com/Pelagicore/MainLoop.git" "" "") diff --git a/examples/Qt/FromGit/CMakeLists.txt b/examples/Qt/FromGit/CMakeLists.txt new file mode 100644 index 0000000..87766a1 --- /dev/null +++ b/examples/Qt/FromGit/CMakeLists.txt @@ -0,0 +1,15 @@ +cmake_minimum_required(VERSION 2.6) + +project(BuildQtPackages) + +find_package(Multimake REQUIRED HINTS ${CMAKE_CURRENT_SOURCE_DIR}/../../..) + +set(qt_GIT_COMMIT v5.9.1) +set(QT_MODULES_LIST "--module-subset=qtbase,qtdeclarative,qtmultimedia,qtgraphicaleffects,qtquickcontrols,qttools,qtimageformats,qtserialport") +add_qt_external_git_project(qt "https://code.qt.io/qt/qt5.git" "" "${QT_MODULES_LIST}" "-verbose") + +set(gammaray_GIT_COMMIT 79aff446d0274563b56569c76a57dfd940edcc9e) +add_cmake_external_git_project(gammaray "https://github.com/KDAB/GammaRay.git" "qt" "" "") + +set(appman_GIT_COMMIT 5.9) +#add_qmake_external_git_project(appman "https://code.qt.io/qt/qtapplicationmanager.git" "qt" "" "") diff --git a/examples/Qt/FromRelease/CMakeLists.txt b/examples/Qt/FromRelease/CMakeLists.txt new file mode 100644 index 0000000..91fe7f8 --- /dev/null +++ b/examples/Qt/FromRelease/CMakeLists.txt @@ -0,0 +1,15 @@ +cmake_minimum_required(VERSION 2.6) + +project(BuildQtPackages) + +find_package(Multimake REQUIRED HINTS ${CMAKE_CURRENT_SOURCE_DIR}/../../..) + +set(qt_GIT_COMMIT v5.9.1) +set(QT_MODULES_LIST "--module-subset=qtbase,qtdeclarative,qtmultimedia,qtgraphicaleffects,qtquickcontrols,qttools,qtimageformats,qtserialport") +add_qt_external_tgz_project(qt qt "https://download.qt.io/archive/qt/5.9/5.9.1/single/qt-everywhere-opensource-src-5.9.1.tar.xz" "" "${QT_MODULES_LIST}" "-verbose") + +set(gammaray_GIT_COMMIT 79aff446d0274563b56569c76a57dfd940edcc9e) +add_cmake_external_git_project(gammaray "https://github.com/KDAB/GammaRay.git" "qt" "" "") + +set(appman_GIT_COMMIT 5.9) +#add_qmake_external_git_project(appman "https://code.qt.io/qt/qtapplicationmanager.git" "qt" "" "") diff --git a/examples/Qt/NoQt/CMakeLists.txt b/examples/Qt/NoQt/CMakeLists.txt new file mode 100644 index 0000000..35dda1d --- /dev/null +++ b/examples/Qt/NoQt/CMakeLists.txt @@ -0,0 +1,13 @@ +cmake_minimum_required(VERSION 2.6) + +project(BuildQtPackages) + +find_package(Multimake REQUIRED HINTS ${CMAKE_CURRENT_SOURCE_DIR}/../../..) + +multimake_find_qt(qt) + +set(gammaray_GIT_COMMIT 79aff446d0274563b56569c76a57dfd940edcc9e) +add_cmake_external_git_project(gammaray "https://github.com/KDAB/GammaRay.git" "qt" "" "") + +set(appman_GIT_COMMIT 5.9) +add_qmake_external_git_project(appman "https://code.qt.io/qt/qtapplicationmanager.git" "qt" "" "")