From 4095ab5a1593a61d0c050fc53399ef4a960a6918 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Tue, 19 Mar 2024 00:22:03 -0400 Subject: [PATCH] feat: Allow libeuicc to be installed as a dynamic library (#57) ...based on option LPAC_DYNAMIC_LIBEUICC, defaults to OFF. This makes it possible to use libeuicc on Linux without submoduling. Note that this would require any future breaking change to increment the MAJOR version of the project in the main CMakeLists.txt. This version number is now a public interface and must be maintained. As part of this commit, I have modified the version code in CMakeLists to match the current release version. --- CMakeLists.txt | 2 +- euicc/CMakeLists.txt | 24 +++++++++++++++++++++++- euicc/libeuicc.pc.in | 10 ++++++++++ 3 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 euicc/libeuicc.pc.in diff --git a/CMakeLists.txt b/CMakeLists.txt index 40b422d..5105af7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required (VERSION 3.8) project (lpac - VERSION 1.0.0 + VERSION 1.0.1 HOMEPAGE_URL "https://github.com/estkme-group/lpac" DESCRIPTION "C-based eUICC LPA." LANGUAGES C) diff --git a/euicc/CMakeLists.txt b/euicc/CMakeLists.txt index 76f3715..0eb416a 100644 --- a/euicc/CMakeLists.txt +++ b/euicc/CMakeLists.txt @@ -1,4 +1,26 @@ +option(LPAC_DYNAMIC_LIBEUICC "Build and install libeuicc as a dynamic library" OFF) aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR} LIB_EUICC_SRCS) -add_library(euicc STATIC ${LIB_EUICC_SRCS}) +if(LPAC_DYNAMIC_LIBEUICC) + add_library(euicc SHARED ${LIB_EUICC_SRCS}) +else() + add_library(euicc STATIC ${LIB_EUICC_SRCS}) +endif() target_link_libraries(euicc cjson-static) target_include_directories(euicc PUBLIC $) +if(LPAC_DYNAMIC_LIBEUICC) + # Install headers + file(GLOB ALL_HEADERS "*.h") + foreach(header ${ALL_HEADERS}) + if(${header} MATCHES "^.*\.private\.h$") + list(REMOVE_ITEM ALL_HEADERS ${header}) + endif() + endforeach() + set_target_properties(euicc PROPERTIES PUBLIC_HEADER "${ALL_HEADERS}") + # Install a pkg-config file + configure_file(libeuicc.pc.in libeuicc.pc @ONLY) + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libeuicc.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) + # Configure libeuicc.so installation + set_target_properties(euicc PROPERTIES SOVERSION ${PROJECT_VERSION_MAJOR}) + install(TARGETS euicc LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/euicc) +endif() diff --git a/euicc/libeuicc.pc.in b/euicc/libeuicc.pc.in new file mode 100644 index 0000000..730a2b8 --- /dev/null +++ b/euicc/libeuicc.pc.in @@ -0,0 +1,10 @@ +prefix="@CMAKE_INSTALL_PREFIX@" +exec_prefix="${prefix}" +libdir="${prefix}/lib" +includedir="${prefix}/include" + +Name: libeuicc +Description: Library to manipuate eUICC (eSIM) cards +Version: @PROJECT_VERSION@ +Cflags: -I${includedir} +Libs: -L${libdir} -leuicc