Skip to content
This repository was archived by the owner on Feb 10, 2022. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 1 addition & 3 deletions MultimakeCMake.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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})
Expand Down
63 changes: 37 additions & 26 deletions MultimakeConfig.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand All @@ -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)

Expand All @@ -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 $<TARGET_PROPERTY:up_to_date_check_package_list,CONTENT>)
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 $<TARGET_PROPERTY:up_to_date_check_package_list,CONTENT>)
include(${UP_TO_DATE_CHECK_PATH}/Check_\${PACKAGE_NAME}.cmake)
endforeach()
")

macro(init_repository PROJECT)

Expand Down Expand Up @@ -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()
Expand Down Expand Up @@ -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()

Expand Down
85 changes: 53 additions & 32 deletions MultimakeQt.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
#
# For further information see LICENSE


set(QT_STANDARD_CONFIGURE_PROPERTIES "-opensource;-confirm-license")

if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
Expand All @@ -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)

Expand All @@ -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}
Expand Down Expand Up @@ -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}
Expand Down Expand Up @@ -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}
Expand All @@ -162,11 +183,11 @@ macro(add_qt_external_tgz_project PROJECT PATH REPOSITORY_URL DEPENDENCIES INIT_
CONFIGURE_COMMAND ${SET_ENV} <SOURCE_DIR>/${CONFIGURE_CMD}
BUILD_COMMAND ${SET_ENV} $(MAKE)
)

add_deployment_steps(${PROJECT} "$(MAKE);install;INSTALL_ROOT=${DEPLOYMENT_PATH}")

write_variables_file()

endif()

endmacro()
Expand All @@ -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}
Expand Down
9 changes: 5 additions & 4 deletions examples/BuildIVIPackages/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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" "" "")
15 changes: 15 additions & 0 deletions examples/Qt/FromGit/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -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" "" "")
15 changes: 15 additions & 0 deletions examples/Qt/FromRelease/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -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" "" "")
13 changes: 13 additions & 0 deletions examples/Qt/NoQt/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -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" "" "")