Skip to content

Commit

Permalink
CMake: Package export
Browse files Browse the repository at this point in the history
  • Loading branch information
dbarkar authored and Wohlstand committed Mar 3, 2023
1 parent 71cd1fd commit a48f3f7
Show file tree
Hide file tree
Showing 2 changed files with 68 additions and 11 deletions.
46 changes: 35 additions & 11 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -155,8 +155,6 @@ if(WIN32)
option(WITH_WINMMDRV "Build a WinMM MIDI driver" OFF)
endif()

set(libOPNMIDI_INSTALLS)

include_directories(${libOPNMIDI_SOURCE_DIR}/include)
include_directories(${libOPNMIDI_SOURCE_DIR}/src/)
link_directories(${libOPNMIDI_BINARY_DIR}/)
Expand Down Expand Up @@ -317,10 +315,9 @@ if(libOPNMIDI_STATIC OR WITH_VLC_PLUGIN)
else()
set_target_properties(OPNMIDI_static PROPERTIES OUTPUT_NAME OPNMIDI)
endif()
target_include_directories(OPNMIDI_static PUBLIC ${libOPNMIDI_SOURCE_DIR}/include)
target_include_directories(OPNMIDI_static PUBLIC $<BUILD_INTERFACE:${libOPNMIDI_SOURCE_DIR}/include> $<INSTALL_INTERFACE:include>)
set_legacy_standard(OPNMIDI_static)
set_visibility_hidden(OPNMIDI_static)
list(APPEND libOPNMIDI_INSTALLS OPNMIDI_static)

# -fPIC thing
if(ENABLE_FPIC)
Expand All @@ -340,10 +337,9 @@ if(libOPNMIDI_SHARED)
VERSION ${libOPNMIDI_VERSION}
SOVERSION ${libOPNMIDI_VERSION_MAJOR}
)
target_include_directories(OPNMIDI_shared PUBLIC ${libOPNMIDI_SOURCE_DIR}/include)
target_include_directories(OPNMIDI_shared PUBLIC $<BUILD_INTERFACE:${libOPNMIDI_SOURCE_DIR}/include> $<INSTALL_INTERFACE:include>)
set_legacy_standard(OPNMIDI_shared)
set_visibility_hidden(OPNMIDI_shared)
list(APPEND libOPNMIDI_INSTALLS OPNMIDI_shared)

if(WIN32)
target_compile_definitions(OPNMIDI_shared PRIVATE "-DOPNMIDI_BUILD_DLL")
Expand Down Expand Up @@ -416,17 +412,45 @@ if(WITH_HQ_RESAMPLER)
endif()
endif()

install(TARGETS ${libOPNMIDI_INSTALLS}
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}")
if(libOPNMIDI_STATIC)
install(TARGETS OPNMIDI_static
EXPORT libOPNMIDIStaticTargets
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}")

install(EXPORT libOPNMIDIStaticTargets
FILE libOPNMIDI-static-targets.cmake
NAMESPACE libOPNMIDI::
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/libOPNMIDI")
endif()

if(libOPNMIDI_SHARED)
install(TARGETS OPNMIDI_shared
EXPORT libOPNMIDISharedTargets
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}")

install(EXPORT libOPNMIDISharedTargets
FILE libOPNMIDI-shared-targets.cmake
NAMESPACE libOPNMIDI::
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/libOPNMIDI")
endif()

install(FILES
include/opnmidi.h
#include/opnmidi.hpp # WIP
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}")

include(CMakePackageConfigHelpers)
configure_package_config_file(libOPNMIDI-config.cmake.in "${CMAKE_CURRENT_BINARY_DIR}/libOPNMIDI-config.cmake"
PATH_VARS CMAKE_INSTALL_PREFIX CMAKE_INSTALL_FULL_BINDIR CMAKE_INSTALL_FULL_INCLUDEDIR CMAKE_INSTALL_FULL_LIBDIR
INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/libOPNMIDI"
)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libOPNMIDI-config.cmake
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/libOPNMIDI")

if(WITH_EXTRA_BANKS AND NOT APPLE)
file(GLOB WOPN_FILES ${libOPNMIDI_SOURCE_DIR}/fm_banks/*.wopn)
install(FILES ${WOPN_FILES}
Expand Down
33 changes: 33 additions & 0 deletions libOPNMIDI-config.cmake.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
include(FeatureSummary)
set_package_properties(libOPNMIDI PROPERTIES
URL "https://github.com/Wohlstand/libOPNMIDI"
DESCRIPTION "A Software MIDI Synthesizer library with OPN2 (YM2612) emulator"
)

@PACKAGE_INIT@

if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/libOPNMIDI-shared-targets.cmake")
include("${CMAKE_CURRENT_LIST_DIR}/libOPNMIDI-shared-targets.cmake")
endif()
if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/libOPNMIDI-static-targets.cmake")
include("${CMAKE_CURRENT_LIST_DIR}/libOPNMIDI-static-targets.cmake")
endif()

if(TARGET libOPNMIDI::OPNMIDI_shared)
if(CMAKE_VERSION VERSION_LESS "3.18")
add_library(libOPNMIDI::OPNMIDI_IF INTERFACE IMPORTED)
set_target_properties(libOPNMIDI::OPNMIDI_IF PROPERTIES INTERFACE_LINK_LIBRARIES "libOPNMIDI::OPNMIDI_shared")
else()
add_library(libOPNMIDI::OPNMIDI_IF ALIAS libOPNMIDI::OPNMIDI_shared)
endif()
else()
if(CMAKE_VERSION VERSION_LESS "3.18")
add_library(libOPNMIDI::OPNMIDI_IF INTERFACE IMPORTED)
set_target_properties(libOPNMIDI::OPNMIDI_IF PROPERTIES INTERFACE_LINK_LIBRARIES "libOPNMIDI::OPNMIDI_static")
add_library(libOPNMIDI::OPNMIDI_IF_STATIC INTERFACE IMPORTED)
set_target_properties(libOPNMIDI::OPNMIDI_IF_STATIC PROPERTIES INTERFACE_LINK_LIBRARIES "libOPNMIDI::OPNMIDI_static")
else()
add_library(libOPNMIDI::OPNMIDI_IF ALIAS libOPNMIDI::OPNMIDI_static)
add_library(libOPNMIDI::OPNMIDI_IF_STATIC ALIAS libOPNMIDI::OPNMIDI_static)
endif()
endif()

0 comments on commit a48f3f7

Please sign in to comment.