2021-09-04 17:13:03 +02:00
|
|
|
#[[**************************************************************************
|
|
|
|
* libragephoto RAGE Photo Parser
|
2023-01-05 15:46:57 +01:00
|
|
|
* Copyright (C) 2021-2023 Syping
|
2021-09-04 17:13:03 +02:00
|
|
|
*
|
|
|
|
* Redistribution and use in source and binary forms, with or without modification,
|
|
|
|
* are permitted provided that the following conditions are met:
|
|
|
|
*
|
|
|
|
* 1. Redistributions of source code must retain the above copyright notice,
|
|
|
|
* this list of conditions and the following disclaimer.
|
|
|
|
*
|
|
|
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
|
|
* this list of conditions and the following disclaimer in the documentation
|
|
|
|
* and/or other materials provided with the distribution.
|
|
|
|
*
|
|
|
|
* This software is provided as-is, no warranties are given to you, we are not
|
|
|
|
* responsible for anything with use of the software, you are self responsible.
|
|
|
|
****************************************************************************]]
|
|
|
|
|
2021-08-25 00:30:10 +02:00
|
|
|
cmake_minimum_required(VERSION 3.7)
|
2023-01-07 20:43:11 +01:00
|
|
|
project(ragephoto VERSION 0.2.0 LANGUAGES CXX)
|
2021-09-04 17:13:03 +02:00
|
|
|
include(GNUInstallDirs)
|
2021-08-25 00:30:10 +02:00
|
|
|
|
|
|
|
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
|
|
|
set(CMAKE_CXX_STANDARD 11)
|
|
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
|
|
|
2021-11-09 03:25:27 +01:00
|
|
|
# RagePhoto CMake includes
|
|
|
|
include(cmake/unicode.cmake)
|
2021-11-06 20:17:28 +01:00
|
|
|
|
2021-12-02 03:14:19 +01:00
|
|
|
# RagePhoto WebAssembly ON
|
2021-12-01 07:41:47 +01:00
|
|
|
if (EMSCRIPTEN)
|
|
|
|
set(EM_ON ON)
|
|
|
|
else()
|
|
|
|
set(EM_ON OFF)
|
|
|
|
endif()
|
|
|
|
|
2021-12-14 03:15:52 +01:00
|
|
|
# RagePhoto Top Level ON
|
|
|
|
if (${CMAKE_PROJECT_NAME} STREQUAL "ragephoto")
|
|
|
|
set(RPTL_ON ON)
|
|
|
|
else()
|
|
|
|
set(RPTL_ON OFF)
|
|
|
|
endif()
|
|
|
|
|
2021-11-06 14:52:25 +01:00
|
|
|
# RagePhoto Source files
|
2021-08-27 01:47:09 +02:00
|
|
|
set(RAGEPHOTO_HEADERS
|
|
|
|
src/RagePhoto.h
|
2021-11-03 10:19:32 +01:00
|
|
|
src/RagePhotoData.h
|
2021-08-27 01:47:09 +02:00
|
|
|
)
|
2021-08-27 21:48:33 +02:00
|
|
|
set(RAGEPHOTO_SOURCES
|
|
|
|
src/RagePhoto.cpp
|
|
|
|
)
|
2021-08-27 01:47:09 +02:00
|
|
|
|
2021-11-06 14:52:25 +01:00
|
|
|
# RagePhoto Library Type
|
2021-12-01 07:41:47 +01:00
|
|
|
option(RAGEPHOTO_STATIC "Build libragephoto as static library" ${EM_ON})
|
|
|
|
if (RAGEPHOTO_STATIC)
|
|
|
|
option(RAGEPHOTO_C_API "Build libragephoto with C API support" ${EM_ON})
|
|
|
|
set(LIBRAGEPHOTO_LIBTYPE LIBRAGEPHOTO_STATIC)
|
2021-11-16 06:20:20 +01:00
|
|
|
else()
|
2021-12-01 07:41:47 +01:00
|
|
|
option(RAGEPHOTO_C_API "Build libragephoto with C API support" ON)
|
2021-10-29 11:52:59 +02:00
|
|
|
set(LIBRAGEPHOTO_LIBTYPE LIBRAGEPHOTO_SHARED)
|
2021-08-27 01:47:09 +02:00
|
|
|
endif()
|
|
|
|
|
2021-11-06 14:52:25 +01:00
|
|
|
# RagePhoto Benchmark
|
2021-12-01 07:41:47 +01:00
|
|
|
option(RAGEPHOTO_BENCHMARK "Build with libragephoto benchmark" OFF)
|
|
|
|
if (RAGEPHOTO_BENCHMARK)
|
2021-08-25 00:30:10 +02:00
|
|
|
list(APPEND LIBRAGEPHOTO_DEFINES
|
|
|
|
RAGEPHOTO_BENCHMARK
|
|
|
|
)
|
|
|
|
endif()
|
|
|
|
|
2021-11-06 14:52:25 +01:00
|
|
|
# RagePhoto C API
|
2021-12-01 07:41:47 +01:00
|
|
|
if (RAGEPHOTO_C_API)
|
2021-10-29 11:52:59 +02:00
|
|
|
set(LIBRAGEPHOTO_API LIBRAGEPHOTO_C_API)
|
2021-11-04 13:21:18 +01:00
|
|
|
list(APPEND RAGEPHOTO_HEADERS
|
|
|
|
src/RagePhotoA.h
|
2021-11-13 04:41:01 +01:00
|
|
|
src/RagePhotoC.h
|
2021-11-04 13:21:18 +01:00
|
|
|
)
|
2021-10-29 11:52:59 +02:00
|
|
|
else()
|
|
|
|
set(LIBRAGEPHOTO_API LIBRAGEPHOTO_C_NOAPI)
|
|
|
|
endif()
|
|
|
|
|
2021-11-12 06:55:37 +01:00
|
|
|
# RagePhoto Win32 Shared Resources
|
|
|
|
if (WIN32)
|
|
|
|
string(TIMESTAMP ragephoto_BUILD_YEAR "%Y" UTC)
|
2021-12-14 03:15:52 +01:00
|
|
|
configure_file(src/ragephoto.rc.in "${ragephoto_BINARY_DIR}/resources/ragephoto.rc" @ONLY)
|
2021-11-12 06:55:37 +01:00
|
|
|
list(APPEND RAGEPHOTO_SHARED_RESOURCES
|
2021-12-14 03:15:52 +01:00
|
|
|
"${ragephoto_BINARY_DIR}/resources/ragephoto.rc"
|
2021-11-12 06:55:37 +01:00
|
|
|
)
|
|
|
|
endif()
|
|
|
|
|
2021-11-07 20:32:06 +01:00
|
|
|
# RagePhoto Configures + Target + Installs
|
2021-12-14 03:15:52 +01:00
|
|
|
configure_file(src/ragephoto.pc.in "${ragephoto_BINARY_DIR}/pkgconfig/ragephoto.pc" @ONLY)
|
|
|
|
configure_file(src/libragephoto_global.h.in "${ragephoto_BINARY_DIR}/include/libragephoto_global.h" @ONLY)
|
2021-11-03 10:19:32 +01:00
|
|
|
list(APPEND RAGEPHOTO_HEADERS
|
2021-12-14 03:15:52 +01:00
|
|
|
"${ragephoto_BINARY_DIR}/include/libragephoto_global.h"
|
2021-11-03 10:19:32 +01:00
|
|
|
)
|
2021-12-01 07:41:47 +01:00
|
|
|
if (RAGEPHOTO_STATIC)
|
|
|
|
add_library(ragephoto STATIC ${RAGEPHOTO_HEADERS} ${RAGEPHOTO_SOURCES} ${RAGEPHOTO_STATIC_RESOURCES})
|
|
|
|
else()
|
2021-11-12 06:55:37 +01:00
|
|
|
add_library(ragephoto SHARED ${RAGEPHOTO_HEADERS} ${RAGEPHOTO_SOURCES} ${RAGEPHOTO_SHARED_RESOURCES})
|
|
|
|
set_target_properties(ragephoto PROPERTIES
|
|
|
|
PREFIX "lib"
|
|
|
|
)
|
2021-11-06 14:52:25 +01:00
|
|
|
endif()
|
2021-08-26 00:22:11 +02:00
|
|
|
target_compile_definitions(ragephoto PRIVATE
|
2021-08-25 00:30:10 +02:00
|
|
|
LIBRAGEPHOTO_LIBRARY
|
|
|
|
${LIBRAGEPHOTO_DEFINES}
|
|
|
|
)
|
2021-11-03 10:19:32 +01:00
|
|
|
target_include_directories(ragephoto PUBLIC
|
2021-12-14 03:15:52 +01:00
|
|
|
"${ragephoto_BINARY_DIR}/include"
|
|
|
|
"${ragephoto_SOURCE_DIR}/src"
|
2021-08-29 03:06:14 +02:00
|
|
|
)
|
2021-12-02 03:14:19 +01:00
|
|
|
install(TARGETS ragephoto
|
2021-12-14 03:15:52 +01:00
|
|
|
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
|
|
|
|
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
|
|
|
|
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
|
2021-12-02 03:14:19 +01:00
|
|
|
)
|
2021-12-14 03:15:52 +01:00
|
|
|
install(FILES ${RAGEPHOTO_HEADERS} DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/RagePhoto")
|
2021-12-02 03:14:19 +01:00
|
|
|
if (UNIX)
|
2021-12-14 03:15:52 +01:00
|
|
|
install(FILES "${ragephoto_BINARY_DIR}/pkgconfig/ragephoto.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
|
2021-12-02 03:14:19 +01:00
|
|
|
endif()
|
2021-11-16 06:20:20 +01:00
|
|
|
|
|
|
|
# RagePhoto WebAssembly Target
|
|
|
|
if (EMSCRIPTEN)
|
|
|
|
if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.13.0")
|
|
|
|
add_executable(ragephoto-wasm ${RAGEPHOTO_HEADERS} ${RAGEPHOTO_SOURCES})
|
|
|
|
set_target_properties(ragephoto-wasm PROPERTIES
|
|
|
|
PREFIX "lib"
|
|
|
|
OUTPUT_NAME "ragephoto"
|
|
|
|
)
|
|
|
|
target_compile_definitions(ragephoto-wasm PRIVATE
|
|
|
|
LIBRAGEPHOTO_LIBRARY
|
|
|
|
${LIBRAGEPHOTO_DEFINES}
|
|
|
|
)
|
|
|
|
target_link_options(ragephoto-wasm PRIVATE
|
2021-12-14 03:15:52 +01:00
|
|
|
"SHELL:-O3"
|
2021-11-16 06:20:20 +01:00
|
|
|
"SHELL:--no-entry"
|
|
|
|
"SHELL:-s WASM=1"
|
2023-01-05 15:46:57 +01:00
|
|
|
"SHELL:-s ALLOW_MEMORY_GROWTH=1"
|
2023-01-05 16:03:47 +01:00
|
|
|
"SHELL:-s EXPORTED_FUNCTIONS=_free,_malloc"
|
2021-11-16 06:20:20 +01:00
|
|
|
"SHELL:-s EXPORTED_RUNTIME_METHODS=ccall,cwrap"
|
|
|
|
)
|
|
|
|
target_include_directories(ragephoto-wasm PUBLIC
|
|
|
|
${ragephoto_BINARY_DIR}/include
|
|
|
|
${ragephoto_SOURCE_DIR}/src
|
|
|
|
)
|
|
|
|
else()
|
|
|
|
message(WARNING "A useable WebAssembly build needs at least CMake 3.13.0 or newer")
|
|
|
|
endif()
|
|
|
|
endif()
|
2021-08-25 00:30:10 +02:00
|
|
|
|
2021-11-06 14:52:25 +01:00
|
|
|
# RagePhoto Documentation
|
2021-12-01 07:41:47 +01:00
|
|
|
option(RAGEPHOTO_DOC "Build libragephoto with documentation" OFF)
|
|
|
|
if (RAGEPHOTO_DOC)
|
2021-09-14 19:35:46 +02:00
|
|
|
add_subdirectory(doc)
|
|
|
|
endif()
|
|
|
|
|
2021-11-06 14:52:25 +01:00
|
|
|
# RagePhoto Examples
|
2021-12-01 07:41:47 +01:00
|
|
|
option(RAGEPHOTO_EXAMPLE_GTKVIEWER "Build libragephoto with GTK Photo Viewer" OFF)
|
|
|
|
if (RAGEPHOTO_EXAMPLE_GTKVIEWER)
|
2021-08-27 05:33:20 +02:00
|
|
|
add_subdirectory(examples/ragephoto-gtkviewer)
|
|
|
|
endif()
|
|
|
|
|
2021-12-01 07:41:47 +01:00
|
|
|
option(RAGEPHOTO_EXAMPLE_QTVIEWER "Build libragephoto with Qt Photo Viewer" OFF)
|
|
|
|
if (RAGEPHOTO_EXAMPLE_QTVIEWER)
|
2021-08-27 20:07:14 +02:00
|
|
|
add_subdirectory(examples/ragephoto-qtviewer)
|
|
|
|
endif()
|
|
|
|
|
2021-11-06 14:52:25 +01:00
|
|
|
# RagePhoto Extract Tool
|
2021-12-14 03:15:52 +01:00
|
|
|
option(RAGEPHOTO_EXTRACT "Build libragephoto with ragephoto-extract" ${RPTL_ON})
|
2021-12-01 07:41:47 +01:00
|
|
|
if (RAGEPHOTO_EXTRACT)
|
2021-11-16 06:20:20 +01:00
|
|
|
# RagePhoto-Extract Source files
|
2021-12-01 07:41:47 +01:00
|
|
|
if (RAGEPHOTO_C_API)
|
2021-11-03 11:21:37 +01:00
|
|
|
enable_language(C)
|
|
|
|
set(EXTRACT_SOURCES src/RagePhoto-Extract.c)
|
|
|
|
else()
|
|
|
|
set(EXTRACT_SOURCES src/RagePhoto-Extract.cpp)
|
|
|
|
endif()
|
2021-11-16 06:20:20 +01:00
|
|
|
# RagePhoto-Extract Win32 Shared Resources
|
|
|
|
if (WIN32)
|
|
|
|
string(TIMESTAMP ragephoto_BUILD_YEAR "%Y" UTC)
|
2021-12-14 03:15:52 +01:00
|
|
|
configure_file(src/ragephoto-extract.rc.in "${ragephoto_BINARY_DIR}/resources/ragephoto-extract.rc" @ONLY)
|
2021-11-16 06:20:20 +01:00
|
|
|
list(APPEND EXTRACT_RESOURCES
|
2021-12-14 03:15:52 +01:00
|
|
|
"${ragephoto_BINARY_DIR}/resources/ragephoto-extract.rc"
|
2021-11-16 06:20:20 +01:00
|
|
|
)
|
|
|
|
endif()
|
|
|
|
# RagePhoto-Extract Target + Installs
|
|
|
|
add_executable(ragephoto-extract ${RAGEPHOTO_HEADERS} ${EXTRACT_SOURCES} ${EXTRACT_RESOURCES})
|
2021-11-12 06:55:37 +01:00
|
|
|
set_target_properties(ragephoto-extract PROPERTIES
|
2021-11-16 06:20:20 +01:00
|
|
|
INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}"
|
2021-11-12 06:55:37 +01:00
|
|
|
)
|
2021-08-27 21:48:33 +02:00
|
|
|
target_link_libraries(ragephoto-extract PRIVATE ragephoto)
|
2021-12-14 03:15:52 +01:00
|
|
|
install(TARGETS ragephoto-extract DESTINATION "${CMAKE_INSTALL_BINDIR}")
|
2021-08-27 01:47:09 +02:00
|
|
|
endif()
|