From 6900c9128e4c27251e3025b91094b07cfc7d2239 Mon Sep 17 00:00:00 2001
From: myd7349 <myd7349@gmail.com>
Date: Sun, 27 Nov 2022 19:37:24 +0800
Subject: [PATCH 1/2] improve CMakeLists.txt

- upgrade CMake minimal version;
- define three options to give users more control over the build process;
- fix Win32 dynamic build by exporting useful functions;
---
 CMakeLists.txt | 82 ++++++++++++++++++++++++++++++++++++++------------
 1 file changed, 63 insertions(+), 19 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1408188..ea389b4 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,34 +1,78 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+CMAKE_MINIMUM_REQUIRED(VERSION 2.8.12)
+
+if(DEFINED PROJECT_NAME)
+    set(KCP_IS_TOP_PROJECT OFF)
+else()
+    set(KCP_IS_TOP_PROJECT ON)
+endif()
 
 project(kcp LANGUAGES C)
 
-include(CTest)
-include(GNUInstallDirs)
+cmake_policy(SET CMP0054 NEW)
 
-add_library(kcp STATIC ikcp.c)
-add_library(kcp_shared SHARED ikcp.c)
+option(KCP_BUILD_SHARED_LIBS "Build KCP as a shared lib" OFF)
+option(KCP_BUILD_INSTALL "Build install target" ${KCP_IS_TOP_PROJECT})
+option(KCP_BUILD_TESTS "Build tests" ${KCP_IS_TOP_PROJECT})
 
-set_property(TARGET kcp_shared PROPERTY LIBRARY_OUTPUT_NAME kcp)
+if(KCP_BUILD_SHARED_LIBS)
+    if(WIN32)
+        set(exports_def_file "${CMAKE_CURRENT_BINARY_DIR}/exports.def")
+        set(exports_def_contents
+"EXPORTS 
+    ikcp_create
+    ikcp_release
+    ikcp_setoutput
+    ikcp_recv
+    ikcp_send
+    ikcp_update
+    ikcp_check
+    ikcp_input
+    ikcp_flush
+    ikcp_peeksize
+    ikcp_setmtu
+    ikcp_wndsize
+    ikcp_waitsnd
+    ikcp_nodelay
+    ikcp_log
+    ikcp_allocator
+    ikcp_getconv
+")
 
-install(FILES ikcp.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
+        file(WRITE "${exports_def_file}" "${exports_def_contents}")
+        add_library(kcp SHARED ikcp.h ikcp.c "${exports_def_file}")
+    else()
+        add_library(kcp SHARED ikcp.h ikcp.c)
+    endif()
+else()
+    add_library(kcp STATIC ikcp.h ikcp.c)
+endif()
 
-install(TARGETS kcp_shared
-    EXPORT kcp-targets
-    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
-    INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
-)
+if(KCP_BUILD_INSTALL)
+    include(GNUInstallDirs)
 
-install(EXPORT kcp-targets
-    FILE kcp-config.cmake
-    NAMESPACE kcp::
-    DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/kcp
-)
+    set_target_properties(kcp PROPERTIES PUBLIC_HEADER ikcp.h)
 
-if (BUILD_TESTING)
+    install(TARGETS kcp
+        EXPORT kcp-targets
+        PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
+        ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
+        LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
+        RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
+        INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
+    )
+
+    install(EXPORT kcp-targets
+        FILE kcp-config.cmake
+        NAMESPACE kcp::
+        DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/kcp
+    )
+endif()
+
+if(KCP_BUILD_TESTS)
     enable_language(CXX)
     
     add_executable(kcp_test test.cpp)
     if(MSVC AND NOT (MSVC_VERSION LESS 1900))
         target_compile_options(kcp_test PRIVATE /utf-8)
     endif()
-endif ()
+endif()

From 3c9fd966f9697b1316746cca7d733e60c87a3da7 Mon Sep 17 00:00:00 2001
From: myd7349 <myd7349@gmail.com>
Date: Mon, 28 Nov 2022 21:23:26 +0800
Subject: [PATCH 2/2] simplify

---
 CMakeLists.txt | 64 +++++++++++++++++++-------------------------------
 1 file changed, 24 insertions(+), 40 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index ea389b4..8d63c8a 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,23 +1,15 @@
 CMAKE_MINIMUM_REQUIRED(VERSION 2.8.12)
 
-if(DEFINED PROJECT_NAME)
-    set(KCP_IS_TOP_PROJECT OFF)
-else()
-    set(KCP_IS_TOP_PROJECT ON)
-endif()
-
 project(kcp LANGUAGES C)
 
+include(CTest)
+include(GNUInstallDirs)
+
 cmake_policy(SET CMP0054 NEW)
 
-option(KCP_BUILD_SHARED_LIBS "Build KCP as a shared lib" OFF)
-option(KCP_BUILD_INSTALL "Build install target" ${KCP_IS_TOP_PROJECT})
-option(KCP_BUILD_TESTS "Build tests" ${KCP_IS_TOP_PROJECT})
-
-if(KCP_BUILD_SHARED_LIBS)
-    if(WIN32)
-        set(exports_def_file "${CMAKE_CURRENT_BINARY_DIR}/exports.def")
-        set(exports_def_contents
+if(BUILD_SHARED_LIBS AND WIN32)
+    set(exports_def_file "${CMAKE_CURRENT_BINARY_DIR}/exports.def")
+    set(exports_def_contents
 "EXPORTS 
     ikcp_create
     ikcp_release
@@ -38,39 +30,31 @@ if(KCP_BUILD_SHARED_LIBS)
     ikcp_getconv
 ")
 
-        file(WRITE "${exports_def_file}" "${exports_def_contents}")
-        add_library(kcp SHARED ikcp.h ikcp.c "${exports_def_file}")
-    else()
-        add_library(kcp SHARED ikcp.h ikcp.c)
-    endif()
+    file(WRITE "${exports_def_file}" "${exports_def_contents}")
+    add_library(kcp ikcp.c "${exports_def_file}")
 else()
-    add_library(kcp STATIC ikcp.h ikcp.c)
+    add_library(kcp ikcp.c)
 endif()
 
-if(KCP_BUILD_INSTALL)
-    include(GNUInstallDirs)
+install(FILES ikcp.h DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}")
 
-    set_target_properties(kcp PROPERTIES PUBLIC_HEADER ikcp.h)
+install(TARGETS kcp
+    EXPORT kcp-targets
+    ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
+    LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
+    RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
+    INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
+)
 
-    install(TARGETS kcp
-        EXPORT kcp-targets
-        PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
-        ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
-        LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
-        RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
-        INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
-    )
+install(EXPORT kcp-targets
+    FILE kcp-config.cmake
+    NAMESPACE kcp::
+    DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/kcp
+)
 
-    install(EXPORT kcp-targets
-        FILE kcp-config.cmake
-        NAMESPACE kcp::
-        DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/kcp
-    )
-endif()
-
-if(KCP_BUILD_TESTS)
+if(BUILD_TESTING)
     enable_language(CXX)
-    
+
     add_executable(kcp_test test.cpp)
     if(MSVC AND NOT (MSVC_VERSION LESS 1900))
         target_compile_options(kcp_test PRIVATE /utf-8)