aboutsummaryrefslogtreecommitdiff
path: root/vcpkg/ports/libplist
diff options
context:
space:
mode:
Diffstat (limited to 'vcpkg/ports/libplist')
-rw-r--r--vcpkg/ports/libplist/001_fix_static_build.patch22
-rw-r--r--vcpkg/ports/libplist/CMakeLists.txt105
-rw-r--r--vcpkg/ports/libplist/portfile.cmake45
-rw-r--r--vcpkg/ports/libplist/usage4
-rw-r--r--vcpkg/ports/libplist/vcpkg.json23
5 files changed, 199 insertions, 0 deletions
diff --git a/vcpkg/ports/libplist/001_fix_static_build.patch b/vcpkg/ports/libplist/001_fix_static_build.patch
new file mode 100644
index 0000000..1df3299
--- /dev/null
+++ b/vcpkg/ports/libplist/001_fix_static_build.patch
@@ -0,0 +1,22 @@
+diff --git a/src/plist.c b/src/plist.c
+index a33a6fb..1dda4d7 100644
+--- a/src/plist.c
++++ b/src/plist.c
+@@ -132,6 +132,8 @@ static int plist_debug = 0;
+ static void f(void)
+ #endif
+
++#ifndef LIBPLIST_STATIC // disable dll constructor
++
+ extern void plist_xml_init(void);
+ extern void plist_xml_deinit(void);
+ extern void plist_bin_init(void);
+@@ -158,6 +160,8 @@ INITIALIZER(internal_plist_init)
+ atexit(internal_plist_deinit);
+ }
+
++#endif // disable dll constructor
++
+ #ifndef HAVE_MEMMEM
+ // see https://sourceware.org/legacy-ml/libc-alpha/2007-12/msg00000.html
+
diff --git a/vcpkg/ports/libplist/CMakeLists.txt b/vcpkg/ports/libplist/CMakeLists.txt
new file mode 100644
index 0000000..d80d66e
--- /dev/null
+++ b/vcpkg/ports/libplist/CMakeLists.txt
@@ -0,0 +1,105 @@
+cmake_minimum_required(VERSION 3.15)
+project(libplist C CXX)
+
+option(BUILD_TOOLS "Build tools." OFF)
+
+include(GNUInstallDirs)
+
+file(GLOB_RECURSE LIBCNARY_SOURCE libcnary/node.c libcnary/node_list.c)
+file(GLOB_RECURSE LIBPLIST_SOURCE src/*.c)
+file(GLOB_RECURSE LIBPLISTPP_SOURCE src/*.cpp)
+
+set(DEFINITIONS)
+
+list(APPEND DEFINITIONS -DPACKAGE_VERSION="${PACKAGE_VERSION}")
+
+if(BUILD_SHARED_LIBS)
+ if(WIN32)
+ list(APPEND DEFINITIONS -DLIBPLIST_EXPORT)
+ endif()
+else()
+ list(APPEND DEFINITIONS -DLIBPLIST_STATIC)
+endif()
+
+if(UNIX)
+ list(APPEND DEFINITIONS -DHAVE_STRNDUP)
+endif()
+
+if(WIN32)
+ list(APPEND DEFINITIONS -D_CRT_SECURE_NO_WARNINGS)
+endif()
+
+add_library(libplist ${LIBPLIST_SOURCE} ${LIBCNARY_SOURCE})
+target_include_directories(libplist PUBLIC
+ "$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/libcnary/include>"
+ "$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/src>"
+ "$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include>"
+ "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
+)
+target_compile_definitions(libplist PRIVATE ${DEFINITIONS})
+set_target_properties(libplist PROPERTIES OUTPUT_NAME plist-2.0)
+if(UNIX AND NOT APPLE)
+ target_link_libraries(libplist PRIVATE m)
+endif()
+
+add_library(libplist++ STATIC ${LIBPLISTPP_SOURCE} ${LIBCNARY_SOURCE})
+target_include_directories(libplist++ PUBLIC
+ "$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/libcnary/include>"
+ "$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/src>"
+ "$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include>"
+ "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
+)
+target_compile_definitions(libplist++ PRIVATE ${DEFINITIONS})
+target_link_libraries(libplist++ PUBLIC libplist)
+set_target_properties(libplist++ PROPERTIES OUTPUT_NAME plist++-2.0)
+
+install(TARGETS libplist libplist++ EXPORT unofficial-libplist)
+
+install(
+ EXPORT unofficial-libplist
+ FILE unofficial-libplist-config.cmake
+ DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/unofficial-libplist"
+ NAMESPACE unofficial::libplist::
+)
+
+install(
+ DIRECTORY "${CMAKE_SOURCE_DIR}/include/plist"
+ DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
+)
+
+set(PACKAGE_NAME libplist)
+set(PACKAGE_VERSION 2.0)
+set(prefix "")
+set(exec_prefix "\${prefix}")
+set(libdir "\${prefix}/lib")
+set(includedir "\${prefix}/include")
+
+foreach(PLIST_PKGCONFIG libplist-2.0.pc libplist++-2.0.pc)
+ configure_file(
+ "${CMAKE_CURRENT_SOURCE_DIR}/src/${PLIST_PKGCONFIG}.in"
+ "${CMAKE_CURRENT_BINARY_DIR}/${PLIST_PKGCONFIG}"
+ @ONLY
+ )
+ install(
+ FILES "${CMAKE_CURRENT_BINARY_DIR}/${PLIST_PKGCONFIG}"
+ DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig"
+ )
+endforeach()
+
+if(BUILD_TOOLS)
+ add_executable(plistutil "tools/plistutil.c")
+ target_compile_definitions(plistutil PRIVATE
+ -DPACKAGE_VERSION="2.3.0"
+ -DPACKAGE_URL="https://github.com/libimobiledevice/libplist"
+ -DPACKAGE_BUGREPORT="https://github.com/libimobiledevice/libplist/issues"
+ )
+ if(NOT BUILD_SHARED_LIBS)
+ target_compile_definitions(plistutil PRIVATE -DLIBPLIST_STATIC)
+ endif()
+ target_link_libraries(plistutil PRIVATE libplist)
+
+ install(
+ TARGETS plistutil
+ RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
+ )
+endif()
diff --git a/vcpkg/ports/libplist/portfile.cmake b/vcpkg/ports/libplist/portfile.cmake
new file mode 100644
index 0000000..c62495d
--- /dev/null
+++ b/vcpkg/ports/libplist/portfile.cmake
@@ -0,0 +1,45 @@
+vcpkg_from_github(
+ OUT_SOURCE_PATH SOURCE_PATH
+ REPO libimobiledevice/libplist
+ REF ${VERSION}
+ SHA512 0477202686fb2f88684af30a97d53fd023ada470dfc7c5d8b32c0d80e09a4641e679522a53c5ad32eae61b21a2d0f1f0c660acd8482ba7951d728b42e4cf5eab
+ HEAD_REF master
+ PATCHES
+ 001_fix_static_build.patch
+)
+
+file(COPY "${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt" DESTINATION "${SOURCE_PATH}")
+
+vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_OPTIONS
+ FEATURES
+ tools BUILD_TOOLS
+)
+
+vcpkg_cmake_configure(
+ SOURCE_PATH "${SOURCE_PATH}"
+ OPTIONS
+ ${FEATURE_OPTIONS}
+ -DPACKAGE_VERSION=${VERSION}
+)
+
+vcpkg_cmake_install()
+vcpkg_cmake_config_fixup(PACKAGE_NAME unofficial-${PORT})
+vcpkg_fixup_pkgconfig()
+if("tools" IN_LIST FEATURES)
+ vcpkg_copy_tools(TOOL_NAMES plistutil AUTO_CLEAN)
+endif()
+
+if (VCPKG_LIBRARY_LINKAGE STREQUAL "static")
+ vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/plist/plist.h"
+ "#ifdef LIBPLIST_STATIC" "#if 1"
+ )
+else()
+ vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/plist/plist.h"
+ "#ifdef LIBPLIST_STATIC" "#if 0"
+ )
+endif()
+
+file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include")
+
+vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/COPYING")
+file(INSTALL "${CMAKE_CURRENT_LIST_DIR}/usage" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}")
diff --git a/vcpkg/ports/libplist/usage b/vcpkg/ports/libplist/usage
new file mode 100644
index 0000000..81c34ea
--- /dev/null
+++ b/vcpkg/ports/libplist/usage
@@ -0,0 +1,4 @@
+libplist provides CMake targets:
+
+ find_package(unofficial-libplist CONFIG REQUIRED)
+ target_link_libraries(main PRIVATE unofficial::libplist::libplist unofficial::libplist::libplist++)
diff --git a/vcpkg/ports/libplist/vcpkg.json b/vcpkg/ports/libplist/vcpkg.json
new file mode 100644
index 0000000..35283a2
--- /dev/null
+++ b/vcpkg/ports/libplist/vcpkg.json
@@ -0,0 +1,23 @@
+{
+ "name": "libplist",
+ "version": "2.7.0",
+ "description": "A library to handle Apple Property List format in binary or XML",
+ "homepage": "https://libimobiledevice.org/",
+ "license": "LGPL-2.1-or-later",
+ "dependencies": [
+ {
+ "name": "vcpkg-cmake",
+ "host": true
+ },
+ {
+ "name": "vcpkg-cmake-config",
+ "host": true
+ }
+ ],
+ "features": {
+ "tools": {
+ "description": "build command line tool",
+ "supports": "!android & !ios & !xbox"
+ }
+ }
+}