aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@qt.io>2020-10-06 15:46:55 +0200
committerEike Ziller <eike.ziller@qt.io>2020-10-08 10:35:34 +0000
commit0b74ad4f60c25a8293ad6a72bc5012464d0ed528 (patch)
treed190fa3acb444146f3657df6323ae5d4f1ddc60d
parent759ec8419abab4433bf0d85c2414708fd664db82 (diff)
cmake: Make build output & install locations configurable
So we can configure the right paths for direct inclusion in the Qt Creator build. Change-Id: Ie83eb402f0d9ce5f1ef32737921dc2ec8b43a315 Reviewed-by: Ivan Komissarov <ABBAPOH@gmail.com>
-rw-r--r--cmake/QbsAPI.cmake66
-rw-r--r--share/CMakeLists.txt37
-rw-r--r--src/libexec/qbs_processlauncher/CMakeLists.txt2
3 files changed, 56 insertions, 49 deletions
diff --git a/cmake/QbsAPI.cmake b/cmake/QbsAPI.cmake
index 9303c9c9f..26e658374 100644
--- a/cmake/QbsAPI.cmake
+++ b/cmake/QbsAPI.cmake
@@ -1,11 +1,34 @@
-set(QBS_APP_INSTALL_DIR "bin")
+# default paths
set(QBS_LIBDIR_NAME "lib")
+if(WIN32)
+ set(_DEFAULT_LIB_INSTALL_DIR ${QBS_APP_INSTALL_DIR})
+ set(_DEFAULT_LIBEXEC_INSTALL_DIR ${QBS_APP_INSTALL_DIR})
+else()
+ set(_DEFAULT_LIB_INSTALL_DIR ${QBS_LIBDIR_NAME})
+ set(_DEFAULT_LIBEXEC_INSTALL_DIR "libexec/qbs")
+endif()
+# path options
+set(QBS_OUTPUT_PREFIX "" CACHE STRING "Qbs build output location relative to CMAKE_BINARY_DIR.")
+set(QBS_APP_INSTALL_DIR "bin" CACHE STRING "Relative install location for Qbs binaries.")
+set(QBS_LIB_INSTALL_DIR "${_DEFAULT_LIB_INSTALL_DIR}" CACHE STRING "Relative install location for Qbs libraries.")
+set(QBS_LIBEXEC_INSTALL_DIR "${_DEFAULT_LIBEXEC_INSTALL_DIR}" CACHE STRING "Relative install location for Qbs libexec.")
+set(QBS_PLUGINS_INSTALL_BASE "${QBS_LIBDIR_NAME}" CACHE STRING "Relative install location for Qbs plugins.")
+set(QBS_RESOURCES_INSTALL_BASE "." CACHE STRING "Relative install location for Qbs resources.")
+set(QBS_HEADERS_INSTALL_DIR "include/qbs" CACHE STRING "Relative install location for Qbs headers.")
+
+set(QBS_PLUGINS_INSTALL_DIR "${QBS_PLUGINS_INSTALL_BASE}/qbs/plugins")
+set(QBS_RESOURCES_INSTALL_DIR "${QBS_RESOURCES_INSTALL_BASE}/share")
+
+# rpaths
+file(RELATIVE_PATH QBS_RELATIVE_LIBEXEC_RPATH "/${QBS_LIBEXEC_INSTALL_DIR}" "/${QBS_LIB_INSTALL_DIR}")
+file(RELATIVE_PATH QBS_RELATIVE_APP_RPATH "/${QBS_APP_INSTALL_DIR}" "/${QBS_LIB_INSTALL_DIR}")
+file(RELATIVE_PATH QBS_RELATIVE_PLUGINS_RPATH "/${QBS_PLUGINS_INSTALL_DIR}" "/${QBS_LIB_INSTALL_DIR}")
if(APPLE)
set(QBS_LIB_RPATH "@loader_path")
- set(QBS_LIBEXEC_RPATH "@loader_path/../../${QBS_LIBDIR_NAME}")
- set(QBS_APP_RPATH "@loader_path/../${QBS_LIBDIR_NAME}")
- set(QBS_PLUGINS_RPATH "@loader_path/../../../${QBS_LIBDIR_NAME}")
+ set(QBS_LIBEXEC_RPATH "@loader_path/${QBS_RELATIVE_LIBEXEC_RPATH}")
+ set(QBS_APP_RPATH "@loader_path/${QBS_RELATIVE_APP_RPATH}")
+ set(QBS_PLUGINS_RPATH "@loader_path/${QBS_RELATIVE_PLUGINS_RPATH}")
elseif(WIN32)
set(QBS_LIB_RPATH "")
set(QBS_LIBEXEC_RPATH "")
@@ -13,17 +36,9 @@ elseif(WIN32)
set(QBS_PLUGINS_RPATH "")
else()
set(QBS_LIB_RPATH "\$ORIGIN")
- set(QBS_LIBEXEC_RPATH "\$ORIGIN/../../${QBS_LIBDIR_NAME}")
- set(QBS_APP_RPATH "\$ORIGIN/../${QBS_LIBDIR_NAME}")
- set(QBS_PLUGINS_RPATH "\$ORIGIN/../../../${QBS_LIBDIR_NAME}")
-endif()
-
-if(WIN32)
- set(QBS_LIB_INSTALL_DIR ${QBS_APP_INSTALL_DIR})
- set(QBS_LIBEXEC_PATH ${QBS_APP_INSTALL_DIR})
-else()
- set(QBS_LIB_INSTALL_DIR ${QBS_LIBDIR_NAME})
- set(QBS_LIBEXEC_PATH "libexec/qbs")
+ set(QBS_LIBEXEC_RPATH "\$ORIGIN/${QBS_RELATIVE_LIBEXEC_RPATH}")
+ set(QBS_APP_RPATH "\$ORIGIN/${QBS_RELATIVE_APP_RPATH}")
+ set(QBS_PLUGINS_RPATH "\$ORIGIN/${QBS_RELATIVE_PLUGINS_RPATH}")
endif()
if(WITH_UNIT_TESTS)
@@ -38,12 +53,9 @@ else()
set(QBS_PROJECT_FILE_UPDATES_DEFINES "")
endif()
-set(QBS_PLUGINS_INSTALL_DIR "${QBS_LIBDIR_NAME}/qbs/plugins")
-set(QBS_RELATIVE_LIBEXEC_PATH "../${QBS_LIBEXEC_PATH}")
-set(QBS_RELATIVE_SEARCH_PATH "..")
-set(QBS_RELATIVE_PLUGINS_PATH "../${QBS_LIBDIR_NAME}")
-set(QBS_RESOURCES_INSTALL_DIR "")
-set(QBS_HEADERS_INSTALL_DIR "include/qbs")
+file(RELATIVE_PATH QBS_RELATIVE_LIBEXEC_PATH "/${QBS_APP_INSTALL_DIR}" "/${QBS_LIBEXEC_INSTALL_DIR}")
+file(RELATIVE_PATH QBS_RELATIVE_SEARCH_PATH "/${QBS_APP_INSTALL_DIR}" "/${QBS_RESOURCES_INSTALL_BASE}")
+file(RELATIVE_PATH QBS_RELATIVE_PLUGINS_PATH "/${QBS_APP_INSTALL_DIR}" "/${QBS_PLUGINS_INSTALL_BASE}")
set(DEFAULT_DEFINES "")
if(WIN32)
@@ -84,7 +96,7 @@ function(add_qbs_app target_name)
target_link_libraries(${target_name} PRIVATE ${_arg_DEPENDS} PUBLIC ${_arg_PUBLIC_DEPENDS})
set_target_properties(${target_name} PROPERTIES
- RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${_DESTINATION}
+ RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${QBS_OUTPUT_PREFIX}${_DESTINATION}
BUILD_RPATH "${QBS_APP_RPATH}"
INSTALL_RPATH "${QBS_APP_RPATH}"
)
@@ -123,8 +135,8 @@ function(add_qbs_library target_name)
target_link_libraries(${target_name} PRIVATE ${_arg_DEPENDS} PUBLIC ${_arg_PUBLIC_DEPENDS})
set_target_properties(${target_name} PROPERTIES
- LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${QBS_LIB_INSTALL_DIR}
- RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${QBS_LIB_INSTALL_DIR}
+ LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${QBS_OUTPUT_PREFIX}${QBS_LIB_INSTALL_DIR}
+ RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${QBS_OUTPUT_PREFIX}${QBS_LIB_INSTALL_DIR}
BUILD_RPATH "${QBS_LIB_RPATH}"
INSTALL_RPATH "${QBS_LIB_RPATH}"
SOVERSION ${_SOVERSION}
@@ -155,8 +167,8 @@ function(add_qbs_plugin target_name)
target_link_libraries(${target_name} PRIVATE ${_arg_DEPENDS} PUBLIC ${_arg_PUBLIC_DEPENDS})
set_target_properties(${target_name} PROPERTIES
- LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${QBS_PLUGINS_INSTALL_DIR}
- RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${QBS_PLUGINS_INSTALL_DIR}
+ LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${QBS_OUTPUT_PREFIX}${QBS_PLUGINS_INSTALL_DIR}
+ RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${QBS_OUTPUT_PREFIX}${QBS_PLUGINS_INSTALL_DIR}
BUILD_RPATH "${QBS_PLUGINS_RPATH}"
INSTALL_RPATH "${QBS_PLUGINS_RPATH}"
)
@@ -199,7 +211,7 @@ function(add_qbs_test test_name)
)
set_target_properties(${target_name} PROPERTIES
- RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${QBS_APP_INSTALL_DIR}
+ RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${QBS_OUTPUT_PREFIX}${QBS_APP_INSTALL_DIR}
BUILD_RPATH "${QBS_APP_RPATH}"
INSTALL_RPATH "${QBS_APP_RPATH}"
)
diff --git a/share/CMakeLists.txt b/share/CMakeLists.txt
index fca6c5147..8f53804fd 100644
--- a/share/CMakeLists.txt
+++ b/share/CMakeLists.txt
@@ -1,9 +1,3 @@
-if(QBS_RESOURCES_INSTALL_DIR)
- set(QBS_SHARE_DIR "${QBS_RESOURCES_INSTALL_DIR}/share")
-else()
- set(QBS_SHARE_DIR "share")
-endif()
-
if(WIN32)
install(
FILES ../bin/ibmsvc.xml ../bin/ibqbs.bat
@@ -12,30 +6,30 @@ if(WIN32)
endif()
install(
PROGRAMS ../src/3rdparty/python/bin/dmgbuild
- DESTINATION "${QBS_LIBEXEC_PATH}"
+ DESTINATION "${QBS_LIBEXEC_INSTALL_DIR}"
)
add_custom_target(copy-runtime-files-dmgbuild ALL
COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_CURRENT_SOURCE_DIR}/../src/3rdparty/python/bin/dmgbuild
- ${CMAKE_BINARY_DIR}/${QBS_LIBEXEC_PATH}
+ ${CMAKE_BINARY_DIR}/${QBS_OUTPUT_PREFIX}${QBS_LIBEXEC_INSTALL_DIR}
)
install(
# trailing slash avoid copying the 'site-packages' dir and only copies its content
DIRECTORY ../src/3rdparty/python/lib/python2.7/site-packages/
- DESTINATION "${QBS_SHARE_DIR}/qbs/python"
+ DESTINATION "${QBS_RESOURCES_INSTALL_DIR}/qbs/python"
FILES_MATCHING PATTERN "*.py"
)
install(
DIRECTORY qbs
- DESTINATION "${QBS_SHARE_DIR}")
+ DESTINATION "${QBS_RESOURCES_INSTALL_DIR}")
add_custom_target(copy-runtime-files-qbs ALL
COMMAND ${CMAKE_COMMAND} -E copy_directory
${CMAKE_CURRENT_SOURCE_DIR}/qbs
- ${CMAKE_BINARY_DIR}/share/qbs
+ ${CMAKE_BINARY_DIR}/${QBS_OUTPUT_PREFIX}${QBS_RESOURCES_INSTALL_DIR}/qbs
)
install(
DIRECTORY ../examples
- DESTINATION "${QBS_SHARE_DIR}/qbs"
+ DESTINATION "${QBS_RESOURCES_INSTALL_DIR}/qbs"
)
if(WIN32)
@@ -44,28 +38,29 @@ else()
set(UPDATE_PATH_COMMAND "")
endif()
+get_target_property(_QBS_OUTPUT_DIR qbs RUNTIME_OUTPUT_DIRECTORY)
add_custom_target(
BuildQbsResources ALL
COMMAND ${UPDATE_PATH_COMMAND}
- COMMAND ${CMAKE_BINARY_DIR}/${QBS_APP_INSTALL_DIR}/qbs
+ COMMAND ${_QBS_OUTPUT_DIR}/qbs
build
- --settings-dir ${CMAKE_BINARY_DIR}/settings
- -f ${CMAKE_SOURCE_DIR}/qbs.qbs
- -d ${CMAKE_BINARY_DIR}/
+ --settings-dir ${PROJECT_BINARY_DIR}/settings
+ -f ${PROJECT_SOURCE_DIR}/qbs.qbs
+ -d ${PROJECT_BINARY_DIR}/
-p "qbs resources"
qbs.installPrefix:undefined
project.withCode:false
project.withDocumentation:false
profile:none
- DEPENDS qbs
+ DEPENDS qbs copy-runtime-files-qbs
)
install(
- DIRECTORY ${CMAKE_BINARY_DIR}/default/install-root/share/qbs/qml-type-descriptions
- DESTINATION "${QBS_SHARE_DIR}/qbs"
+ DIRECTORY ${PROJECT_BINARY_DIR}/default/install-root/share/qbs/qml-type-descriptions
+ DESTINATION "${QBS_RESOURCES_INSTALL_DIR}/qbs"
)
install(
- DIRECTORY ${CMAKE_BINARY_DIR}/default/install-root/share/qbs/qml-type-descriptions
- DESTINATION "${QBS_SHARE_DIR}/qbs"
+ DIRECTORY ${PROJECT_BINARY_DIR}/default/install-root/share/qbs/qml-type-descriptions
+ DESTINATION "${QBS_RESOURCES_INSTALL_DIR}/qbs"
)
diff --git a/src/libexec/qbs_processlauncher/CMakeLists.txt b/src/libexec/qbs_processlauncher/CMakeLists.txt
index f9a8c1b4c..73aca9f07 100644
--- a/src/libexec/qbs_processlauncher/CMakeLists.txt
+++ b/src/libexec/qbs_processlauncher/CMakeLists.txt
@@ -14,7 +14,7 @@ set(PROTOCOL_SOURCES
list_transform_prepend(PROTOCOL_SOURCES ${PATH_TO_PROTOCOL_SOURCES}/)
add_qbs_app(qbs_processlauncher
- DESTINATION ${QBS_LIBEXEC_PATH}
+ DESTINATION ${QBS_LIBEXEC_INSTALL_DIR}
DEPENDS Qt5::Core Qt5::Network
INCLUDES ${PATH_TO_PROTOCOL_SOURCES}
SOURCES ${SOURCES} ${PROTOCOL_SOURCES}