From 6a50ca75a16914d7d2a93617405eb28143d84435 Mon Sep 17 00:00:00 2001
From: Syping <schiedelrafael@keppe.org>
Date: Tue, 14 Dec 2021 03:15:52 +0100
Subject: [PATCH] CMakeLists.txt update, RagePhoto add data() function

RagePhoto::data() returns internal RagePhotoData object
---
 CMakeLists.txt    | 45 ++++++++++++++++++++++++---------------------
 src/RagePhoto.cpp |  5 +++++
 src/RagePhoto.h   |  1 +
 3 files changed, 30 insertions(+), 21 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index e998c25..3329213 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -34,6 +34,13 @@ else()
     set(EM_ON OFF)
 endif()
 
+# RagePhoto Top Level ON
+if (${CMAKE_PROJECT_NAME} STREQUAL "ragephoto")
+    set(RPTL_ON ON)
+else()
+    set(RPTL_ON OFF)
+endif()
+
 # RagePhoto Source files
 set(RAGEPHOTO_HEADERS
     src/RagePhoto.h
@@ -75,17 +82,17 @@ endif()
 # RagePhoto Win32 Shared Resources
 if (WIN32)
     string(TIMESTAMP ragephoto_BUILD_YEAR "%Y" UTC)
-    configure_file(src/ragephoto.rc.in resources/ragephoto.rc @ONLY)
+    configure_file(src/ragephoto.rc.in "${ragephoto_BINARY_DIR}/resources/ragephoto.rc" @ONLY)
     list(APPEND RAGEPHOTO_SHARED_RESOURCES
-        ${PROJECT_BINARY_DIR}/resources/ragephoto.rc
+        "${ragephoto_BINARY_DIR}/resources/ragephoto.rc"
     )
 endif()
 
 # RagePhoto Configures + Target + Installs
-configure_file(src/ragephoto.pc.in pkgconfig/ragephoto.pc @ONLY)
-configure_file(src/libragephoto_global.h.in include/libragephoto_global.h @ONLY)
+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)
 list(APPEND RAGEPHOTO_HEADERS
-    ${PROJECT_BINARY_DIR}/include/libragephoto_global.h
+    "${ragephoto_BINARY_DIR}/include/libragephoto_global.h"
 )
 if (RAGEPHOTO_STATIC)
     add_library(ragephoto STATIC ${RAGEPHOTO_HEADERS} ${RAGEPHOTO_SOURCES} ${RAGEPHOTO_STATIC_RESOURCES})
@@ -100,17 +107,17 @@ target_compile_definitions(ragephoto PRIVATE
     ${LIBRAGEPHOTO_DEFINES}
 )
 target_include_directories(ragephoto PUBLIC
-    ${ragephoto_BINARY_DIR}/include
-    ${ragephoto_SOURCE_DIR}/src
+    "${ragephoto_BINARY_DIR}/include"
+    "${ragephoto_SOURCE_DIR}/src"
 )
 install(TARGETS ragephoto
-    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
-    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
-    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+    ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
+    LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
+    RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
 )
-install(FILES ${RAGEPHOTO_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/RagePhoto)
+install(FILES ${RAGEPHOTO_HEADERS} DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/RagePhoto")
 if (UNIX)
-    install(FILES ${ragephoto_BINARY_DIR}/pkgconfig/ragephoto.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
+    install(FILES "${ragephoto_BINARY_DIR}/pkgconfig/ragephoto.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
 endif()
 
 # RagePhoto WebAssembly Target
@@ -126,7 +133,7 @@ if (EMSCRIPTEN)
             ${LIBRAGEPHOTO_DEFINES}
         )
         target_link_options(ragephoto-wasm PRIVATE
-            "SHELL:-O2"
+            "SHELL:-O3"
             "SHELL:--no-entry"
             "SHELL:-s WASM=1"
             "SHELL:-s EXPORTED_FUNCTIONS=_free"
@@ -159,11 +166,7 @@ if (RAGEPHOTO_EXAMPLE_QTVIEWER)
 endif()
 
 # RagePhoto Extract Tool
-if (${CMAKE_PROJECT_NAME} STREQUAL "ragephoto")
-    option(RAGEPHOTO_EXTRACT "Build libragephoto with ragephoto-extract" ON)
-else()
-    option(RAGEPHOTO_EXTRACT "Build libragephoto with ragephoto-extract" OFF)
-endif()
+option(RAGEPHOTO_EXTRACT "Build libragephoto with ragephoto-extract" ${RPTL_ON})
 if (RAGEPHOTO_EXTRACT)
     # RagePhoto-Extract Source files
     if (RAGEPHOTO_C_API)
@@ -175,9 +178,9 @@ if (RAGEPHOTO_EXTRACT)
     # RagePhoto-Extract Win32 Shared Resources
     if (WIN32)
         string(TIMESTAMP ragephoto_BUILD_YEAR "%Y" UTC)
-        configure_file(src/ragephoto-extract.rc.in resources/ragephoto-extract.rc @ONLY)
+        configure_file(src/ragephoto-extract.rc.in "${ragephoto_BINARY_DIR}/resources/ragephoto-extract.rc" @ONLY)
         list(APPEND EXTRACT_RESOURCES
-            ${ragephoto_BINARY_DIR}/resources/ragephoto-extract.rc
+            "${ragephoto_BINARY_DIR}/resources/ragephoto-extract.rc"
         )
     endif()
     # RagePhoto-Extract Target + Installs
@@ -186,5 +189,5 @@ if (RAGEPHOTO_EXTRACT)
         INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}"
     )
     target_link_libraries(ragephoto-extract PRIVATE ragephoto)
-    install(TARGETS ragephoto-extract DESTINATION ${CMAKE_INSTALL_BINDIR})
+    install(TARGETS ragephoto-extract DESTINATION "${CMAKE_INSTALL_BINDIR}")
 endif()
diff --git a/src/RagePhoto.cpp b/src/RagePhoto.cpp
index 0f88869..0153412 100644
--- a/src/RagePhoto.cpp
+++ b/src/RagePhoto.cpp
@@ -116,6 +116,11 @@ void RagePhoto::clear()
     setBufferDefault();
 }
 
+RagePhotoData* RagePhoto::data()
+{
+    return &m_data;
+}
+
 bool RagePhoto::load(const char *data, size_t length)
 {
 #ifdef RAGEPHOTO_BENCHMARK
diff --git a/src/RagePhoto.h b/src/RagePhoto.h
index d1db10c..f65ee61 100644
--- a/src/RagePhoto.h
+++ b/src/RagePhoto.h
@@ -98,6 +98,7 @@ public:
     RagePhoto();
     ~RagePhoto();
     void clear(); /**< Resets the RagePhoto instance to default values. */
+    RagePhotoData* data(); /**< Returns the internal RagePhotoData object. */
     /** Loads a Photo from a const char*.
     * \param data Photo data
     * \param size Photo data size