diff --git a/src/MagnumPlugins/AnyAudioImporter/AnyImporter.h b/src/MagnumPlugins/AnyAudioImporter/AnyImporter.h index 9e5165c79..d0cc8905f 100644 --- a/src/MagnumPlugins/AnyAudioImporter/AnyImporter.h +++ b/src/MagnumPlugins/AnyAudioImporter/AnyImporter.h @@ -32,6 +32,21 @@ #include #include +#include "MagnumPlugins/AnyAudioImporter/configure.h" + +#ifndef DOXYGEN_GENERATING_OUTPUT +#ifndef MAGNUM_ANYAUDIOIMPORTER_BUILD_STATIC + #if defined(AnyAudioImporter_EXPORTS) || defined(AnyAudioImporterObjects_EXPORTS) + #define MAGNUM_ANYAUDIOIMPORTER_EXPORT CORRADE_VISIBILITY_EXPORT + #else + #define MAGNUM_ANYAUDIOIMPORTER_EXPORT CORRADE_VISIBILITY_IMPORT + #endif +#else + #define MAGNUM_ANYAUDIOIMPORTER_EXPORT CORRADE_VISIBILITY_STATIC +#endif +#define MAGNUM_ANYAUDIOIMPORTER_LOCAL CORRADE_VISIBILITY_LOCAL +#endif + namespace Magnum { namespace Audio { /** @@ -56,7 +71,7 @@ Supported formats: Only loading from files is supported. */ -class AnyImporter: public AbstractImporter { +class MAGNUM_ANYAUDIOIMPORTER_EXPORT AnyImporter: public AbstractImporter { public: /** @brief Constructor with access to plugin manager */ explicit AnyImporter(PluginManager::Manager& manager); @@ -67,14 +82,14 @@ class AnyImporter: public AbstractImporter { ~AnyImporter(); private: - Features doFeatures() const override; - bool doIsOpened() const override; - void doClose() override; - void doOpenFile(const std::string& filename) override; - - Buffer::Format doFormat() const override; - UnsignedInt doFrequency() const override; - Containers::Array doData() override; + MAGNUM_ANYAUDIOIMPORTER_LOCAL Features doFeatures() const override; + MAGNUM_ANYAUDIOIMPORTER_LOCAL bool doIsOpened() const override; + MAGNUM_ANYAUDIOIMPORTER_LOCAL void doClose() override; + MAGNUM_ANYAUDIOIMPORTER_LOCAL void doOpenFile(const std::string& filename) override; + + MAGNUM_ANYAUDIOIMPORTER_LOCAL Buffer::Format doFormat() const override; + MAGNUM_ANYAUDIOIMPORTER_LOCAL UnsignedInt doFrequency() const override; + MAGNUM_ANYAUDIOIMPORTER_LOCAL Containers::Array doData() override; std::unique_ptr _in; }; diff --git a/src/MagnumPlugins/AnyAudioImporter/CMakeLists.txt b/src/MagnumPlugins/AnyAudioImporter/CMakeLists.txt index bd3ac0a5a..ee9b50e1d 100644 --- a/src/MagnumPlugins/AnyAudioImporter/CMakeLists.txt +++ b/src/MagnumPlugins/AnyAudioImporter/CMakeLists.txt @@ -25,6 +25,13 @@ find_package(Magnum REQUIRED Audio) +if(BUILD_STATIC) + set(MAGNUM_ANYAUDIOIMPORTER_BUILD_STATIC 1) +endif() + +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/configure.h.cmake + ${CMAKE_CURRENT_BINARY_DIR}/configure.h) + set(AnyAudioImporter_SRCS AnyImporter.cpp) @@ -37,7 +44,9 @@ add_library(AnyAudioImporterObjects OBJECT ${AnyAudioImporter_HEADERS}) target_include_directories(AnyAudioImporterObjects PUBLIC $ - ${PROJECT_SOURCE_DIR}/src) + ${PROJECT_SOURCE_DIR}/src + ${PROJECT_BINARY_DIR}/src) +target_compile_definitions(AnyAudioImporterObjects PRIVATE "AnyAudioImporterObjects_EXPORTS") if(NOT BUILD_STATIC OR BUILD_STATIC_PIC) set_target_properties(AnyAudioImporterObjects PROPERTIES POSITION_INDEPENDENT_CODE ON) endif() @@ -50,16 +59,21 @@ add_plugin(AnyAudioImporter ${MAGNUM_PLUGINS_AUDIOIMPORTER_DEBUG_INSTALL_DIR} ${ if(BUILD_STATIC_PIC) set_target_properties(AnyAudioImporter PROPERTIES POSITION_INDEPENDENT_CODE ON) endif() -target_include_directories(AnyAudioImporter PUBLIC ${PROJECT_SOURCE_DIR}/src) +target_include_directories(AnyAudioImporter PUBLIC + ${PROJECT_SOURCE_DIR}/src + ${PROJECT_BINARY_DIR}/src) target_link_libraries(AnyAudioImporter Magnum::Magnum Magnum::Audio) install(FILES ${AnyAudioImporter_HEADERS} DESTINATION ${MAGNUM_PLUGINS_INCLUDE_INSTALL_DIR}/AnyAudioImporter) +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/configure.h DESTINATION ${MAGNUM_PLUGINS_INCLUDE_INSTALL_DIR}/AnyAudioImporter) if(BUILD_TESTS) add_library(MagnumAnyAudioImporterTestLib STATIC $ ${PROJECT_SOURCE_DIR}/src/dummy.cpp) # XCode workaround, see file comment for details - target_include_directories(MagnumAnyAudioImporterTestLib PUBLIC ${PROJECT_SOURCE_DIR}/src) + target_include_directories(MagnumAnyAudioImporterTestLib PUBLIC + ${PROJECT_SOURCE_DIR}/src + ${PROJECT_BINARY_DIR}/src) target_link_libraries(MagnumAnyAudioImporterTestLib Magnum::Magnum Magnum::Audio) add_subdirectory(Test) endif() diff --git a/src/MagnumPlugins/AnyAudioImporter/Test/CMakeLists.txt b/src/MagnumPlugins/AnyAudioImporter/Test/CMakeLists.txt index 42ff4b549..e14711732 100644 --- a/src/MagnumPlugins/AnyAudioImporter/Test/CMakeLists.txt +++ b/src/MagnumPlugins/AnyAudioImporter/Test/CMakeLists.txt @@ -31,3 +31,10 @@ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/configure.h.cmake corrade_add_test(AnyAudioImporterTest Test.cpp LIBRARIES MagnumAnyAudioImporterTestLib) target_include_directories(AnyAudioImporterTest PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) +# On Win32 we need to avoid dllimporting AnyAudioImporter 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) + target_compile_definitions(AnyAudioImporterTest PRIVATE "MAGNUM_ANYAUDIOIMPORTER_BUILD_STATIC") +endif() diff --git a/src/MagnumPlugins/AnyAudioImporter/configure.h.cmake b/src/MagnumPlugins/AnyAudioImporter/configure.h.cmake new file mode 100644 index 000000000..a5fa13df2 --- /dev/null +++ b/src/MagnumPlugins/AnyAudioImporter/configure.h.cmake @@ -0,0 +1,26 @@ +/* + This file is part of Magnum. + + Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016 + Vladimír Vondruš + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. +*/ + +#cmakedefine MAGNUM_ANYAUDIOIMPORTER_BUILD_STATIC diff --git a/src/MagnumPlugins/AnyImageConverter/AnyImageConverter.h b/src/MagnumPlugins/AnyImageConverter/AnyImageConverter.h index bf45d6b55..c20332d4a 100644 --- a/src/MagnumPlugins/AnyImageConverter/AnyImageConverter.h +++ b/src/MagnumPlugins/AnyImageConverter/AnyImageConverter.h @@ -31,6 +31,21 @@ #include +#include "MagnumPlugins/AnyImageConverter/configure.h" + +#ifndef DOXYGEN_GENERATING_OUTPUT +#ifndef MAGNUM_ANYIMAGECONVERTER_BUILD_STATIC + #if defined(AnyImageConverter_EXPORTS) || defined(AnyImageConverterObjects_EXPORTS) + #define MAGNUM_ANYIMAGECONVERTER_EXPORT CORRADE_VISIBILITY_EXPORT + #else + #define MAGNUM_ANYIMAGECONVERTER_EXPORT CORRADE_VISIBILITY_IMPORT + #endif +#else + #define MAGNUM_ANYIMAGECONVERTER_EXPORT CORRADE_VISIBILITY_STATIC +#endif +#define MAGNUM_ANYIMAGECONVERTER_LOCAL CORRADE_VISIBILITY_LOCAL +#endif + namespace Magnum { namespace Trade { /** @@ -59,7 +74,7 @@ No supported formats for compressed data yet. Only exporting to files is supported. */ -class AnyImageConverter: public AbstractImageConverter { +class MAGNUM_ANYIMAGECONVERTER_EXPORT AnyImageConverter: public AbstractImageConverter { public: /** @brief Constructor with access to plugin manager */ explicit AnyImageConverter(PluginManager::Manager& manager); @@ -70,9 +85,9 @@ class AnyImageConverter: public AbstractImageConverter { ~AnyImageConverter(); private: - Features doFeatures() const override; - bool doExportToFile(const ImageView2D& image, const std::string& filename) override; - bool doExportToFile(const CompressedImageView2D& image, const std::string& filename) override; + MAGNUM_ANYIMAGECONVERTER_LOCAL Features doFeatures() const override; + MAGNUM_ANYIMAGECONVERTER_LOCAL bool doExportToFile(const ImageView2D& image, const std::string& filename) override; + MAGNUM_ANYIMAGECONVERTER_LOCAL bool doExportToFile(const CompressedImageView2D& image, const std::string& filename) override; }; }} diff --git a/src/MagnumPlugins/AnyImageConverter/CMakeLists.txt b/src/MagnumPlugins/AnyImageConverter/CMakeLists.txt index 6cbf3cc33..e910522a5 100644 --- a/src/MagnumPlugins/AnyImageConverter/CMakeLists.txt +++ b/src/MagnumPlugins/AnyImageConverter/CMakeLists.txt @@ -23,6 +23,13 @@ # DEALINGS IN THE SOFTWARE. # +if(BUILD_STATIC) + set(MAGNUM_ANYIMAGECONVERTER_BUILD_STATIC 1) +endif() + +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/configure.h.cmake + ${CMAKE_CURRENT_BINARY_DIR}/configure.h) + set(AnyImageConverter_SRCS AnyImageConverter.cpp) @@ -35,7 +42,9 @@ add_library(AnyImageConverterObjects OBJECT ${AnyImageConverter_HEADERS}) target_include_directories(AnyImageConverterObjects PUBLIC $ - ${PROJECT_SOURCE_DIR}/src) + ${PROJECT_SOURCE_DIR}/src + ${PROJECT_BINARY_DIR}/src) +target_compile_definitions(AnyImageConverterObjects PRIVATE "AnyImageConverterObjects_EXPORTS") if(NOT BUILD_STATIC OR BUILD_STATIC_PIC) set_target_properties(AnyImageConverterObjects PROPERTIES POSITION_INDEPENDENT_CODE ON) endif() @@ -48,16 +57,21 @@ add_plugin(AnyImageConverter ${MAGNUM_PLUGINS_IMAGECONVERTER_DEBUG_INSTALL_DIR} if(BUILD_STATIC_PIC) set_target_properties(AnyImageConverter PROPERTIES POSITION_INDEPENDENT_CODE ON) endif() -target_include_directories(AnyImageConverter PUBLIC ${PROJECT_SOURCE_DIR}/src) +target_include_directories(AnyImageConverter PUBLIC + ${PROJECT_SOURCE_DIR}/src + ${PROJECT_BINARY_DIR}/src) target_link_libraries(AnyImageConverter Magnum::Magnum) install(FILES ${AnyImageConverter_HEADERS} DESTINATION ${MAGNUM_PLUGINS_INCLUDE_INSTALL_DIR}/AnyImageConverter) +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/configure.h DESTINATION ${MAGNUM_PLUGINS_INCLUDE_INSTALL_DIR}/AnyImageConverter) if(BUILD_TESTS) add_library(MagnumAnyImageConverterTestLib STATIC $ ${PROJECT_SOURCE_DIR}/src/dummy.cpp) # XCode workaround, see file comment for details - target_include_directories(MagnumAnyImageConverterTestLib PUBLIC ${PROJECT_SOURCE_DIR}/src) + target_include_directories(MagnumAnyImageConverterTestLib PUBLIC + ${PROJECT_SOURCE_DIR}/src + ${PROJECT_BINARY_DIR}/src) target_link_libraries(MagnumAnyImageConverterTestLib Magnum::Magnum) add_subdirectory(Test) endif() diff --git a/src/MagnumPlugins/AnyImageConverter/Test/CMakeLists.txt b/src/MagnumPlugins/AnyImageConverter/Test/CMakeLists.txt index b03048b44..c2dc1105c 100644 --- a/src/MagnumPlugins/AnyImageConverter/Test/CMakeLists.txt +++ b/src/MagnumPlugins/AnyImageConverter/Test/CMakeLists.txt @@ -30,3 +30,10 @@ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/configure.h.cmake corrade_add_test(AnyImageConverterTest Test.cpp LIBRARIES MagnumAnyImageConverterTestLib) target_include_directories(AnyImageConverterTest PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) +# On Win32 we need to avoid dllimporting AnyImageConverter 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) + target_compile_definitions(AnyImageConverterTest PRIVATE "MAGNUM_ANYIMAGECONVERTER_BUILD_STATIC") +endif() diff --git a/src/MagnumPlugins/AnyImageConverter/configure.h.cmake b/src/MagnumPlugins/AnyImageConverter/configure.h.cmake new file mode 100644 index 000000000..8330b7ef4 --- /dev/null +++ b/src/MagnumPlugins/AnyImageConverter/configure.h.cmake @@ -0,0 +1,26 @@ +/* + This file is part of Magnum. + + Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016 + Vladimír Vondruš + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. +*/ + +#cmakedefine MAGNUM_ANYIMAGECONVERTER_BUILD_STATIC diff --git a/src/MagnumPlugins/AnySceneImporter/AnySceneImporter.h b/src/MagnumPlugins/AnySceneImporter/AnySceneImporter.h index a5aafe694..986dfe83c 100644 --- a/src/MagnumPlugins/AnySceneImporter/AnySceneImporter.h +++ b/src/MagnumPlugins/AnySceneImporter/AnySceneImporter.h @@ -31,6 +31,21 @@ #include +#include "MagnumPlugins/AnySceneImporter/configure.h" + +#ifndef DOXYGEN_GENERATING_OUTPUT +#ifndef MAGNUM_ANYSCENEIMPORTER_BUILD_STATIC + #if defined(AnySceneImporter_EXPORTS) || defined(AnySceneImporterObjects_EXPORTS) + #define MAGNUM_ANYSCENEIMPORTER_EXPORT CORRADE_VISIBILITY_EXPORT + #else + #define MAGNUM_ANYSCENEIMPORTER_EXPORT CORRADE_VISIBILITY_IMPORT + #endif +#else + #define MAGNUM_ANYSCENEIMPORTER_EXPORT CORRADE_VISIBILITY_STATIC +#endif +#define MAGNUM_ANYSCENEIMPORTER_LOCAL CORRADE_VISIBILITY_LOCAL +#endif + namespace Magnum { namespace Trade { /** @@ -59,7 +74,7 @@ Supported formats: Only loading from files is supported. */ -class AnySceneImporter: public AbstractImporter { +class MAGNUM_ANYSCENEIMPORTER_EXPORT AnySceneImporter: public AbstractImporter { public: /** @brief Constructor with access to plugin manager */ explicit AnySceneImporter(PluginManager::Manager& manager); @@ -70,74 +85,73 @@ class AnySceneImporter: public AbstractImporter { ~AnySceneImporter(); private: - Features doFeatures() const override; - bool doIsOpened() const override; - void doClose() override; - void doOpenFile(const std::string& filename) override; - - Int doDefaultScene() override; - - UnsignedInt doSceneCount() const override; - Int doSceneForName(const std::string& name) override; - std::string doSceneName(UnsignedInt id) override; - std::optional doScene(UnsignedInt id) override; - - UnsignedInt doLightCount() const override; - Int doLightForName(const std::string& name) override; - std::string doLightName(UnsignedInt id) override; - std::optional doLight(UnsignedInt id) override; - - UnsignedInt doCameraCount() const override; - Int doCameraForName(const std::string& name) override; - std::string doCameraName(UnsignedInt id) override; - std::optional doCamera(UnsignedInt id) override; - - UnsignedInt doObject2DCount() const override; - Int doObject2DForName(const std::string& name) override; - std::string doObject2DName(UnsignedInt id) override; - std::unique_ptr doObject2D(UnsignedInt id) override; - - UnsignedInt doObject3DCount() const override; - Int doObject3DForName(const std::string& name) override; - std::string doObject3DName(UnsignedInt id) override; - std::unique_ptr doObject3D(UnsignedInt id) override; - - UnsignedInt doMesh2DCount() const override; - Int doMesh2DForName(const std::string& name) override; - std::string doMesh2DName(UnsignedInt id) override; - std::optional doMesh2D(UnsignedInt id) override; - - UnsignedInt doMesh3DCount() const override; - Int doMesh3DForName(const std::string& name) override; - std::string doMesh3DName(UnsignedInt id) override; - std::optional doMesh3D(UnsignedInt id) override; - - UnsignedInt doMaterialCount() const override; - Int doMaterialForName(const std::string& name) override; - std::string doMaterialName(UnsignedInt id) override; - std::unique_ptr doMaterial(UnsignedInt id) override; - - UnsignedInt doTextureCount() const override; - Int doTextureForName(const std::string& name) override; - std::string doTextureName(UnsignedInt id) override; - std::optional doTexture(UnsignedInt id) override; - - UnsignedInt doImage1DCount() const override; - Int doImage1DForName(const std::string& name) override; - std::string doImage1DName(UnsignedInt id) override; - std::optional doImage1D(UnsignedInt id) override; - - UnsignedInt doImage2DCount() const override; - Int doImage2DForName(const std::string& name) override; - std::string doImage2DName(UnsignedInt id) override; - std::optional doImage2D(UnsignedInt id) override; - - UnsignedInt doImage3DCount() const override; - Int doImage3DForName(const std::string& name) override; - std::string doImage3DName(UnsignedInt id) override; - std::optional doImage3D(UnsignedInt id) override; + MAGNUM_ANYSCENEIMPORTER_LOCAL Features doFeatures() const override; + MAGNUM_ANYSCENEIMPORTER_LOCAL bool doIsOpened() const override; + MAGNUM_ANYSCENEIMPORTER_LOCAL void doClose() override; + MAGNUM_ANYSCENEIMPORTER_LOCAL void doOpenFile(const std::string& filename) override; + + MAGNUM_ANYSCENEIMPORTER_LOCAL Int doDefaultScene() override; + + MAGNUM_ANYSCENEIMPORTER_LOCAL UnsignedInt doSceneCount() const override; + MAGNUM_ANYSCENEIMPORTER_LOCAL Int doSceneForName(const std::string& name) override; + MAGNUM_ANYSCENEIMPORTER_LOCAL std::string doSceneName(UnsignedInt id) override; + MAGNUM_ANYSCENEIMPORTER_LOCAL std::optional doScene(UnsignedInt id) override; + + MAGNUM_ANYSCENEIMPORTER_LOCAL UnsignedInt doLightCount() const override; + MAGNUM_ANYSCENEIMPORTER_LOCAL Int doLightForName(const std::string& name) override; + MAGNUM_ANYSCENEIMPORTER_LOCAL std::string doLightName(UnsignedInt id) override; + MAGNUM_ANYSCENEIMPORTER_LOCAL std::optional doLight(UnsignedInt id) override; + + MAGNUM_ANYSCENEIMPORTER_LOCAL UnsignedInt doCameraCount() const override; + MAGNUM_ANYSCENEIMPORTER_LOCAL Int doCameraForName(const std::string& name) override; + MAGNUM_ANYSCENEIMPORTER_LOCAL std::string doCameraName(UnsignedInt id) override; + MAGNUM_ANYSCENEIMPORTER_LOCAL std::optional doCamera(UnsignedInt id) override; + + MAGNUM_ANYSCENEIMPORTER_LOCAL UnsignedInt doObject2DCount() const override; + MAGNUM_ANYSCENEIMPORTER_LOCAL Int doObject2DForName(const std::string& name) override; + MAGNUM_ANYSCENEIMPORTER_LOCAL std::string doObject2DName(UnsignedInt id) override; + MAGNUM_ANYSCENEIMPORTER_LOCAL std::unique_ptr doObject2D(UnsignedInt id) override; + + MAGNUM_ANYSCENEIMPORTER_LOCAL UnsignedInt doObject3DCount() const override; + MAGNUM_ANYSCENEIMPORTER_LOCAL Int doObject3DForName(const std::string& name) override; + MAGNUM_ANYSCENEIMPORTER_LOCAL std::string doObject3DName(UnsignedInt id) override; + MAGNUM_ANYSCENEIMPORTER_LOCAL std::unique_ptr doObject3D(UnsignedInt id) override; + + MAGNUM_ANYSCENEIMPORTER_LOCAL UnsignedInt doMesh2DCount() const override; + MAGNUM_ANYSCENEIMPORTER_LOCAL Int doMesh2DForName(const std::string& name) override; + MAGNUM_ANYSCENEIMPORTER_LOCAL std::string doMesh2DName(UnsignedInt id) override; + MAGNUM_ANYSCENEIMPORTER_LOCAL std::optional doMesh2D(UnsignedInt id) override; + + MAGNUM_ANYSCENEIMPORTER_LOCAL UnsignedInt doMesh3DCount() const override; + MAGNUM_ANYSCENEIMPORTER_LOCAL Int doMesh3DForName(const std::string& name) override; + MAGNUM_ANYSCENEIMPORTER_LOCAL std::string doMesh3DName(UnsignedInt id) override; + MAGNUM_ANYSCENEIMPORTER_LOCAL std::optional doMesh3D(UnsignedInt id) override; + + MAGNUM_ANYSCENEIMPORTER_LOCAL UnsignedInt doMaterialCount() const override; + MAGNUM_ANYSCENEIMPORTER_LOCAL Int doMaterialForName(const std::string& name) override; + MAGNUM_ANYSCENEIMPORTER_LOCAL std::string doMaterialName(UnsignedInt id) override; + MAGNUM_ANYSCENEIMPORTER_LOCAL std::unique_ptr doMaterial(UnsignedInt id) override; + + MAGNUM_ANYSCENEIMPORTER_LOCAL UnsignedInt doTextureCount() const override; + MAGNUM_ANYSCENEIMPORTER_LOCAL Int doTextureForName(const std::string& name) override; + MAGNUM_ANYSCENEIMPORTER_LOCAL std::string doTextureName(UnsignedInt id) override; + MAGNUM_ANYSCENEIMPORTER_LOCAL std::optional doTexture(UnsignedInt id) override; + + MAGNUM_ANYSCENEIMPORTER_LOCAL UnsignedInt doImage1DCount() const override; + MAGNUM_ANYSCENEIMPORTER_LOCAL Int doImage1DForName(const std::string& name) override; + MAGNUM_ANYSCENEIMPORTER_LOCAL std::string doImage1DName(UnsignedInt id) override; + MAGNUM_ANYSCENEIMPORTER_LOCAL std::optional doImage1D(UnsignedInt id) override; + + MAGNUM_ANYSCENEIMPORTER_LOCAL UnsignedInt doImage2DCount() const override; + MAGNUM_ANYSCENEIMPORTER_LOCAL Int doImage2DForName(const std::string& name) override; + MAGNUM_ANYSCENEIMPORTER_LOCAL std::string doImage2DName(UnsignedInt id) override; + MAGNUM_ANYSCENEIMPORTER_LOCAL std::optional doImage2D(UnsignedInt id) override; + + MAGNUM_ANYSCENEIMPORTER_LOCAL UnsignedInt doImage3DCount() const override; + MAGNUM_ANYSCENEIMPORTER_LOCAL Int doImage3DForName(const std::string& name) override; + MAGNUM_ANYSCENEIMPORTER_LOCAL std::string doImage3DName(UnsignedInt id) override; + MAGNUM_ANYSCENEIMPORTER_LOCAL std::optional doImage3D(UnsignedInt id) override; - private: std::unique_ptr _in; }; diff --git a/src/MagnumPlugins/AnySceneImporter/CMakeLists.txt b/src/MagnumPlugins/AnySceneImporter/CMakeLists.txt index 5d30ad24c..31f91c80e 100644 --- a/src/MagnumPlugins/AnySceneImporter/CMakeLists.txt +++ b/src/MagnumPlugins/AnySceneImporter/CMakeLists.txt @@ -23,6 +23,13 @@ # DEALINGS IN THE SOFTWARE. # +if(BUILD_STATIC) + set(MAGNUM_ANYSCENEIMPORTER_BUILD_STATIC 1) +endif() + +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/configure.h.cmake + ${CMAKE_CURRENT_BINARY_DIR}/configure.h) + set(AnySceneImporter_SRCS AnySceneImporter.cpp) @@ -35,7 +42,8 @@ add_library(AnySceneImporterObjects OBJECT ${AnySceneImporter_HEADERS}) target_include_directories(AnySceneImporterObjects PUBLIC $ - ${PROJECT_SOURCE_DIR}/src) + ${PROJECT_SOURCE_DIR}/src + ${PROJECT_BINARY_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) @@ -49,16 +57,21 @@ 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_include_directories(AnySceneImporter PUBLIC ${PROJECT_SOURCE_DIR}/src) +target_include_directories(AnySceneImporter PUBLIC + ${PROJECT_SOURCE_DIR}/src + ${PROJECT_BINARY_DIR}/src) target_link_libraries(AnySceneImporter Magnum::Magnum) install(FILES ${AnySceneImporter_HEADERS} DESTINATION ${MAGNUM_PLUGINS_INCLUDE_INSTALL_DIR}/AnySceneImporter) +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/configure.h DESTINATION ${MAGNUM_PLUGINS_INCLUDE_INSTALL_DIR}/AnySceneImporter) if(BUILD_TESTS) add_library(MagnumAnySceneImporterTestLib STATIC $ ${PROJECT_SOURCE_DIR}/src/dummy.cpp) # XCode workaround, see file comment for details - target_include_directories(MagnumAnySceneImporterTestLib PUBLIC ${PROJECT_SOURCE_DIR}/src) + target_include_directories(MagnumAnySceneImporterTestLib PUBLIC + ${PROJECT_SOURCE_DIR}/src + ${PROJECT_BINARY_DIR}/src) target_link_libraries(MagnumAnySceneImporterTestLib Magnum::Magnum) add_subdirectory(Test) endif() diff --git a/src/MagnumPlugins/AnySceneImporter/Test/CMakeLists.txt b/src/MagnumPlugins/AnySceneImporter/Test/CMakeLists.txt index 78988fa96..92b9e270c 100644 --- a/src/MagnumPlugins/AnySceneImporter/Test/CMakeLists.txt +++ b/src/MagnumPlugins/AnySceneImporter/Test/CMakeLists.txt @@ -31,3 +31,10 @@ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/configure.h.cmake corrade_add_test(AnySceneImporterTest Test.cpp LIBRARIES MagnumAnySceneImporterTestLib) target_include_directories(AnySceneImporterTest PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) +# On Win32 we need to avoid dllimporting AnySceneImporter 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) + target_compile_definitions(AnySceneImporterTest PRIVATE "MAGNUM_ANYSCENEIMPORTER_BUILD_STATIC") +endif() diff --git a/src/MagnumPlugins/AnySceneImporter/configure.h.cmake b/src/MagnumPlugins/AnySceneImporter/configure.h.cmake new file mode 100644 index 000000000..d0e6813a2 --- /dev/null +++ b/src/MagnumPlugins/AnySceneImporter/configure.h.cmake @@ -0,0 +1,26 @@ +/* + This file is part of Magnum. + + Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016 + Vladimír Vondruš + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. +*/ + +#cmakedefine MAGNUM_ANYSCENEIMPORTER_BUILD_STATIC