Skip to content

Commit aabbbde

Browse files
committed
avoid rebuilding qtkeychain on each build
1 parent 5d245c3 commit aabbbde

1 file changed

Lines changed: 61 additions & 46 deletions

File tree

external/qtkeychain/CMakeLists.txt

Lines changed: 61 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -10,61 +10,76 @@ else()
1010
if(WIN32 AND CMAKE_BUILD_TYPE STREQUAL "Debug")
1111
set(QTKEYCHAIN_LIBRARY_NAME "${QTKEYCHAIN_LIBRARY_NAME}d")
1212
endif()
13-
include(ExternalProject)
14-
ExternalProject_Add(qtkeychain_repo
15-
GIT_REPOSITORY "https://github.com/frankosterfeld/qtkeychain.git"
16-
GIT_TAG "7668a63a3669400223c5a563928ae042f499dbf4"
1713

18-
SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/qtkeychain-src"
19-
BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/qtkeychain-build"
20-
21-
INSTALL_COMMAND ${CMAKE_COMMAND} -E copy_if_different <SOURCE_DIR>/qtkeychain/keychain.h <BINARY_DIR>/qtkeychain
22-
CMAKE_ARGS -DBUILD_WITH_QT6:BOOL=ON
23-
-DBUILD_TRANSLATIONS:BOOL=OFF
24-
-DBUILD_TEST_APPLICATION:BOOL=OFF
25-
-DBUILD_SHARED_LIBS:BOOL=ON
26-
-DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
27-
-DCMAKE_OSX_DEPLOYMENT_TARGET:STRING=${CMAKE_OSX_DEPLOYMENT_TARGET}
28-
CMAKE_CACHE_ARGS -DCMAKE_PREFIX_PATH:PATH=${Qt6_DIR}
29-
30-
UPDATE_COMMAND ""
31-
ALWAYS 0
32-
33-
BUILD_BYPRODUCTS "<BINARY_DIR>/bin/${CMAKE_SHARED_LIBRARY_PREFIX}${QTKEYCHAIN_LIBRARY_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}"
34-
"<BINARY_DIR>/lib/${QTKEYCHAIN_LIBRARY_NAME}.lib"
35-
)
36-
ExternalProject_Get_Property(qtkeychain_repo SOURCE_DIR)
37-
ExternalProject_Get_Property(qtkeychain_repo BINARY_DIR)
38-
set(QTKEYCHAIN_SHARED_LIBRARY ${BINARY_DIR}/bin/${CMAKE_SHARED_LIBRARY_PREFIX}${QTKEYCHAIN_LIBRARY_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX})
14+
set(QTKEYCHAIN_SHARED_LIBRARY
15+
"${CMAKE_CURRENT_BINARY_DIR}/qtkeychain-build/bin/${CMAKE_SHARED_LIBRARY_PREFIX}${QTKEYCHAIN_LIBRARY_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}")
3916
if (MSVC)
40-
set(QTKEYCHAIN_LIBRARY ${BINARY_DIR}/lib/${QTKEYCHAIN_LIBRARY_NAME}.lib)
17+
set(QTKEYCHAIN_LIBRARY
18+
"${CMAKE_CURRENT_BINARY_DIR}/qtkeychain-build/lib/${QTKEYCHAIN_LIBRARY_NAME}.lib")
4119
else()
42-
set(QTKEYCHAIN_LIBRARY ${QTKEYCHAIN_SHARED_LIBRARY})
20+
set(QTKEYCHAIN_LIBRARY "${QTKEYCHAIN_SHARED_LIBRARY}")
4321
endif()
4422
set(QTKEYCHAIN_LIBRARIES ${QTKEYCHAIN_LIBRARY})
45-
add_custom_target(qtkeychain)
46-
if(WIN32)
47-
if(MSVC)
48-
get_target_property(QT6_CORE_LOCATION Qt6::Core LOCATION)
49-
get_filename_component(QTKEYCHAIN_WIN_DEPLOY_DEST "${QT6_CORE_LOCATION}" DIRECTORY)
50-
else()
51-
set(QTKEYCHAIN_WIN_DEPLOY_DEST "${CMAKE_BINARY_DIR}/src/bin/")
23+
set(QTKEYCHAIN_INCLUDE_DIR
24+
"${CMAKE_CURRENT_BINARY_DIR}/qtkeychain-build/qtkeychain/" PARENT_SCOPE)
25+
set(QTKEYCHAIN_LIBRARY_DIR
26+
"${CMAKE_CURRENT_BINARY_DIR}/qtkeychain-build/bin/" PARENT_SCOPE)
27+
28+
if(EXISTS "${QTKEYCHAIN_SHARED_LIBRARY}")
29+
message(STATUS "QtKeychain already built: ${QTKEYCHAIN_SHARED_LIBRARY}")
30+
add_custom_target(qtkeychain_repo)
31+
add_custom_target(qtkeychain)
32+
add_dependencies(qtkeychain qtkeychain_repo)
33+
else()
34+
include(ExternalProject)
35+
ExternalProject_Add(qtkeychain_repo
36+
GIT_REPOSITORY "https://github.com/frankosterfeld/qtkeychain.git"
37+
GIT_TAG "7668a63a3669400223c5a563928ae042f499dbf4"
38+
39+
SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/qtkeychain-src"
40+
BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/qtkeychain-build"
41+
42+
INSTALL_COMMAND ${CMAKE_COMMAND} -E copy_if_different <SOURCE_DIR>/qtkeychain/keychain.h <BINARY_DIR>/qtkeychain
43+
CMAKE_ARGS -DBUILD_WITH_QT6:BOOL=ON
44+
-DBUILD_TRANSLATIONS:BOOL=OFF
45+
-DBUILD_TEST_APPLICATION:BOOL=OFF
46+
-DBUILD_SHARED_LIBS:BOOL=ON
47+
-DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
48+
-DCMAKE_OSX_DEPLOYMENT_TARGET:STRING=${CMAKE_OSX_DEPLOYMENT_TARGET}
49+
CMAKE_CACHE_ARGS -DCMAKE_PREFIX_PATH:PATH=${Qt6_DIR}
50+
51+
UPDATE_COMMAND ""
52+
BUILD_ALWAYS 0
53+
54+
BUILD_BYPRODUCTS "${QTKEYCHAIN_SHARED_LIBRARY}"
55+
"${CMAKE_CURRENT_BINARY_DIR}/qtkeychain-build/lib/${QTKEYCHAIN_LIBRARY_NAME}.lib"
56+
)
57+
add_custom_target(qtkeychain)
58+
if(WIN32)
59+
if(MSVC)
60+
get_target_property(QT6_CORE_LOCATION Qt6::Core LOCATION)
61+
get_filename_component(QTKEYCHAIN_WIN_DEPLOY_DEST "${QT6_CORE_LOCATION}" DIRECTORY)
62+
else()
63+
set(QTKEYCHAIN_WIN_DEPLOY_DEST "${CMAKE_BINARY_DIR}/src/bin/")
64+
endif()
65+
add_custom_command(
66+
OUTPUT "${QTKEYCHAIN_WIN_DEPLOY_DEST}"
67+
COMMAND ${CMAKE_COMMAND} -E echo "Copying QtKeychain DLL to runtime output directory"
68+
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${QTKEYCHAIN_SHARED_LIBRARY}" "${QTKEYCHAIN_WIN_DEPLOY_DEST}"
69+
DEPENDS qtkeychain_repo
70+
COMMENT "Windows-only: copying ${QTKEYCHAIN_LIBRARY_NAME} DLL"
71+
)
72+
add_custom_target(qtkeychain_copy DEPENDS "${QTKEYCHAIN_WIN_DEPLOY_DEST}")
73+
add_dependencies(qtkeychain qtkeychain_copy)
5274
endif()
53-
add_custom_command(
54-
OUTPUT "${QTKEYCHAIN_WIN_DEPLOY_DEST}"
55-
COMMAND ${CMAKE_COMMAND} -E echo "Copying QtKeychain DLL to runtime output directory"
56-
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${QTKEYCHAIN_SHARED_LIBRARY}" "${QTKEYCHAIN_WIN_DEPLOY_DEST}"
57-
DEPENDS qtkeychain_repo
58-
COMMENT "Windows-only: copying ${QTKEYCHAIN_LIBRARY_NAME} DLL"
59-
)
60-
add_custom_target(qtkeychain_copy DEPENDS "${QTKEYCHAIN_WIN_DEPLOY_DEST}")
61-
add_dependencies(qtkeychain qtkeychain_copy)
75+
add_dependencies(qtkeychain qtkeychain_repo)
6276
endif()
63-
add_dependencies(qtkeychain qtkeychain_repo)
6477

6578
message(STATUS "QtKeychain library: ${QTKEYCHAIN_LIBRARY}")
6679
set(QTKEYCHAIN_LIBRARIES ${QTKEYCHAIN_LIBRARIES} PARENT_SCOPE)
6780
set(QTKEYCHAIN_LIBRARY ${QTKEYCHAIN_LIBRARY} PARENT_SCOPE)
68-
set(QTKEYCHAIN_INCLUDE_DIR ${BINARY_DIR}/qtkeychain/ PARENT_SCOPE)
69-
set(QTKEYCHAIN_LIBRARY_DIR ${BINARY_DIR}/bin/ PARENT_SCOPE)
81+
set(QTKEYCHAIN_INCLUDE_DIR
82+
"${CMAKE_CURRENT_BINARY_DIR}/qtkeychain-build/qtkeychain/" PARENT_SCOPE)
83+
set(QTKEYCHAIN_LIBRARY_DIR
84+
"${CMAKE_CURRENT_BINARY_DIR}/qtkeychain-build/bin/" PARENT_SCOPE)
7085
endif()

0 commit comments

Comments
 (0)