Browse Source

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.
pull/205/head
Vladimír Vondruš 10 years ago
parent
commit
129c8cdbf1
  1. 7
      src/MagnumPlugins/AnyAudioImporter/AnyImporter.h
  2. 16
      src/MagnumPlugins/AnyAudioImporter/CMakeLists.txt
  3. 3
      src/MagnumPlugins/AnyAudioImporter/Test/CMakeLists.txt
  4. 7
      src/MagnumPlugins/AnyImageConverter/AnyImageConverter.h
  5. 14
      src/MagnumPlugins/AnyImageConverter/CMakeLists.txt
  6. 3
      src/MagnumPlugins/AnyImageConverter/Test/CMakeLists.txt
  7. 7
      src/MagnumPlugins/AnyImageImporter/AnyImageImporter.h
  8. 21
      src/MagnumPlugins/AnyImageImporter/CMakeLists.txt
  9. 5
      src/MagnumPlugins/AnyImageImporter/Test/CMakeLists.txt
  10. 7
      src/MagnumPlugins/AnySceneImporter/AnySceneImporter.h
  11. 16
      src/MagnumPlugins/AnySceneImporter/CMakeLists.txt
  12. 3
      src/MagnumPlugins/AnySceneImporter/Test/CMakeLists.txt

7
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:

16
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
$<TARGET_PROPERTY:Magnum::Audio,INTERFACE_INCLUDE_DIRECTORIES>
${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_OBJECTS:AnyAudioImporterObjects>)
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)

3
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})

7
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:

14
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
$<TARGET_PROPERTY:Magnum::Magnum,INTERFACE_INCLUDE_DIRECTORIES>
${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_OBJECTS:AnyImageConverterObjects>)
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)

3
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})

7
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:

21
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
$<TARGET_PROPERTY:Magnum::Magnum,INTERFACE_INCLUDE_DIRECTORIES>
${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_OBJECTS:AnyImageImporterObjects>)
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)

5
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()

7
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:

16
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
$<TARGET_PROPERTY:Magnum::Magnum,INTERFACE_INCLUDE_DIRECTORIES>
${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_OBJECTS:AnySceneImporterObjects>)
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)

3
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})

Loading…
Cancel
Save