From 9322e1943dad57c86ccef9fa7a9e5e6b3cd49597 Mon Sep 17 00:00:00 2001 From: Syping Date: Tue, 21 Oct 2025 20:05:57 +0200 Subject: [PATCH] libragephoto: impl. linked iconv support --- CMakeLists.txt | 3 ++- cmake/unicode.cmake | 52 ++++++++++++++++++++++++++++++--------------- 2 files changed, 37 insertions(+), 18 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a838af8..8fbcb1e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,6 @@ #[[************************************************************************** * libragephoto RAGE Photo Parser -* Copyright (C) 2021-2024 Syping +* Copyright (C) 2021-2025 Syping * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: @@ -136,6 +136,7 @@ target_include_directories(ragephoto PUBLIC "${ragephoto_BINARY_DIR}/include" "${ragephoto_SOURCE_DIR}/src/core" ) +target_link_libraries(ragephoto PRIVATE ${LIBRAGEPHOTO_LIBRARIES}) install(TARGETS ragephoto ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" diff --git a/cmake/unicode.cmake b/cmake/unicode.cmake index 686bbf1..91eeed5 100644 --- a/cmake/unicode.cmake +++ b/cmake/unicode.cmake @@ -1,6 +1,6 @@ #[[************************************************************************** * libragephoto RAGE Photo Parser -* Copyright (C) 2021-2024 Syping +* Copyright (C) 2021-2025 Syping * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: @@ -17,17 +17,31 @@ ****************************************************************************]] set(RAGEPHOTO_UNICODE "" CACHE STRING "libragephoto Unicode implementation") +set(RAGEPHOTO_UNICODE_LIBRARIES "" CACHE STRING "libragephoto Unicode libraries") if (RAGEPHOTO_UNICODE) string(TOUPPER "UNICODE_${RAGEPHOTO_UNICODE}" UNICODE_DEF) list(APPEND LIBRAGEPHOTO_DEFINES - "${UNICODE_DEF}" + ${UNICODE_DEF} + ) + list(APPEND LIBRAGEPHOTO_LIBRARIES + ${RAGEPHOTO_UNICODE_LIBRARIES} ) message("-- UnicodeCvt - ${RAGEPHOTO_UNICODE}") else() + # RagePhoto test source files + if (RAGEPHOTO_C_LIBRARY) + set(ICONV_SOURCE "${PROJECT_SOURCE_DIR}/tests/IconvTest.c") + set(WINCVT_SOURCE "${PROJECT_SOURCE_DIR}/tests/WincvtTest.c") + else() + set(CODECVT_SOURCE "${PROJECT_SOURCE_DIR}/tests/CodecvtTest.cpp") + set(ICONV_SOURCE "${PROJECT_SOURCE_DIR}/tests/IconvTest.cpp") + set(WINCVT_SOURCE "${PROJECT_SOURCE_DIR}/tests/WincvtTest.cpp") + endif() + # RagePhoto Unicode functionality tests if (NOT RAGEPHOTO_C_LIBRARY) message("-- Testing codecvt") - try_run(CODECVT_RUN CODECVT_COMPILE "${PROJECT_BINARY_DIR}" "${PROJECT_SOURCE_DIR}/tests/CodecvtTest.cpp") + try_run(CODECVT_RUN CODECVT_COMPILE "${PROJECT_BINARY_DIR}" ${CODECVT_SOURCE}) if (CODECVT_COMPILE AND CODECVT_RUN EQUAL 0) set(CODECVT_COMPAT TRUE) message("-- Testing codecvt - yes") @@ -37,25 +51,24 @@ else() endif() message("-- Testing iconv") - if (RAGEPHOTO_C_LIBRARY) - try_run(ICONV_RUN ICONV_COMPILE "${PROJECT_BINARY_DIR}" "${PROJECT_SOURCE_DIR}/tests/IconvTest.c") - else() - try_run(ICONV_RUN ICONV_COMPILE "${PROJECT_BINARY_DIR}" "${PROJECT_SOURCE_DIR}/tests/IconvTest.cpp") - endif() + try_run(ICONV_RUN ICONV_COMPILE "${PROJECT_BINARY_DIR}" "${ICONV_SOURCE}") if (ICONV_COMPILE AND ICONV_RUN EQUAL 0) set(ICONV_COMPAT TRUE) message("-- Testing iconv - yes") else() - message("-- Testing iconv - no") + try_run(ICONV_RUN ICONV_COMPILE "${PROJECT_BINARY_DIR}" "${ICONV_SOURCE}" LINK_LIBRARIES iconv) + if (ICONV_COMPILE AND ICONV_RUN EQUAL 0) + set(ICONV_COMPAT TRUE) + set(ICONV_LINKED TRUE) + message("-- Testing iconv - yes (linked)") + else() + message("-- Testing iconv - no") + endif() endif() if (WIN32) message("-- Testing wincvt") - if (RAGEPHOTO_C_LIBRARY) - try_run(WINCVT_RUN WINCVT_COMPILE "${PROJECT_BINARY_DIR}" "${PROJECT_SOURCE_DIR}/tests/WincvtTest.c") - else() - try_run(WINCVT_RUN WINCVT_COMPILE "${PROJECT_BINARY_DIR}" "${PROJECT_SOURCE_DIR}/tests/WincvtTest.cpp") - endif() + try_run(WINCVT_RUN WINCVT_COMPILE "${PROJECT_BINARY_DIR}" "${WINCVT_SOURCE}") if (WINCVT_COMPILE AND WINCVT_RUN EQUAL 0) set(WINCVT_COMPAT TRUE) message("-- Testing wincvt - yes") @@ -67,18 +80,23 @@ else() # Unicode implementation for RagePhoto if (WINCVT_COMPAT) list(APPEND LIBRAGEPHOTO_DEFINES - "UNICODE_WINCVT" + UNICODE_WINCVT ) message("-- UnicodeCvt - wincvt") elseif (CODECVT_COMPAT AND NOT RAGEPHOTO_C_LIBRARY) list(APPEND LIBRAGEPHOTO_DEFINES - "UNICODE_CODECVT" + UNICODE_CODECVT ) message("-- UnicodeCvt - codecvt") elseif (ICONV_COMPAT) list(APPEND LIBRAGEPHOTO_DEFINES - "UNICODE_ICONV" + UNICODE_ICONV ) + if (ICONV_LINKED) + list(APPEND LIBRAGEPHOTO_LIBRARIES + iconv + ) + endif() message("-- UnicodeCvt - iconv") else() message("-- UnicodeCvt - none")