From 4e955731d3a6ac344a593ee9d9c5d00982846adf Mon Sep 17 00:00:00 2001
From: Daan De Meyer <daan.j.demeyer@gmail.com>
Date: Fri, 14 Jun 2019 22:08:13 +0200
Subject: [PATCH] CMake improvements.

- Allow specifying shared or static with BUILD_SHARED_LIBS.
- Add include directories as PUBLIC to library targets.

This enables using ngtcp2 with CMake `add_subdirectory`.
---
 CMakeLists.txt     |  4 ++++
 lib/CMakeLists.txt | 19 ++++++++++++-------
 2 files changed, 16 insertions(+), 7 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 9c654418..134fdebb 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -23,6 +23,10 @@
 # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 cmake_minimum_required(VERSION 3.1)
+
+# Allow setting VISIBILITY_PRESET on static library targets without warning.
+cmake_policy(SET CMP0063 NEW)
+
 # XXX using 0.1.90 instead of 0.1.0-DEV
 project(ngtcp2 VERSION 0.1.90)
 
diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
index 1a07432c..b84aeff5 100644
--- a/lib/CMakeLists.txt
+++ b/lib/CMakeLists.txt
@@ -24,11 +24,6 @@
 
 add_subdirectory(includes)
 
-include_directories(
-  "${CMAKE_CURRENT_SOURCE_DIR}/includes"
-  "${CMAKE_CURRENT_BINARY_DIR}/includes"
-)
-
 add_definitions(-DBUILDING_NGTCP2)
 
 set(ngtcp2_SOURCES
@@ -61,22 +56,32 @@ set(ngtcp2_SOURCES
   ngtcp2_pv.c
 )
 
+set(ngtcp2_INCLUDE_DIRS
+  "${CMAKE_CURRENT_SOURCE_DIR}/includes"
+  "${CMAKE_CURRENT_BINARY_DIR}/includes"
+)
+
 # Public shared library
-add_library(ngtcp2 SHARED ${ngtcp2_SOURCES})
+add_library(ngtcp2 ${ngtcp2_SOURCES})
 set_target_properties(ngtcp2 PROPERTIES
   COMPILE_FLAGS "${WARNCFLAGS}"
   VERSION ${LT_VERSION} SOVERSION ${LT_SOVERSION}
   C_VISIBILITY_PRESET hidden
 )
 
+target_include_directories(ngtcp2 PUBLIC ${ngtcp2_INCLUDE_DIRS})
+if(NOT BUILD_SHARED_LIBS)
+  target_compile_definitions(ngtcp2 PUBLIC "-DNGTCP2_STATICLIB")
+endif()
+
 if(HAVE_CUNIT)
   # Static library (for unittests because of symbol visibility)
   add_library(ngtcp2_static STATIC ${ngtcp2_SOURCES})
   set_target_properties(ngtcp2_static PROPERTIES
     COMPILE_FLAGS "${WARNCFLAGS}"
     VERSION ${LT_VERSION} SOVERSION ${LT_SOVERSION}
-    ARCHIVE_OUTPUT_NAME ngtcp2
   )
+  target_include_directories(ngtcp2_static PUBLIC ${ngtcp2_INCLUDE_DIRS})
   target_compile_definitions(ngtcp2_static PUBLIC "-DNGTCP2_STATICLIB")
 endif()
 
-- 
GitLab