From 2ee33cef9f1bbe53b2a8ed1f4bc8aa7f7c224463 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Wed, 17 Dec 2014 10:21:27 -0800 Subject: [PATCH 1/3] have targets bubble up their Qt modules --- cmake/macros/LinkHifiLibraries.cmake | 4 ++++ cmake/macros/LinkSharedDependencies.cmake | 15 +++++++++++++++ cmake/macros/SetupHifiLibrary.cmake | 13 ++----------- cmake/macros/SetupHifiProject.cmake | 15 ++------------- 4 files changed, 23 insertions(+), 24 deletions(-) diff --git a/cmake/macros/LinkHifiLibraries.cmake b/cmake/macros/LinkHifiLibraries.cmake index a46023fe9a..464af76553 100644 --- a/cmake/macros/LinkHifiLibraries.cmake +++ b/cmake/macros/LinkHifiLibraries.cmake @@ -33,6 +33,10 @@ macro(LINK_HIFI_LIBRARIES) get_target_property(LINKED_TARGET_DEPENDENCY_INCLUDES ${HIFI_LIBRARY} DEPENDENCY_INCLUDES) list(APPEND ${TARGET_NAME}_DEPENDENCY_INCLUDES ${LINKED_TARGET_DEPENDENCY_INCLUDES}) + # ask the library what its qt module dependencies are and link them + get_target_property(LINKED_TARGET_DEPENDENCY_QT_MODULES ${HIFI_LIBRARY} DEPENDENCY_QT_MODULES) + list(APPEND ${TARGET_NAME}_DEPENDENCY_QT_MODULES ${LINKED_TARGET_DEPENDENCY_QT_MODULES}) + endforeach() endmacro(LINK_HIFI_LIBRARIES) \ No newline at end of file diff --git a/cmake/macros/LinkSharedDependencies.cmake b/cmake/macros/LinkSharedDependencies.cmake index afd25db0d7..890736d806 100644 --- a/cmake/macros/LinkSharedDependencies.cmake +++ b/cmake/macros/LinkSharedDependencies.cmake @@ -24,10 +24,25 @@ macro(LINK_SHARED_DEPENDENCIES) include_directories(SYSTEM ${${TARGET_NAME}_DEPENDENCY_INCLUDES}) endif () + if (${TARGET_NAME}_DEPENDENCY_QT_MODULES) + list(REMOVE_DUPLICATES ${TARGET_NAME}_DEPENDENCY_QT_MODULES) + + message(${TARGET_NAME}) + message(${${TARGET_NAME}_DEPENDENCY_QT_MODULES}) + + # find these Qt modules and link them to our own target + find_package(Qt5 COMPONENTS ${${TARGET_NAME}_DEPENDENCY_QT_MODULES} REQUIRED) + + foreach(QT_MODULE ${QT_MODULES_TO_LINK}) + target_link_libraries(${TARGET_NAME} Qt5::${QT_MODULE}) + endforeach() + endif () + # we've already linked our Qt modules, but we need to bubble them up to parents list(APPEND ${TARGET_NAME}_LIBRARIES_TO_LINK "${${TARGET_NAME}_QT_MODULES_TO_LINK}") # set the property on this target so it can be retreived by targets linking to us set_target_properties(${TARGET_NAME} PROPERTIES DEPENDENCY_LIBRARIES "${${TARGET_NAME}_LIBRARIES_TO_LINK}") set_target_properties(${TARGET_NAME} PROPERTIES DEPENDENCY_INCLUDES "${${TARGET_NAME}_DEPENDENCY_INCLUDES}") + set_target_properties(${TARGET_NAME} PROPERTIES DEPENDENCY_QT_MODULES "${${TARGET_NAME}_DEPENDENCY_QT_MODULES}") endmacro(LINK_SHARED_DEPENDENCIES) \ No newline at end of file diff --git a/cmake/macros/SetupHifiLibrary.cmake b/cmake/macros/SetupHifiLibrary.cmake index 950286ce45..de9f9b9d1e 100644 --- a/cmake/macros/SetupHifiLibrary.cmake +++ b/cmake/macros/SetupHifiLibrary.cmake @@ -18,16 +18,7 @@ macro(SETUP_HIFI_LIBRARY) # create a library and set the property so it can be referenced later add_library(${TARGET_NAME} ${LIB_SRCS} ${AUTOMTC_SRC}) - set(QT_MODULES_TO_LINK ${ARGN}) - list(APPEND QT_MODULES_TO_LINK Core) + set(${TARGET_NAME}_DEPENDENCY_QT_MODULES ${ARGN}) + list(APPEND ${TARGET_NAME}_DEPENDENCY_QT_MODULES Core) - find_package(Qt5 COMPONENTS ${QT_MODULES_TO_LINK} REQUIRED) - - foreach(QT_MODULE ${QT_MODULES_TO_LINK}) - get_target_property(QT_LIBRARY_LOCATION Qt5::${QT_MODULE} LOCATION) - - # add the actual path to the Qt module to our LIBRARIES_TO_LINK variable - target_link_libraries(${TARGET_NAME} Qt5::${QT_MODULE}) - list(APPEND ${TARGET_NAME}_QT_MODULES_TO_LINK ${QT_LIBRARY_LOCATION}) - endforeach() endmacro(SETUP_HIFI_LIBRARY) \ No newline at end of file diff --git a/cmake/macros/SetupHifiProject.cmake b/cmake/macros/SetupHifiProject.cmake index d21e2c11bb..157c22ea79 100644 --- a/cmake/macros/SetupHifiProject.cmake +++ b/cmake/macros/SetupHifiProject.cmake @@ -25,17 +25,6 @@ macro(SETUP_HIFI_PROJECT) # add the executable, include additional optional sources add_executable(${TARGET_NAME} ${TARGET_SRCS} "${AUTOMTC_SRC}") - set(QT_MODULES_TO_LINK ${ARGN}) - list(APPEND QT_MODULES_TO_LINK Core) - - find_package(Qt5 COMPONENTS ${QT_MODULES_TO_LINK} REQUIRED) - - foreach(QT_MODULE ${QT_MODULES_TO_LINK}) - target_link_libraries(${TARGET_NAME} Qt5::${QT_MODULE}) - - # add the actual path to the Qt module to our LIBRARIES_TO_LINK variable - get_target_property(QT_LIBRARY_LOCATION Qt5::${QT_MODULE} LOCATION) - list(APPEND ${TARGET_NAME}_QT_MODULES_TO_LINK ${QT_LIBRARY_LOCATION}) - endforeach() - + set(${TARGET_NAME}_DEPENDENCY_QT_MODULES ${ARGN}) + list(APPEND ${TARGET_NAME}_DEPENDENCY_QT_MODULES Core) endmacro() \ No newline at end of file From 421680696756cf75bed30742d9514cdd3e13443c Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Wed, 17 Dec 2014 10:21:53 -0800 Subject: [PATCH 2/3] remove extra debugging in LinkSharedDependencies --- cmake/macros/LinkSharedDependencies.cmake | 3 --- 1 file changed, 3 deletions(-) diff --git a/cmake/macros/LinkSharedDependencies.cmake b/cmake/macros/LinkSharedDependencies.cmake index 890736d806..c5049cf842 100644 --- a/cmake/macros/LinkSharedDependencies.cmake +++ b/cmake/macros/LinkSharedDependencies.cmake @@ -27,9 +27,6 @@ macro(LINK_SHARED_DEPENDENCIES) if (${TARGET_NAME}_DEPENDENCY_QT_MODULES) list(REMOVE_DUPLICATES ${TARGET_NAME}_DEPENDENCY_QT_MODULES) - message(${TARGET_NAME}) - message(${${TARGET_NAME}_DEPENDENCY_QT_MODULES}) - # find these Qt modules and link them to our own target find_package(Qt5 COMPONENTS ${${TARGET_NAME}_DEPENDENCY_QT_MODULES} REQUIRED) From 33d50c6eb62beab46a52da27f1b3e4b2a8f15766 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Wed, 17 Dec 2014 10:26:51 -0800 Subject: [PATCH 3/3] fix dependency qt module linking in LinkSharedDependencies --- cmake/macros/LinkSharedDependencies.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/macros/LinkSharedDependencies.cmake b/cmake/macros/LinkSharedDependencies.cmake index c5049cf842..fd5461c288 100644 --- a/cmake/macros/LinkSharedDependencies.cmake +++ b/cmake/macros/LinkSharedDependencies.cmake @@ -30,7 +30,7 @@ macro(LINK_SHARED_DEPENDENCIES) # find these Qt modules and link them to our own target find_package(Qt5 COMPONENTS ${${TARGET_NAME}_DEPENDENCY_QT_MODULES} REQUIRED) - foreach(QT_MODULE ${QT_MODULES_TO_LINK}) + foreach(QT_MODULE ${${TARGET_NAME}_DEPENDENCY_QT_MODULES}) target_link_libraries(${TARGET_NAME} Qt5::${QT_MODULE}) endforeach() endif ()