$OpenBSD: patch-CMakeLists_txt,v 1.1 2019/04/28 08:29:45 rsadowski Exp $

Add options for building and installing shared, static libraries

Index: CMakeLists.txt
--- CMakeLists.txt.orig
+++ CMakeLists.txt
@@ -4,6 +4,8 @@ project(ebml VERSION 1.3.7)
 
 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)
 
 include(GNUInstallDirs)
 
@@ -63,40 +65,54 @@ set(libebml_PUBLIC_HEADERS
 
 set(libebml_C_PUBLIC_HEADERS ebml/c/libebml_t.h)
 
-add_library(ebml ${libebml_SOURCES} ${libebml_PUBLIC_HEADERS} ${libebml_C_PUBLIC_HEADERS})
-if(WIN32)
-  include(CheckIncludeFile)
-  check_include_file(winapifamily.h HAVE_WINAPIFAMILY_H)
-  if(HAVE_WINAPIFAMILY_H)
-    target_compile_definitions(ebml PUBLIC HAVE_WINAPIFAMILY_H)
-  endif()
+foreach (TYPE IN ITEMS STATIC SHARED)
+  if (NOT DISABLE_${TYPE}_LIBS)
+    string (TOLOWER "${TYPE}" type)
+    add_library(ebml-${type} ${TYPE} ${libebml_SOURCES} ${libebml_PUBLIC_HEADERS} ${libebml_C_PUBLIC_HEADERS})
+    set_target_properties(ebml-${type} PROPERTIES
+      VERSION 4.0.0
+      SOVERSION 4)
+    target_include_directories(ebml-${type} PUBLIC
+      $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
+      $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
+    if(MSVC)
+      target_compile_definitions(ebml-${type} PRIVATE _CRT_SECURE_NO_WARNINGS)
+    endif()
+    if(WIN32)
+      include(CheckIncludeFile)
+      check_include_file(winapifamily.h HAVE_WINAPIFAMILY_H)
+      if(HAVE_WINAPIFAMILY_H)
+        target_compile_definitions(ebml-${type} PUBLIC HAVE_WINAPIFAMILY_H)
+      endif()
 endif()
-set_target_properties(ebml PROPERTIES
-  VERSION 4.0.0
-  SOVERSION 4)
-target_include_directories(ebml PUBLIC
-  $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
-  $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
-if(MSVC)
-  target_compile_definitions(ebml PRIVATE _CRT_SECURE_NO_WARNINGS)
-endif()
-if(BUILD_SHARED_LIBS)
-  set_target_properties(ebml
+  endif()
+endforeach()
+
+if(NOT DISABLE_SHARED_LIBS)
+  set_target_properties(ebml-shared
     PROPERTIES
     DEFINE_SYMBOL "EBML_DLL_EXPORT"
     C_VISIBILITY_PRESET hidden
-    VISIBILITY_INLINES_HIDDEN 1)
-  target_compile_definitions(ebml
+    VISIBILITY_INLINES_HIDDEN 1
+    OUTPUT_NAME ebml)
+  target_compile_definitions(ebml-shared
     PUBLIC EBML_DLL
     PRIVATE EBML_DLL_EXPORT)
+  install(TARGETS ebml-shared
+    EXPORT EbmlTargets
+    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
+    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
 endif()
 
-install(TARGETS ebml
-  EXPORT EbmlTargets
-  RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
-  ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
-  LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
+if(NOT DISABLE_STATIC_LIBS)
+  set_target_properties(ebml-static PROPERTIES OUTPUT_NAME ebml)
+  install(TARGETS ebml-static
+    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
+    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
+endif()
 
+
 install(FILES ${libebml_PUBLIC_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/ebml)
 install(FILES ${libebml_C_PUBLIC_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/ebml/c)
 
@@ -118,7 +134,9 @@ if(NOT DISABLE_CMAKE_CONFIG)
   endif()
   include(CMakePackageConfigHelpers)
   write_basic_package_version_file(EbmlConfigVersion.cmake COMPATIBILITY SameMajorVersion)
+if(NOT DISABLE_SHARED_LIBS)
   install(EXPORT EbmlTargets DESTINATION ${CMAKE_INSTALL_PACKAGEDIR})
+endif()
   install(FILES
     ${CMAKE_CURRENT_SOURCE_DIR}/EbmlConfig.cmake
     ${CMAKE_CURRENT_BINARY_DIR}/EbmlConfigVersion.cmake
