$OpenBSD: patch-CMakeLists_txt,v 1.2 2019/10/02 19:00:49 rsadowski Exp $

Add options for building and installing shared, static libraries

Index: CMakeLists.txt
--- CMakeLists.txt.orig
+++ CMakeLists.txt
@@ -4,6 +4,8 @@ project(matroska VERSION 1.5.0)
 
 option(DISABLE_PKGCONFIG "Disable PkgConfig module generation" OFF)
 option(DISABLE_CMAKE_CONFIG "Disable CMake package config module generation" OFF)
+option(DISABLE_SHARED_LIBS "Disable build and install shared libraries" OFF)
+option(DISABLE_STATIC_LIBS "Disable build and install static libraries" OFF)
 
 find_package(Ebml 1.3.7 REQUIRED)
 
@@ -59,28 +61,44 @@ set (libmatroska_C_PUBLIC_HEADERS
   matroska/c/libmatroska.h
   matroska/c/libmatroska_t.h)
 
-add_library(matroska ${libmatroska_SOURCES} ${limatroska_PUBLIC_HEADERS} ${libmatroska_C_PUBLIC_HEADERS})
-target_link_libraries(matroska PUBLIC ebml)
-set_target_properties(matroska PROPERTIES
-  VERSION 6.0.0
-  SOVERSION 6)
-target_include_directories(matroska PUBLIC
-  $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
-  $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
-if(MSVC)
-  target_compile_definitions(matroska PRIVATE _CRT_SECURE_NO_WARNINGS)
+foreach (TYPE IN ITEMS STATIC SHARED)
+  if (NOT DISABLE_${TYPE}_LIBS)
+    string (TOLOWER "${TYPE}" type)
+    add_library(matroska-${type} ${TYPE} ${libmatroska_SOURCES} ${libmatroska_PUBLIC_HEADERS} ${libmatroska_C_PUBLIC_HEADERS})
+    set_target_properties(matroska-${type} PROPERTIES
+      VERSION 6.0.0
+      SOVERSION 6)
+    target_link_libraries(matroska-${type} PUBLIC ebml)
+    target_include_directories(matroska-${type} PUBLIC
+      $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
+      $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
+  endif()
+endforeach()
+
+if(NOT DISABLE_SHARED_LIBS)
+  if(MSVC)
+    target_compile_definitions(matroska-shared PRIVATE _CRT_SECURE_NO_WARNINGS)
+  endif()
+
+  target_compile_definitions(matroska-shared PUBLIC MATROSKA_DLL)
+  set_target_properties(matroska-shared PROPERTIES DEFINE_SYMBOL "MATROSKA_DLL_EXPORT" OUTPUT_NAME matroska)
+
+  install(TARGETS matroska-shared
+    EXPORT MatroskaTargets
+    RENAME matroska
+    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
+    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
 endif()
-if(BUILD_SHARED_LIBS)
-  target_compile_definitions(matroska PUBLIC MATROSKA_DLL)
-  set_target_properties(matroska PROPERTIES DEFINE_SYMBOL "MATROSKA_DLL_EXPORT")
+
+if(NOT DISABLE_STATIC_LIBS)
+  set_target_properties(matroska-static PROPERTIES OUTPUT_NAME matroska)
+  install(TARGETS matroska-static
+    RENAME matroska
+    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
+    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
 endif()
 
-install(TARGETS matroska
-  EXPORT MatroskaTargets
-  RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
-  ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
-  LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
-
 install(FILES ${libmatroska_PUBLIC_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/matroska)
 install(FILES ${libmatroska_C_PUBLIC_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/matroska/c)
 
@@ -102,9 +120,12 @@ if(NOT DISABLE_CMAKE_CONFIG)
   endif()
   include(CMakePackageConfigHelpers)
   write_basic_package_version_file(MatroskaConfigVersion.cmake COMPATIBILITY SameMajorVersion)
-  install(EXPORT MatroskaTargets DESTINATION ${CMAKE_INSTALL_PACKAGEDIR})
+  if(NOT DISABLE_SHARED_LIBS)
+    install(EXPORT MatroskaTargets DESTINATION ${CMAKE_INSTALL_PACKAGEDIR})
+  endif()
   install(FILES
     ${CMAKE_CURRENT_SOURCE_DIR}/MatroskaConfig.cmake
     ${CMAKE_CURRENT_BINARY_DIR}/MatroskaConfigVersion.cmake
     DESTINATION ${CMAKE_INSTALL_PACKAGEDIR})
 endif()
+
