From b88f96b7809b4fe2b2dfec89bf7f9bb18206f481 Mon Sep 17 00:00:00 2001 From: Kai Blaschke Date: Tue, 19 Sep 2023 18:34:28 +0200 Subject: [PATCH] Fix CMake scripts, so they can be used via add_subdirectory(). --- CMakeLists.txt | 43 +++--- cmake/GeneratePkgConfigFiles.cmake | 4 +- features.cmake | 6 +- src/api/CMakeLists.txt | 38 ++--- src/libprojectM/CMakeLists.txt | 220 +++++++++++++++-------------- src/playlist/CMakeLists.txt | 100 ++++++------- tests/libprojectM/CMakeLists.txt | 4 +- 7 files changed, 216 insertions(+), 199 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index eec04a3c7..7e2a14358 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,8 +1,12 @@ -cmake_minimum_required(VERSION 3.20 FATAL_ERROR) +cmake_minimum_required(VERSION 3.21 FATAL_ERROR) include(CMakeDependentOption) include(CheckSymbolExists) +# Save the current source/binary dirs if we're in a subdirectory of a larger CMake project. +set(PROJECTM_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}") +set(PROJECTM_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}") + set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD_REQUIRED YES) set(CMAKE_POSITION_INDEPENDENT_CODE YES) @@ -32,7 +36,7 @@ set(PROJECTM_SO_VERSION "4") # The actual (full) library version of projectM set(PROJECTM_LIB_VERSION "${CMAKE_PROJECT_VERSION}") -list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake") +list(APPEND CMAKE_MODULE_PATH "${PROJECTM_SOURCE_DIR}/cmake") include(VCSVersion) include(GNUInstallDirs) @@ -42,7 +46,7 @@ set(PROJECTM_LIB_DIR "${CMAKE_INSTALL_LIBDIR}" CACHE STRING "Library installatio set(PROJECTM_INCLUDE_DIR "${CMAKE_INSTALL_INCLUDEDIR}" CACHE STRING "Header installation directory, relative to the install prefix.") # Dummy file for merged static libs. -set(PROJECTM_DUMMY_SOURCE_FILE "${CMAKE_BINARY_DIR}/dummy.cpp") +set(PROJECTM_DUMMY_SOURCE_FILE "${PROJECTM_BINARY_DIR}/dummy.cpp") file(TOUCH "${PROJECTM_DUMMY_SOURCE_FILE}") if(CMAKE_SYSTEM_NAME STREQUAL Emscripten) @@ -59,6 +63,7 @@ cmake_dependent_option(ENABLE_SDL_UI "Build the SDL2-based developer test UI" OF cmake_dependent_option(ENABLE_GLES "Enable OpenGL ES support" OFF "NOT ENABLE_EMSCRIPTEN AND NOT CMAKE_SYSTEM_NAME STREQUAL Android" ON) cmake_dependent_option(ENABLE_OPENMP "Enable OpenMP support if available" ON "NOT ENABLE_EMSCRIPTEN" OFF) cmake_dependent_option(ENABLE_THREADING "Enable multithreading support." ON "NOT ENABLE_EMSCRIPTEN" OFF) +cmake_dependent_option(ENABLE_INSTALL "Enable installing projectM libraries and headers." OFF "NOT PROJECT_IS_TOP_LEVEL" ON) option(ENABLE_SYSTEM_GLM "Enable use of system-install GLM library" OFF) # Experimental/unsupported features @@ -70,7 +75,7 @@ if(ENABLE_SYSTEM_GLM) else() add_library(GLM::GLM INTERFACE IMPORTED) set_target_properties(GLM::GLM PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_SOURCE_DIR}/vendor" + INTERFACE_INCLUDE_DIRECTORIES "${PROJECTM_SOURCE_DIR}/vendor" ) endif() @@ -85,21 +90,21 @@ if(ENABLE_EMSCRIPTEN) # Instead, specifying the required options directly to emcc is the way to go. # Note: The "SHELL:" syntax is required to pass each argument as-is, but without quotes and CMake's de-duplication. add_compile_options( - "SHELL:-s USE_SDL=2" - "SHELL:-s MIN_WEBGL_VERSION=2" - "SHELL:-s MAX_WEBGL_VERSION=2" - "SHELL:-s ALLOW_MEMORY_GROWTH=1" - "SHELL:-s NO_DISABLE_EXCEPTION_CATCHING" - ) + "SHELL:-s USE_SDL=2" + "SHELL:-s MIN_WEBGL_VERSION=2" + "SHELL:-s MAX_WEBGL_VERSION=2" + "SHELL:-s ALLOW_MEMORY_GROWTH=1" + "SHELL:-s NO_DISABLE_EXCEPTION_CATCHING" + ) add_link_options( - "SHELL:-s USE_SDL=2" - "SHELL:-s MIN_WEBGL_VERSION=2" - "SHELL:-s MAX_WEBGL_VERSION=2" - "SHELL:-s FULL_ES2=1" - "SHELL:-s ALLOW_MEMORY_GROWTH=1" - "SHELL:-s NO_DISABLE_EXCEPTION_CATCHING" - ) + "SHELL:-s USE_SDL=2" + "SHELL:-s MIN_WEBGL_VERSION=2" + "SHELL:-s MAX_WEBGL_VERSION=2" + "SHELL:-s FULL_ES2=1" + "SHELL:-s ALLOW_MEMORY_GROWTH=1" + "SHELL:-s NO_DISABLE_EXCEPTION_CATCHING" + ) if(ENABLE_THREADING) message(AUTHOR_WARNING "Threading on emscripten is deemed stable, but may have issues. Use with care.\n" @@ -120,12 +125,12 @@ else() if(ENABLE_GLES) message(STATUS "Building for OpenGL Embedded Profile") if(NOT CMAKE_SYSTEM_NAME STREQUAL Linux - AND NOT CMAKE_SYSTEM_NAME STREQUAL Android) + AND NOT CMAKE_SYSTEM_NAME STREQUAL Android) message(FATAL_ERROR "OpenGL ES 3 support is currently only available for Linux platforms. You're building for ${CMAKE_SYSTEM_NAME}.") endif() # We use a local find script for OpenGL::GLES3 until the proposed changes are merged upstream. - list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/gles") + list(APPEND CMAKE_MODULE_PATH "${PROJECTM_SOURCE_DIR}/cmake/gles") find_package(OpenGL REQUIRED COMPONENTS GLES3) if(NOT TARGET OpenGL::GLES3) message(FATAL_ERROR "No suitable GLES3 library was found.") diff --git a/cmake/GeneratePkgConfigFiles.cmake b/cmake/GeneratePkgConfigFiles.cmake index a3ac1c56f..640c595ac 100644 --- a/cmake/GeneratePkgConfigFiles.cmake +++ b/cmake/GeneratePkgConfigFiles.cmake @@ -30,7 +30,7 @@ macro(GENERATE_PKG_CONFIG_FILES target package_name) # multi-config packages such as CMake provides. It's a mess. set(PKGCONFIG_PROJECTM_LIBRARY "${_lib_name}") set(PKGCONFIG_PACKAGE_REQUIREMENTS "${PKGCONFIG_PACKAGE_REQUIREMENTS_ALL} ${PKGCONFIG_PACKAGE_REQUIREMENTS_RELEASE}") - configure_file(${CMAKE_SOURCE_DIR}/cmake/pkgconfig-file.in "${CMAKE_CURRENT_BINARY_DIR}/${package_name}.pc" @ONLY) + configure_file(${PROJECTM_SOURCE_DIR}/cmake/pkgconfig-file.in "${CMAKE_CURRENT_BINARY_DIR}/${package_name}.pc" @ONLY) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${package_name}.pc" CONFIGURATIONS Release;RelWithDebInfo;MinSizeRel DESTINATION "${PROJECTM_LIB_DIR}/pkgconfig" @@ -39,7 +39,7 @@ macro(GENERATE_PKG_CONFIG_FILES target package_name) set(PKGCONFIG_PROJECTM_LIBRARY "${_lib_name}${CMAKE_DEBUG_POSTFIX}") set(PKGCONFIG_PACKAGE_REQUIREMENTS "${PKGCONFIG_PACKAGE_REQUIREMENTS_ALL} ${PKGCONFIG_PACKAGE_REQUIREMENTS_DEBUG}") - configure_file(${CMAKE_SOURCE_DIR}/cmake/pkgconfig-file.in "${CMAKE_CURRENT_BINARY_DIR}/${package_name}-debug.pc" @ONLY) + configure_file(${PROJECTM_SOURCE_DIR}/cmake/pkgconfig-file.in "${CMAKE_CURRENT_BINARY_DIR}/${package_name}-debug.pc" @ONLY) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${package_name}-debug.pc" CONFIGURATIONS Debug DESTINATION "${PROJECTM_LIB_DIR}/pkgconfig" diff --git a/features.cmake b/features.cmake index 2659b816e..f0c90bbea 100644 --- a/features.cmake +++ b/features.cmake @@ -80,9 +80,9 @@ check_include_files("${_std_c_headers}" STDC_HEADERS LANGUAGE C) unset(_std_c_headers) # Create global configuration header -file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/include") -configure_file(config.h.cmake.in "${CMAKE_BINARY_DIR}/include/config.h") -include_directories("${CMAKE_BINARY_DIR}/include") +file(MAKE_DIRECTORY "${PROJECTM_BINARY_DIR}/include") +configure_file(config.h.cmake.in "${PROJECTM_BINARY_DIR}/include/config.h") +include_directories("${PROJECTM_BINARY_DIR}/include") # Force-include the file in all targets if(MSVC) diff --git a/src/api/CMakeLists.txt b/src/api/CMakeLists.txt index 15e2be072..656f1529c 100644 --- a/src/api/CMakeLists.txt +++ b/src/api/CMakeLists.txt @@ -37,22 +37,26 @@ generate_export_header(projectM_api add_library(libprojectM::API ALIAS projectM_api) -install(TARGETS projectM_api - EXPORT libprojectMTargets - LIBRARY DESTINATION "${PROJECTM_LIB_DIR}" COMPONENT Runtime - RUNTIME DESTINATION "${PROJECTM_LIB_DIR}" COMPONENT Runtime - ARCHIVE DESTINATION "${PROJECTM_LIB_DIR}" COMPONENT Devel - PUBLIC_HEADER DESTINATION "${PROJECTM_INCLUDE_DIR}/projectM-4" COMPONENT Devel - ) +if(ENABLE_INSTALL) -install(FILES - "${CMAKE_CURRENT_BINARY_DIR}/include/projectM-4/projectM_export.h" - "${CMAKE_CURRENT_BINARY_DIR}/include/projectM-4/version.h" - DESTINATION "${PROJECTM_INCLUDE_DIR}/projectM-4" - COMPONENT Devel - ) + install(TARGETS projectM_api + EXPORT libprojectMTargets + LIBRARY DESTINATION "${PROJECTM_LIB_DIR}" COMPONENT Runtime + RUNTIME DESTINATION "${PROJECTM_LIB_DIR}" COMPONENT Runtime + ARCHIVE DESTINATION "${PROJECTM_LIB_DIR}" COMPONENT Devel + PUBLIC_HEADER DESTINATION "${PROJECTM_INCLUDE_DIR}/projectM-4" COMPONENT Devel + ) -install(DIRECTORY include/projectM-4 - DESTINATION "${PROJECTM_INCLUDE_DIR}" - COMPONENT Devel - ) + install(FILES + "${CMAKE_CURRENT_BINARY_DIR}/include/projectM-4/projectM_export.h" + "${CMAKE_CURRENT_BINARY_DIR}/include/projectM-4/version.h" + DESTINATION "${PROJECTM_INCLUDE_DIR}/projectM-4" + COMPONENT Devel + ) + + install(DIRECTORY include/projectM-4 + DESTINATION "${PROJECTM_INCLUDE_DIR}" + COMPONENT Devel + ) + +endif() \ No newline at end of file diff --git a/src/libprojectM/CMakeLists.txt b/src/libprojectM/CMakeLists.txt index 2e50e2926..077be738f 100644 --- a/src/libprojectM/CMakeLists.txt +++ b/src/libprojectM/CMakeLists.txt @@ -4,7 +4,7 @@ add_compile_definitions( $,NOMINMAX,> $,WIN32_LEAN_AND_MEAN,> $,STBI_NO_DDS,> -) + ) if(CMAKE_SYSTEM_NAME STREQUAL "Windows") # dirent.h support @@ -59,10 +59,10 @@ endif() target_include_directories(projectM_main PRIVATE - "${CMAKE_SOURCE_DIR}/src" + "${PROJECTM_SOURCE_DIR}/src" "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/Renderer" - "${CMAKE_SOURCE_DIR}/vendor/hlslparser/src" + "${PROJECTM_SOURCE_DIR}/vendor/hlslparser/src" "${CMAKE_CURRENT_SOURCE_DIR}/MilkdropPreset" "${MSVC_EXTRA_INCLUDE_DIR}" ) @@ -92,9 +92,9 @@ target_link_libraries(projectM if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") target_link_libraries(projectM - PUBLIC - "-framework CoreFoundation" - ) + PUBLIC + "-framework CoreFoundation" + ) endif() if(ENABLE_LLVM) @@ -120,9 +120,9 @@ set_target_properties(projectM PROPERTIES if(BUILD_SHARED_LIBS) target_compile_definitions(projectM_main - PRIVATE - projectM_api_EXPORTS - ) + PRIVATE + projectM_api_EXPORTS + ) target_link_libraries(projectM PUBLIC @@ -130,9 +130,9 @@ if(BUILD_SHARED_LIBS) ) else() target_compile_definitions(projectM_main - PUBLIC - PROJECTM_STATIC_DEFINE - ) + PUBLIC + PROJECTM_STATIC_DEFINE + ) set_target_properties(projectM PROPERTIES OUTPUT_NAME $,libprojectM,projectM> @@ -142,117 +142,121 @@ endif() add_library(libprojectM::projectM ALIAS projectM) -install(TARGETS projectM - EXPORT libprojectMTargets - LIBRARY DESTINATION "${PROJECTM_LIB_DIR}" COMPONENT Runtime - RUNTIME DESTINATION "${PROJECTM_LIB_DIR}" COMPONENT Runtime - ARCHIVE DESTINATION "${PROJECTM_LIB_DIR}" COMPONENT Devel - PUBLIC_HEADER DESTINATION "${PROJECTM_INCLUDE_DIR}/libprojectM" COMPONENT Devel - ) +if(ENABLE_INSTALL) -if(ENABLE_CXX_INTERFACE) - if(ENABLE_THREADING) + install(TARGETS projectM + EXPORT libprojectMTargets + LIBRARY DESTINATION "${PROJECTM_LIB_DIR}" COMPONENT Runtime + RUNTIME DESTINATION "${PROJECTM_LIB_DIR}" COMPONENT Runtime + ARCHIVE DESTINATION "${PROJECTM_LIB_DIR}" COMPONENT Devel + PUBLIC_HEADER DESTINATION "${PROJECTM_INCLUDE_DIR}/libprojectM" COMPONENT Devel + ) + + if(ENABLE_CXX_INTERFACE) + if(ENABLE_THREADING) + target_compile_definitions(projectM + INTERFACE + PROJECTM_USE_THREADS + ) + endif() + + install(FILES + Audio/PCM.hpp + ProjectM.hpp + DESTINATION "${PROJECTM_INCLUDE_DIR}/projectM-4" + COMPONENT Devel + ) + else() + # Set PROJECTM_STATIC_EXPORT for C++ implementations to use project default visibility + # and no dllimport/dllexport. + set_source_files_properties(ProjectM.cpp Audio/PCM.cpp Audio/FrameAudioData.cpp PROPERTIES + COMPILE_DEFINITIONS PROJECTM_STATIC_DEFINE + ) target_compile_definitions(projectM INTERFACE - PROJECTM_USE_THREADS + PROJECTM_STATIC_DEFINE ) endif() + + # CMake target exports + + # For use from a local projectM build tree (without installing) + export(TARGETS + projectM_api + projectM + NAMESPACE libprojectM:: + FILE projectM-exports.cmake + ) + + + # For use from an installed package (system install, vcpkg, homebrew etc.) + include(CMakePackageConfigHelpers) + + write_basic_package_version_file( + "${CMAKE_CURRENT_BINARY_DIR}/libprojectM/projectM4ConfigVersion.cmake" + VERSION ${PROJECT_VERSION} + COMPATIBILITY AnyNewerVersion + ) + + configure_package_config_file(projectM4Config.cmake.in + "${CMAKE_CURRENT_BINARY_DIR}/libprojectM/projectM4Config.cmake" + INSTALL_DESTINATION "${PROJECTM_LIB_DIR}/cmake/projectM4" + PATH_VARS PROJECTM_BIN_DIR PROJECTM_INCLUDE_DIR + ) + install(FILES - Audio/PCM.hpp - ProjectM.hpp - DESTINATION "${PROJECTM_INCLUDE_DIR}/projectM-4" - COMPONENT Devel - ) -else() - # Set PROJECTM_STATIC_EXPORT for C++ implementations to use project default visibility - # and no dllimport/dllexport. - set_source_files_properties(ProjectM.cpp Audio/PCM.cpp Audio/FrameAudioData.cpp PROPERTIES - COMPILE_DEFINITIONS PROJECTM_STATIC_DEFINE - ) - target_compile_definitions(projectM - INTERFACE - PROJECTM_STATIC_DEFINE - ) -endif() - - -# CMake target exports - -# For use from a local projectM build tree (without installing) -export(TARGETS - projectM_api - projectM - NAMESPACE libprojectM:: - FILE projectM-exports.cmake - ) - - -# For use from an installed package (system install, vcpkg, homebrew etc.) -include(CMakePackageConfigHelpers) - -write_basic_package_version_file( - "${CMAKE_CURRENT_BINARY_DIR}/libprojectM/projectM4ConfigVersion.cmake" - VERSION ${PROJECT_VERSION} - COMPATIBILITY AnyNewerVersion -) - -configure_package_config_file(projectM4Config.cmake.in - "${CMAKE_CURRENT_BINARY_DIR}/libprojectM/projectM4Config.cmake" - INSTALL_DESTINATION "${PROJECTM_LIB_DIR}/cmake/projectM4" - PATH_VARS PROJECTM_BIN_DIR PROJECTM_INCLUDE_DIR - ) - -install(FILES - "${CMAKE_CURRENT_BINARY_DIR}/libprojectM/projectM4ConfigVersion.cmake" - "${CMAKE_CURRENT_BINARY_DIR}/libprojectM/projectM4Config.cmake" - DESTINATION "${PROJECTM_LIB_DIR}/cmake/projectM4" - COMPONENT Devel - ) - -if(NOT ENABLE_EMSCRIPTEN AND ENABLE_GLES) - install(FILES - "${CMAKE_SOURCE_DIR}/cmake/gles/FindOpenGL.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/libprojectM/projectM4ConfigVersion.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/libprojectM/projectM4Config.cmake" DESTINATION "${PROJECTM_LIB_DIR}/cmake/projectM4" COMPONENT Devel ) -endif() -if(ENABLE_LLVM) - install(FILES - "${CMAKE_SOURCE_DIR}/cmake/gles/FindLLVM.cmake" - DESTINATION "${PROJECTM_LIB_DIR}/cmake/projectM4" - COMPONENT Devel - ) -endif() - - -install(EXPORT libprojectMTargets - FILE projectM4Targets.cmake - NAMESPACE libprojectM:: - DESTINATION "${PROJECTM_LIB_DIR}/cmake/projectM4" - COMPONENT Devel - ) - -# pkg-config export, only supported on UNIX systems. -if(UNIX) - include(GeneratePkgConfigFiles) + if(NOT ENABLE_EMSCRIPTEN AND ENABLE_GLES) + install(FILES + "${PROJECTM_SOURCE_DIR}/cmake/gles/FindOpenGL.cmake" + DESTINATION "${PROJECTM_LIB_DIR}/cmake/projectM4" + COMPONENT Devel + ) + endif() if(ENABLE_LLVM) - set(PKGCONFIG_LIBS "${PKGCONFIG_LIBS} -L${LLVM_LIB_DIR} ${LLVM_LIBRARIES}") + install(FILES + "${PROJECTM_SOURCE_DIR}/cmake/gles/FindLLVM.cmake" + DESTINATION "${PROJECTM_LIB_DIR}/cmake/projectM4" + COMPONENT Devel + ) endif() - if(ENABLE_OPENMP) - set(PKGCONFIG_FLAGS "${PKGCONFIG_FLAGS} ${OpenMP_CXX_FLAGS}") - foreach(_library ${OpenMP_CXX_LIBRARIES}) - set(PKGCONFIG_LIBS "${PKGCONFIG_LIBS} -l${_library}") - endforeach() + + install(EXPORT libprojectMTargets + FILE projectM4Targets.cmake + NAMESPACE libprojectM:: + DESTINATION "${PROJECTM_LIB_DIR}/cmake/projectM4" + COMPONENT Devel + ) + + # pkg-config export, only supported on UNIX systems. + if(UNIX) + include(GeneratePkgConfigFiles) + + if(ENABLE_LLVM) + set(PKGCONFIG_LIBS "${PKGCONFIG_LIBS} -L${LLVM_LIB_DIR} ${LLVM_LIBRARIES}") + endif() + + if(ENABLE_OPENMP) + set(PKGCONFIG_FLAGS "${PKGCONFIG_FLAGS} ${OpenMP_CXX_FLAGS}") + foreach(_library ${OpenMP_CXX_LIBRARIES}) + set(PKGCONFIG_LIBS "${PKGCONFIG_LIBS} -l${_library}") + endforeach() + endif() + + set(PKGCONFIG_PACKAGE_NAME "projectM-4") + set(PKGCONFIG_PACKAGE_DESCRIPTION "projectM Music Visualizer") + set(PKGCONFIG_PACKAGE_REQUIREMENTS_ALL "opengl") + + generate_pkg_config_files(projectM projectM-4) + endif() - set(PKGCONFIG_PACKAGE_NAME "projectM-4") - set(PKGCONFIG_PACKAGE_DESCRIPTION "projectM Music Visualizer") - set(PKGCONFIG_PACKAGE_REQUIREMENTS_ALL "opengl") - - generate_pkg_config_files(projectM projectM-4) - endif() diff --git a/src/playlist/CMakeLists.txt b/src/playlist/CMakeLists.txt index 546a2268c..512efb48e 100644 --- a/src/playlist/CMakeLists.txt +++ b/src/playlist/CMakeLists.txt @@ -94,63 +94,67 @@ include(FilesystemSupport.cmake) add_library(libprojectM::playlist ALIAS projectM_playlist) -install(TARGETS projectM_playlist - EXPORT libprojectMPlaylist - LIBRARY DESTINATION "${PROJECTM_LIB_DIR}" COMPONENT Runtime - RUNTIME DESTINATION "${PROJECTM_LIB_DIR}" COMPONENT Runtime - ARCHIVE DESTINATION "${PROJECTM_LIB_DIR}" COMPONENT Devel - PUBLIC_HEADER DESTINATION "${PROJECTM_INCLUDE_DIR}/projectM-4" COMPONENT Devel - ) +if(ENABLE_INSTALL) -install(FILES - "${CMAKE_CURRENT_BINARY_DIR}/include/projectM-4/projectM_playlist_export.h" - DESTINATION "${PROJECTM_INCLUDE_DIR}/projectM-4" - COMPONENT Devel - ) + install(TARGETS projectM_playlist + EXPORT libprojectMPlaylist + LIBRARY DESTINATION "${PROJECTM_LIB_DIR}" COMPONENT Runtime + RUNTIME DESTINATION "${PROJECTM_LIB_DIR}" COMPONENT Runtime + ARCHIVE DESTINATION "${PROJECTM_LIB_DIR}" COMPONENT Devel + PUBLIC_HEADER DESTINATION "${PROJECTM_INCLUDE_DIR}/projectM-4" COMPONENT Devel + ) -install(DIRECTORY api/projectM-4 - DESTINATION "${PROJECTM_INCLUDE_DIR}" - COMPONENT Devel - ) + install(FILES + "${CMAKE_CURRENT_BINARY_DIR}/include/projectM-4/projectM_playlist_export.h" + DESTINATION "${PROJECTM_INCLUDE_DIR}/projectM-4" + COMPONENT Devel + ) + + install(DIRECTORY api/projectM-4 + DESTINATION "${PROJECTM_INCLUDE_DIR}" + COMPONENT Devel + ) -# For use from an installed package (system install, vcpkg, homebrew etc.) -include(CMakePackageConfigHelpers) + # For use from an installed package (system install, vcpkg, homebrew etc.) + include(CMakePackageConfigHelpers) -write_basic_package_version_file( - "${CMAKE_CURRENT_BINARY_DIR}/libprojectMPlaylist/projectM4PlaylistConfigVersion.cmake" - VERSION ${PROJECT_VERSION} - COMPATIBILITY AnyNewerVersion -) + write_basic_package_version_file( + "${CMAKE_CURRENT_BINARY_DIR}/libprojectMPlaylist/projectM4PlaylistConfigVersion.cmake" + VERSION ${PROJECT_VERSION} + COMPATIBILITY AnyNewerVersion + ) -configure_package_config_file(projectM4PlaylistConfig.cmake.in - "${CMAKE_CURRENT_BINARY_DIR}/libprojectMPlaylist/projectM4PlaylistConfig.cmake" - INSTALL_DESTINATION "${PROJECTM_LIB_DIR}/cmake/projectM4Playlist" - PATH_VARS PROJECTM_BIN_DIR PROJECTM_INCLUDE_DIR - ) + configure_package_config_file(projectM4PlaylistConfig.cmake.in + "${CMAKE_CURRENT_BINARY_DIR}/libprojectMPlaylist/projectM4PlaylistConfig.cmake" + INSTALL_DESTINATION "${PROJECTM_LIB_DIR}/cmake/projectM4Playlist" + PATH_VARS PROJECTM_BIN_DIR PROJECTM_INCLUDE_DIR + ) -install(FILES - "${CMAKE_CURRENT_BINARY_DIR}/libprojectMPlaylist/projectM4PlaylistConfigVersion.cmake" - "${CMAKE_CURRENT_BINARY_DIR}/libprojectMPlaylist/projectM4PlaylistConfig.cmake" - DESTINATION "${PROJECTM_LIB_DIR}/cmake/projectM4Playlist" - COMPONENT Devel - ) + install(FILES + "${CMAKE_CURRENT_BINARY_DIR}/libprojectMPlaylist/projectM4PlaylistConfigVersion.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/libprojectMPlaylist/projectM4PlaylistConfig.cmake" + DESTINATION "${PROJECTM_LIB_DIR}/cmake/projectM4Playlist" + COMPONENT Devel + ) -install(EXPORT libprojectMPlaylist - FILE projectM4PlaylistTargets.cmake - NAMESPACE libprojectM:: - DESTINATION "${PROJECTM_LIB_DIR}/cmake/projectM4Playlist" - COMPONENT Devel - ) + install(EXPORT libprojectMPlaylist + FILE projectM4PlaylistTargets.cmake + NAMESPACE libprojectM:: + DESTINATION "${PROJECTM_LIB_DIR}/cmake/projectM4Playlist" + COMPONENT Devel + ) -# pkg-config export, only supported on UNIX systems. -if(UNIX) - include(GeneratePkgConfigFiles) + # pkg-config export, only supported on UNIX systems. + if(UNIX) + include(GeneratePkgConfigFiles) - set(PKGCONFIG_PACKAGE_NAME "projectM-4-playlist") - set(PKGCONFIG_PACKAGE_DESCRIPTION "projectM Playlist Library") - set(PKGCONFIG_PACKAGE_REQUIREMENTS_RELEASE "projectM-4") - set(PKGCONFIG_PACKAGE_REQUIREMENTS_DEBUG "projectM-4-debug") + set(PKGCONFIG_PACKAGE_NAME "projectM-4-playlist") + set(PKGCONFIG_PACKAGE_DESCRIPTION "projectM Playlist Library") + set(PKGCONFIG_PACKAGE_REQUIREMENTS_RELEASE "projectM-4") + set(PKGCONFIG_PACKAGE_REQUIREMENTS_DEBUG "projectM-4-debug") + + generate_pkg_config_files(projectM_playlist projectM-4-playlist) + endif() - generate_pkg_config_files(projectM_playlist projectM-4-playlist) endif() diff --git a/tests/libprojectM/CMakeLists.txt b/tests/libprojectM/CMakeLists.txt index fc4768df6..4dc90eae8 100644 --- a/tests/libprojectM/CMakeLists.txt +++ b/tests/libprojectM/CMakeLists.txt @@ -19,8 +19,8 @@ target_compile_definitions(projectM-unittest # Test includes a header file from libprojectM with its full path in the source dir. target_include_directories(projectM-unittest PRIVATE - "${CMAKE_SOURCE_DIR}/src/libprojectM" - "${CMAKE_SOURCE_DIR}" + "${PROJECTM_SOURCE_DIR}/src/libprojectM" + "${PROJECTM_SOURCE_DIR}" ) target_link_libraries(projectM-unittest