diff --git a/CMakeLists.txt b/CMakeLists.txt index cd6cd57b..b971c6aa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -62,9 +62,18 @@ macro(qsk_setup_build) endmacro() macro(qsk_setup_install) + + # package vars + set(PACKAGE_NAME ${PROJECT_NAME}) + set(PACKAGE_VERSION ${CMAKE_PROJECT_VERSION}) + set(PACKAGE_NAMESPACE ${PROJECT_NAME}::) + set(PACKAGE_LOCATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}) + + # install paths for headers and libraries string(TOLOWER "${PROJECT_NAME}" PACKAGE_DIR) - set(QSK_INSTALL_HEADERS "${CMAKE_INSTALL_INCLUDEDIR}/${PACKAGE_DIR}") - set(QSK_INSTALL_LIBS "${CMAKE_INSTALL_LIBDIR}/${PACKAGE_DIR}") + set(QSK_INSTALL_HEADERS ${CMAKE_INSTALL_INCLUDEDIR}/${PACKAGE_DIR}) + set(QSK_INSTALL_LIBS ${CMAKE_INSTALL_LIBDIR}/${PACKAGE_DIR}) + endmacro() ############################################################################ @@ -97,6 +106,32 @@ qsk_setup_install() add_subdirectory(src) add_subdirectory(skins) +include(CMakePackageConfigHelpers) + +# write QSkinnyConfigVersion.cmake file for cmake import +write_basic_package_version_file( + ${CMAKE_BINARY_DIR}/_QSkinny/${PACKAGE_NAME}ConfigVersion.cmake + VERSION ${PACKAGE_VERSION} + COMPATIBILITY AnyNewerVersion) + +# Copy QSkinnyConfig.cmake to build dir +configure_file(${QSK_CMAKE_DIR}/${PACKAGE_NAME}Config.cmake + ${CMAKE_BINARY_DIR}/_QSkinny/${PACKAGE_NAME}Config.cmake + COPYONLY) + +# install QSkinnyConfig.cmake and QSkinnyConfigVersion.cmake +# and QskTools.cmake file to lib/cmake/QSkinny directory +install( + FILES + ${CMAKE_BINARY_DIR}/_QSkinny/${PACKAGE_NAME}Config.cmake + ${CMAKE_BINARY_DIR}/_QSkinny/${PACKAGE_NAME}ConfigVersion.cmake + ${QSK_CMAKE_DIR}/QskTools.cmake + DESTINATION + ${PACKAGE_LOCATION} + COMPONENT + Devel) + +# Build other libraries if(BUILD_QML_EXPORT) add_subdirectory(qmlexport) endif() diff --git a/cmake/QSkinnyConfig.cmake b/cmake/QSkinnyConfig.cmake index e24cd20c..fbffae9e 100644 --- a/cmake/QSkinnyConfig.cmake +++ b/cmake/QSkinnyConfig.cmake @@ -1,2 +1 @@ include("${CMAKE_CURRENT_LIST_DIR}/QSkinnyTargets.cmake") -include("${CMAKE_CURRENT_LIST_DIR}/QskTools.cmake") \ No newline at end of file diff --git a/cmake/QskBuildFunctions.cmake b/cmake/QskBuildFunctions.cmake index 748d849b..a35151bc 100644 --- a/cmake/QskBuildFunctions.cmake +++ b/cmake/QskBuildFunctions.cmake @@ -99,3 +99,11 @@ function(qsk_add_example target) target_include_directories(${target} PRIVATE ${CMAKE_CURRENT_LIST_DIR}) endfunction() + +function(qsk_update_package_config_file target) + + file(APPEND + ${CMAKE_BINARY_DIR}/_QSkinny/QSkinnyConfig.cmake + "include(\"\${CMAKE_CURRENT_LIST_DIR}/${target}.cmake\")\n") + +endfunction() diff --git a/qmlexport/CMakeLists.txt b/qmlexport/CMakeLists.txt index d59ad5b4..7f008350 100644 --- a/qmlexport/CMakeLists.txt +++ b/qmlexport/CMakeLists.txt @@ -10,7 +10,8 @@ set(target qskqmlexport) qsk_add_library(${target} SHARED ${SOURCES} ${HEADERS}) target_link_libraries(${target} PRIVATE qskinny) -target_include_directories(${target} PUBLIC ${CMAKE_CURRENT_LIST_DIR}) +target_include_directories(${target} PUBLIC + $) set_target_properties(${target} PROPERTIES PUBLIC_HEADER QskQml.h) if(BUILD_QSKDLL) @@ -20,8 +21,26 @@ if(BUILD_QSKDLL) VERSION ${CMAKE_PROJECT_VERSION} SOVERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR} ) endif() -set_target_properties(${target} PROPERTIES FOLDER libs) +# packaging +set(PACKAGE_NAME QskQmlExport) +set(QSKQE_INSTALL_HEADERS "${CMAKE_INSTALL_INCLUDEDIR}/${target}") -install(TARGETS ${target} - PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/${target}" -) +set_target_properties(${target} PROPERTIES FOLDER libs) +set_target_properties(${target} PROPERTIES EXPORT_NAME ${PACKAGE_NAME}) + +install(TARGETS ${target} EXPORT ${PACKAGE_NAME}Targets + INCLUDES DESTINATION ${QSKQE_INSTALL_HEADERS} + PUBLIC_HEADER DESTINATION ${QSKQE_INSTALL_HEADERS}) + +export(EXPORT ${PACKAGE_NAME}Targets + NAMESPACE ${PACKAGE_NAMESPACE}) + +install(EXPORT ${PACKAGE_NAME}Targets + FILE + ${PACKAGE_NAME}Targets.cmake + NAMESPACE + ${PACKAGE_NAMESPACE} + DESTINATION + ${PACKAGE_LOCATION}) + +qsk_update_package_config_file(${PACKAGE_NAME}Targets) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 23c2d66d..b6fa1092 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -516,17 +516,9 @@ set_target_properties(${target} PROPERTIES VERSION ${CMAKE_PROJECT_VERSION} SOVERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR} ) # packaging -set(PACKAGE_NAME ${PROJECT_NAME}) -set(PACKAGE_VERSION ${CMAKE_PROJECT_VERSION}) -set(PACKAGE_NAMESPACE ${PROJECT_NAME}::) -set(PACKAGE_LOCATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}) - -include(CMakePackageConfigHelpers) -write_basic_package_version_file( - ${CMAKE_CURRENT_BINARY_DIR}/cmake/${PACKAGE_NAME}ConfigVersion.cmake - VERSION ${PACKAGE_VERSION} - COMPATIBILITY AnyNewerVersion) +set(PACKAGE_NAME ${PROJECT_NAME}) +# setup destination file paths for qskinny target install(TARGETS ${target} EXPORT ${PACKAGE_NAME}Targets LIBRARY DESTINATION ${QSK_INSTALL_LIBS} ARCHIVE DESTINATION ${QSK_INSTALL_LIBS} @@ -534,13 +526,11 @@ install(TARGETS ${target} EXPORT ${PACKAGE_NAME}Targets INCLUDES DESTINATION ${QSK_INSTALL_HEADERS} PUBLIC_HEADER DESTINATION ${QSK_INSTALL_HEADERS}) +# export QSkinnyTargets namespace export(EXPORT ${PACKAGE_NAME}Targets NAMESPACE ${PACKAGE_NAMESPACE}) -configure_file(${QSK_CMAKE_DIR}/${PACKAGE_NAME}Config.cmake - ${CMAKE_CURRENT_BINARY_DIR}/cmake/${PACKAGE_NAME}Config.cmake - COPYONLY) - +# install QSkinnyTargets under QSkinny namespace install(EXPORT ${PACKAGE_NAME}Targets FILE ${PACKAGE_NAME}Targets.cmake @@ -548,13 +538,3 @@ install(EXPORT ${PACKAGE_NAME}Targets ${PACKAGE_NAMESPACE} DESTINATION ${PACKAGE_LOCATION}) - -install( - FILES - ${CMAKE_CURRENT_BINARY_DIR}/cmake/${PACKAGE_NAME}Config.cmake - ${CMAKE_CURRENT_BINARY_DIR}/cmake/${PACKAGE_NAME}ConfigVersion.cmake - ${QSK_CMAKE_DIR}/QskTools.cmake - DESTINATION - ${PACKAGE_LOCATION} - COMPONENT - Devel) diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt index 74da26cc..74d10d19 100644 --- a/tools/CMakeLists.txt +++ b/tools/CMakeLists.txt @@ -1,3 +1,4 @@ if(TARGET Qt::Svg) add_subdirectory(svg2qvg) -endif() \ No newline at end of file + qsk_update_package_config_file(QskTools) +endif()