diff options
author | Eike Ziller <eike.ziller@qt.io> | 2020-10-06 15:46:55 +0200 |
---|---|---|
committer | Eike Ziller <eike.ziller@qt.io> | 2020-10-08 10:35:34 +0000 |
commit | 0b74ad4f60c25a8293ad6a72bc5012464d0ed528 (patch) | |
tree | d190fa3acb444146f3657df6323ae5d4f1ddc60d | |
parent | 759ec8419abab4433bf0d85c2414708fd664db82 (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.cmake | 66 | ||||
-rw-r--r-- | share/CMakeLists.txt | 37 | ||||
-rw-r--r-- | src/libexec/qbs_processlauncher/CMakeLists.txt | 2 |
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} |