From 129c8cdbf1128b5523fc1ec76f404018bb974dce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Mon, 29 Feb 2016 22:31:49 +0100 Subject: [PATCH] Modern CMake usage: reworked to use target-specific properties. Please note that this is not exactly backwards compatible, but as most uses of the plugin library are without interacting with CMake, it shouldn't be as painful, hopefully. In any case, recreate the build dir and update your copy of Find*.cmake modules to avoid weird things happening. User-facing changes: * Documentation of Find*.cmake modules converted to reStructuredText to follow official CMake guidelines. * The newfangled way to link the plugins is to use MagnumPlugins::JpegImporter instead of ${MAGNUMPLUGINS_JPEGIMPORTER_LIBRARIES} and ${MAGNUMPLUGINS_JPEGIMPORTER_INCLUDE_DIRS}. * The old ${MAGNUMPLUGINS_*_LIBRARIES} are deprecated and just expand to MagnumPlugins::* target and are exposed only if building with BUILD_DEPRECATED. * The old ${MAGNUMPLUGINS_*_INCLUDE_DIRS} are removed, as the MagnumPlugins::* targets cover that now as well. Internal changes: * Removed global state in favor of target-specific settings. --- .../AnyAudioImporter/AnyImporter.h | 7 ++----- .../AnyAudioImporter/CMakeLists.txt | 16 +++++++------- .../AnyAudioImporter/Test/CMakeLists.txt | 3 +-- .../AnyImageConverter/AnyImageConverter.h | 7 ++----- .../AnyImageConverter/CMakeLists.txt | 14 ++++++++----- .../AnyImageConverter/Test/CMakeLists.txt | 3 +-- .../AnyImageImporter/AnyImageImporter.h | 7 ++----- .../AnyImageImporter/CMakeLists.txt | 21 +++++++++++++------ .../AnyImageImporter/Test/CMakeLists.txt | 5 ++--- .../AnySceneImporter/AnySceneImporter.h | 7 ++----- .../AnySceneImporter/CMakeLists.txt | 16 ++++++++------ .../AnySceneImporter/Test/CMakeLists.txt | 3 +-- 12 files changed, 56 insertions(+), 53 deletions(-) diff --git a/src/MagnumPlugins/AnyAudioImporter/AnyImporter.h b/src/MagnumPlugins/AnyAudioImporter/AnyImporter.h index 155938b06..9e5165c79 100644 --- a/src/MagnumPlugins/AnyAudioImporter/AnyImporter.h +++ b/src/MagnumPlugins/AnyAudioImporter/AnyImporter.h @@ -44,11 +44,8 @@ This plugin is built if `WITH_ANYAUDIOIMPORTER` is enabled when building Magnum Plugins. To use dynamic plugin, you need to load `AnyAudioImporter` plugin from `MAGNUM_PLUGINS_IMPORTER_DIR`. To use static plugin, you need to request `AnyAudioImporter` component of `MagnumPlugins` package in CMake and -link to `${MAGNUMPLUGINS_ANYAUDIOIMPORTER_LIBRARIES}`. To use this as a -dependency of another plugin, you additionally need to add -`${MAGNUMPLUGINS_ANYAUDIOIMPORTER_INCLUDE_DIRS}` to include path. See -@ref building-plugins, @ref cmake-plugins and @ref plugins for more -information. +link to `MagnumPlugins::AnyAudioImporter` target. See @ref building-plugins, +@ref cmake-plugins and @ref plugins for more information. Supported formats: diff --git a/src/MagnumPlugins/AnyAudioImporter/CMakeLists.txt b/src/MagnumPlugins/AnyAudioImporter/CMakeLists.txt index 9b5fe6ab2..450b6633f 100644 --- a/src/MagnumPlugins/AnyAudioImporter/CMakeLists.txt +++ b/src/MagnumPlugins/AnyAudioImporter/CMakeLists.txt @@ -25,8 +25,6 @@ find_package(Magnum REQUIRED Audio) -include_directories(${MAGNUM_AUDIO_INCLUDE_DIRS}) - set(AnyAudioImporter_SRCS AnyImporter.cpp) @@ -37,6 +35,9 @@ set(AnyAudioImporter_HEADERS add_library(AnyAudioImporterObjects OBJECT ${AnyAudioImporter_SRCS} ${AnyAudioImporter_HEADERS}) +target_include_directories(AnyAudioImporterObjects PUBLIC + $ + ${PROJECT_SOURCE_DIR}/src) if(NOT BUILD_STATIC OR BUILD_STATIC_PIC) set_target_properties(AnyAudioImporterObjects PROPERTIES POSITION_INDEPENDENT_CODE ON) endif() @@ -49,16 +50,17 @@ add_plugin(AnyAudioImporter ${MAGNUM_PLUGINS_AUDIOIMPORTER_DEBUG_INSTALL_DIR} ${ if(BUILD_STATIC_PIC) set_target_properties(AnyAudioImporter PROPERTIES POSITION_INDEPENDENT_CODE ON) endif() - -target_link_libraries(AnyAudioImporter ${MAGNUM_LIBRARIES} ${MAGNUM_AUDIO_LIBRARIES}) +target_include_directories(AnyAudioImporter PUBLIC ${PROJECT_SOURCE_DIR}/src) +target_link_libraries(AnyAudioImporter Magnum::Magnum Magnum::Audio) install(FILES ${AnyAudioImporter_HEADERS} DESTINATION ${MAGNUM_PLUGINS_INCLUDE_INSTALL_DIR}/AnyAudioImporter) if(BUILD_TESTS) add_library(MagnumAnyAudioImporterTestLib STATIC $) - target_link_libraries(MagnumAnyAudioImporterTestLib ${MAGNUM_LIBRARIES} ${MAGNUM_AUDIO_LIBRARIES}) + target_include_directories(MagnumAnyAudioImporterTestLib PUBLIC ${PROJECT_SOURCE_DIR}/src) + target_link_libraries(MagnumAnyAudioImporterTestLib Magnum::Magnum Magnum::Audio) add_subdirectory(Test) endif() -# Magnum AnyAudioImporter library for superprojects -set(MAGNUMPLUGINS_ANYAUDIOIMPORTER_LIBRARY AnyAudioImporter CACHE INTERNAL "") +# MagnumPlugins AnyAudioImporter target alias for superprojects +add_library(MagnumPlugins::AnyAudioImporter ALIAS AnyAudioImporter) diff --git a/src/MagnumPlugins/AnyAudioImporter/Test/CMakeLists.txt b/src/MagnumPlugins/AnyAudioImporter/Test/CMakeLists.txt index 3be989e35..42ff4b549 100644 --- a/src/MagnumPlugins/AnyAudioImporter/Test/CMakeLists.txt +++ b/src/MagnumPlugins/AnyAudioImporter/Test/CMakeLists.txt @@ -23,8 +23,6 @@ # DEALINGS IN THE SOFTWARE. # -include_directories(BEFORE ${CMAKE_CURRENT_BINARY_DIR}) - set(WAV_FILE ${CMAKE_CURRENT_SOURCE_DIR}/stereo8.wav) set(OGG_FILE ${PROJECT_SOURCE_DIR}/src/MagnumPlugins/StbVorbisAudioImporter/Test/mono16.ogg) @@ -32,3 +30,4 @@ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/configure.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/configure.h) corrade_add_test(AnyAudioImporterTest Test.cpp LIBRARIES MagnumAnyAudioImporterTestLib) +target_include_directories(AnyAudioImporterTest PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) diff --git a/src/MagnumPlugins/AnyImageConverter/AnyImageConverter.h b/src/MagnumPlugins/AnyImageConverter/AnyImageConverter.h index 4f254d192..94080470e 100644 --- a/src/MagnumPlugins/AnyImageConverter/AnyImageConverter.h +++ b/src/MagnumPlugins/AnyImageConverter/AnyImageConverter.h @@ -43,11 +43,8 @@ This plugin is built if `WITH_ANYIMAGECONVERTER` is enabled when building Magnum Plugins. To use dynamic plugin, you need to load `AnyImageConverter` plugin from `MAGNUM_PLUGINS_IMPORTER_DIR`. To use static plugin, you need to request `AnyImageConverter` component of `MagnumPlugins` package in CMake and -link to `${MAGNUMPLUGINS_ANYIMAGECONVERTER_LIBRARIES}`. To use this as a -dependency of another plugin, you additionally need to add -`${MAGNUMPLUGINS_ANYIMAGECONVERTER_INCLUDE_DIRS}` to include path. See -@ref building-plugins, @ref cmake-plugins and @ref plugins for more -information. +link to `MagnumPlugins::AnyImageConverter` target. See @ref building-plugins, +@ref cmake-plugins and @ref plugins for more information. Supported formats for uncompressed data: diff --git a/src/MagnumPlugins/AnyImageConverter/CMakeLists.txt b/src/MagnumPlugins/AnyImageConverter/CMakeLists.txt index b9e0c8878..4fac8c16f 100644 --- a/src/MagnumPlugins/AnyImageConverter/CMakeLists.txt +++ b/src/MagnumPlugins/AnyImageConverter/CMakeLists.txt @@ -33,6 +33,9 @@ set(AnyImageConverter_HEADERS add_library(AnyImageConverterObjects OBJECT ${AnyImageConverter_SRCS} ${AnyImageConverter_HEADERS}) +target_include_directories(AnyImageConverterObjects PUBLIC + $ + ${PROJECT_SOURCE_DIR}/src) if(NOT BUILD_STATIC OR BUILD_STATIC_PIC) set_target_properties(AnyImageConverterObjects PROPERTIES POSITION_INDEPENDENT_CODE ON) endif() @@ -45,16 +48,17 @@ add_plugin(AnyImageConverter ${MAGNUM_PLUGINS_IMAGECONVERTER_DEBUG_INSTALL_DIR} if(BUILD_STATIC_PIC) set_target_properties(AnyImageConverter PROPERTIES POSITION_INDEPENDENT_CODE ON) endif() - -target_link_libraries(AnyImageConverter ${MAGNUM_LIBRARIES}) +target_include_directories(AnyImageConverter PUBLIC ${PROJECT_SOURCE_DIR}/src) +target_link_libraries(AnyImageConverter Magnum::Magnum) install(FILES ${AnyImageConverter_HEADERS} DESTINATION ${MAGNUM_PLUGINS_INCLUDE_INSTALL_DIR}/AnyImageConverter) if(BUILD_TESTS) add_library(MagnumAnyImageConverterTestLib STATIC $) - target_link_libraries(MagnumAnyImageConverterTestLib ${MAGNUM_LIBRARIES}) + target_include_directories(MagnumAnyImageConverterTestLib PUBLIC ${PROJECT_SOURCE_DIR}/src) + target_link_libraries(MagnumAnyImageConverterTestLib Magnum::Magnum) add_subdirectory(Test) endif() -# Magnum AnyImageConverter library for superprojects -set(MAGNUMPLUGINS_ANYIMAGECONVERTER_LIBRARY AnyImageConverter CACHE INTERNAL "") +# MagnumPlugins AnyImageConverter target alias for superprojects +add_library(MagnumPlugins::AnyImageConverter ALIAS AnyImageConverter) diff --git a/src/MagnumPlugins/AnyImageConverter/Test/CMakeLists.txt b/src/MagnumPlugins/AnyImageConverter/Test/CMakeLists.txt index d5c1a94b1..b03048b44 100644 --- a/src/MagnumPlugins/AnyImageConverter/Test/CMakeLists.txt +++ b/src/MagnumPlugins/AnyImageConverter/Test/CMakeLists.txt @@ -23,11 +23,10 @@ # DEALINGS IN THE SOFTWARE. # -include_directories(BEFORE ${CMAKE_CURRENT_BINARY_DIR}) - set(PNG_OUTPUT_FILE ${CMAKE_CURRENT_BINARY_DIR}/output.png) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/configure.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/configure.h) corrade_add_test(AnyImageConverterTest Test.cpp LIBRARIES MagnumAnyImageConverterTestLib) +target_include_directories(AnyImageConverterTest PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) diff --git a/src/MagnumPlugins/AnyImageImporter/AnyImageImporter.h b/src/MagnumPlugins/AnyImageImporter/AnyImageImporter.h index 593f65ada..706756974 100644 --- a/src/MagnumPlugins/AnyImageImporter/AnyImageImporter.h +++ b/src/MagnumPlugins/AnyImageImporter/AnyImageImporter.h @@ -58,11 +58,8 @@ This plugin is built if `WITH_ANYIMAGEIMPORTER` is enabled when building Magnum Plugins. To use dynamic plugin, you need to load `AnyImageImporter` plugin from `MAGNUM_PLUGINS_IMPORTER_DIR`. To use static plugin, you need to request `AnyImageImporter` component of `MagnumPlugins` package in CMake and -link to `${MAGNUMPLUGINS_ANYIMAGEIMPORTER_LIBRARIES}`. To use this as a -dependency of another plugin, you additionally need to add -`${MAGNUMPLUGINS_ANYIMAGEIMPORTER_INCLUDE_DIRS}` to include path. See -@ref building-plugins, @ref cmake-plugins and @ref plugins for more -information. +link to `MagnumPlugins::AnyImageImporter` target. See @ref building-plugins, +@ref cmake-plugins and @ref plugins for more information. Supported formats: diff --git a/src/MagnumPlugins/AnyImageImporter/CMakeLists.txt b/src/MagnumPlugins/AnyImageImporter/CMakeLists.txt index aa5d1692d..28c38de65 100644 --- a/src/MagnumPlugins/AnyImageImporter/CMakeLists.txt +++ b/src/MagnumPlugins/AnyImageImporter/CMakeLists.txt @@ -40,7 +40,11 @@ set(AnyImageImporter_HEADERS add_library(AnyImageImporterObjects OBJECT ${AnyImageImporter_SRCS} ${AnyImageImporter_HEADERS}) -set_target_properties(AnyImageImporterObjects PROPERTIES COMPILE_FLAGS "-DAnyImageImporterObjects_EXPORTS") +target_include_directories(AnyImageImporterObjects PUBLIC + $ + ${PROJECT_SOURCE_DIR}/src + ${PROJECT_BINARY_DIR}/src) +target_compile_definitions(AnyImageImporterObjects PRIVATE "AnyImageImporterObjects_EXPORTS") if(NOT BUILD_STATIC OR BUILD_STATIC_PIC) set_target_properties(AnyImageImporterObjects PROPERTIES POSITION_INDEPENDENT_CODE ON) endif() @@ -53,17 +57,22 @@ add_plugin(AnyImageImporter ${MAGNUM_PLUGINS_IMPORTER_DEBUG_INSTALL_DIR} ${MAGNU if(BUILD_STATIC_PIC) set_target_properties(AnyImageImporter PROPERTIES POSITION_INDEPENDENT_CODE ON) endif() - -target_link_libraries(AnyImageImporter ${MAGNUM_LIBRARIES}) +target_include_directories(AnyImageImporter PUBLIC + ${PROJECT_SOURCE_DIR}/src + ${PROJECT_BINARY_DIR}/src) +target_link_libraries(AnyImageImporter Magnum::Magnum) install(FILES ${AnyImageImporter_HEADERS} DESTINATION ${MAGNUM_PLUGINS_INCLUDE_INSTALL_DIR}/AnyImageImporter) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/configure.h DESTINATION ${MAGNUM_PLUGINS_INCLUDE_INSTALL_DIR}/AnyImageImporter) if(BUILD_TESTS) add_library(MagnumAnyImageImporterTestLib STATIC $) - target_link_libraries(MagnumAnyImageImporterTestLib ${MAGNUM_LIBRARIES}) + target_include_directories(MagnumAnyImageImporterTestLib PUBLIC + ${PROJECT_SOURCE_DIR}/src + ${PROJECT_BINARY_DIR}/src) + target_link_libraries(MagnumAnyImageImporterTestLib Magnum::Magnum) add_subdirectory(Test) endif() -# Magnum AnyImageImporter library for superprojects -set(MAGNUMPLUGINS_ANYIMAGEIMPORTER_LIBRARY AnyImageImporter CACHE INTERNAL "") +# MagnumPlugins AnyImageImporter target alias for superprojects +add_library(MagnumPlugins::AnyImageImporter ALIAS AnyImageImporter) diff --git a/src/MagnumPlugins/AnyImageImporter/Test/CMakeLists.txt b/src/MagnumPlugins/AnyImageImporter/Test/CMakeLists.txt index 6a593351f..c17a984c8 100644 --- a/src/MagnumPlugins/AnyImageImporter/Test/CMakeLists.txt +++ b/src/MagnumPlugins/AnyImageImporter/Test/CMakeLists.txt @@ -23,8 +23,6 @@ # DEALINGS IN THE SOFTWARE. # -include_directories(BEFORE ${CMAKE_CURRENT_BINARY_DIR}) - set(TGA_FILE ${PROJECT_SOURCE_DIR}/src/MagnumPlugins/ColladaImporter/Test/ColladaImporterTestFiles/image.tga) set(JPEG_FILE ${PROJECT_SOURCE_DIR}/src/MagnumPlugins/JpegImporter/Test/rgb.jpg) set(PNG_FILE ${PROJECT_SOURCE_DIR}/src/MagnumPlugins/PngImporter/Test/rgb.png) @@ -33,10 +31,11 @@ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/configure.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/configure.h) corrade_add_test(AnyImageImporterTest Test.cpp LIBRARIES MagnumAnyImageImporterTestLib) +target_include_directories(AnyImageImporterTest PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) # On Win32 we need to avoid dllimporting AnyImageImporter symbols, because it # would search for the symbols in some DLL even when they were linked # statically. However it apparently doesn't matter that they were dllexported # when building the static library. EH. if(WIN32) - set_target_properties(AnyImageImporterTest PROPERTIES COMPILE_FLAGS "-DMAGNUM_ANYIMAGEIMPORTER_BUILD_STATIC") + target_compile_definitions(AnyImageImporterTest PRIVATE "MAGNUM_ANYIMAGEIMPORTER_BUILD_STATIC") endif() diff --git a/src/MagnumPlugins/AnySceneImporter/AnySceneImporter.h b/src/MagnumPlugins/AnySceneImporter/AnySceneImporter.h index 2df65d629..a5aafe694 100644 --- a/src/MagnumPlugins/AnySceneImporter/AnySceneImporter.h +++ b/src/MagnumPlugins/AnySceneImporter/AnySceneImporter.h @@ -43,11 +43,8 @@ This plugin is built if `WITH_ANYSCENEIMPORTER` is enabled when building Magnum Plugins. To use dynamic plugin, you need to load `AnySceneImporter` plugin from `MAGNUM_PLUGINS_IMPORTER_DIR`. To use static plugin, you need to request `AnySceneImporter` component of `MagnumPlugins` package in CMake and -link to `${MAGNUMPLUGINS_ANYSCENEIMPORTER_LIBRARIES}`. To use this as a -dependency of another plugin, you additionally need to add -`${MAGNUMPLUGINS_ANYSCENEIMPORTER_INCLUDE_DIRS}` to include path. See -@ref building-plugins, @ref cmake-plugins and @ref plugins for more -information. +link to `MagnumPlugins::AnySceneImporter` target. See @ref building-plugins, +@ref cmake-plugins and @ref plugins for more information. Supported formats: diff --git a/src/MagnumPlugins/AnySceneImporter/CMakeLists.txt b/src/MagnumPlugins/AnySceneImporter/CMakeLists.txt index 3a53da61e..2a78aece1 100644 --- a/src/MagnumPlugins/AnySceneImporter/CMakeLists.txt +++ b/src/MagnumPlugins/AnySceneImporter/CMakeLists.txt @@ -33,7 +33,10 @@ set(AnySceneImporter_HEADERS add_library(AnySceneImporterObjects OBJECT ${AnySceneImporter_SRCS} ${AnySceneImporter_HEADERS}) -set_target_properties(AnySceneImporterObjects PROPERTIES COMPILE_FLAGS "-DAnySceneImporterObjects_EXPORTS") +target_include_directories(AnySceneImporterObjects PUBLIC + $ + ${PROJECT_SOURCE_DIR}/src) +target_compile_definitions(AnySceneImporterObjects PRIVATE "AnySceneImporterObjects_EXPORTS") if(NOT BUILD_STATIC OR BUILD_STATIC_PIC) set_target_properties(AnySceneImporterObjects PROPERTIES POSITION_INDEPENDENT_CODE ON) endif() @@ -46,16 +49,17 @@ add_plugin(AnySceneImporter ${MAGNUM_PLUGINS_IMPORTER_DEBUG_INSTALL_DIR} ${MAGNU if(BUILD_STATIC_PIC) set_target_properties(AnySceneImporter PROPERTIES POSITION_INDEPENDENT_CODE ON) endif() - -target_link_libraries(AnySceneImporter ${MAGNUM_LIBRARIES}) +target_include_directories(AnySceneImporter PUBLIC ${PROJECT_SOURCE_DIR}/src) +target_link_libraries(AnySceneImporter Magnum::Magnum) install(FILES ${AnySceneImporter_HEADERS} DESTINATION ${MAGNUM_PLUGINS_INCLUDE_INSTALL_DIR}/AnySceneImporter) if(BUILD_TESTS) add_library(MagnumAnySceneImporterTestLib STATIC $) - target_link_libraries(MagnumAnySceneImporterTestLib ${MAGNUM_LIBRARIES}) + target_include_directories(MagnumAnySceneImporterTestLib PUBLIC ${PROJECT_SOURCE_DIR}/src) + target_link_libraries(MagnumAnySceneImporterTestLib Magnum::Magnum) add_subdirectory(Test) endif() -# Magnum AnySceneImporter library for superprojects -set(MAGNUMPLUGINS_ANYSCENEIMPORTER_LIBRARY AnySceneImporter CACHE INTERNAL "") +# MagnumPlugins AnySceneImporter target alias for superprojects +add_library(MagnumPlugins::AnySceneImporter ALIAS AnySceneImporter) diff --git a/src/MagnumPlugins/AnySceneImporter/Test/CMakeLists.txt b/src/MagnumPlugins/AnySceneImporter/Test/CMakeLists.txt index 64f5242ca..78988fa96 100644 --- a/src/MagnumPlugins/AnySceneImporter/Test/CMakeLists.txt +++ b/src/MagnumPlugins/AnySceneImporter/Test/CMakeLists.txt @@ -23,8 +23,6 @@ # DEALINGS IN THE SOFTWARE. # -include_directories(BEFORE ${CMAKE_CURRENT_BINARY_DIR}) - set(OBJ_FILE ${PROJECT_SOURCE_DIR}/src/MagnumPlugins/AnySceneImporter/Test/mesh.obj) set(PLY_FILE ${PROJECT_SOURCE_DIR}/src/MagnumPlugins/StanfordImporter/Test/common.ply) @@ -32,3 +30,4 @@ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/configure.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/configure.h) corrade_add_test(AnySceneImporterTest Test.cpp LIBRARIES MagnumAnySceneImporterTestLib) +target_include_directories(AnySceneImporterTest PRIVATE ${CMAKE_CURRENT_BINARY_DIR})