plist_ffi 0.1.6

C FFI for the amazing plist crate, compatible with libplist
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
cmake_minimum_required(VERSION 3.16)
project(plistxx LANGUAGES CXX)

# ---- Options ----
option(BUILD_SHARED_LIBS "Build shared library (ON) or static (OFF)" ON)

set(PLIST_LIB_PATH
    "${CMAKE_CURRENT_SOURCE_DIR}/../../target/release/libplist.a"
    CACHE FILEPATH "Path to libplist (static or shared)")

set(PLIST_PUBLIC_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/include")

# ---- Sources ----
file(GLOB_RECURSE PLISTXX_SOURCES CONFIGURE_DEPENDS
     "${CMAKE_CURRENT_SOURCE_DIR}/../src/*.cpp")

if(PLISTXX_SOURCES STREQUAL "")
  message(FATAL_ERROR "No C++ sources found under src/")
endif()

# ---- Library ----
add_library(plistxx ${PLISTXX_SOURCES})

if(WIN32)
  set_target_properties(plistxx PROPERTIES OUTPUT_NAME "plistxx-2.0")
else()
  set_target_properties(plistxx PROPERTIES OUTPUT_NAME "plist++-2.0")
endif()

set_target_properties(plistxx PROPERTIES
  CXX_STANDARD 17
  CXX_STANDARD_REQUIRED ON
  POSITION_INDEPENDENT_CODE ON
  SOVERSION 4
)

target_include_directories(plistxx
  PUBLIC
    "${PLIST_PUBLIC_INCLUDE_DIR}"
)

# Link to the Rust C ABI library
if(NOT EXISTS "${PLIST_LIB_PATH}")
  message(FATAL_ERROR "PLIST_LIB_PATH not found: ${PLIST_LIB_PATH}")
endif()

target_link_libraries(plistxx PRIVATE "${PLIST_LIB_PATH}")