From 21aa9d97a2c64cf0366c80c122446110179bcdbb Mon Sep 17 00:00:00 2001
From: sammycage <sammycageagle@gmail.com>
Date: Wed, 28 Aug 2024 05:51:41 +0100
Subject: [PATCH] Add cmake

---
 .gitmodules                  |   3 +
 CMakeLists.txt               | 108 +++++++++++++++++++++++++++++++++++
 cmake/lunasvgConfig.cmake.in |   3 +
 examples/CMakeLists.txt      |   2 +
 plutovg                      |   1 +
 5 files changed, 117 insertions(+)
 create mode 100644 .gitmodules
 create mode 100644 CMakeLists.txt
 create mode 100644 cmake/lunasvgConfig.cmake.in
 create mode 100644 examples/CMakeLists.txt
 create mode 160000 plutovg

diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000..c5779bb
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "plutovg"]
+	path = plutovg
+	url = https://github.com/sammycage/plutovg
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..bbf12b9
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,108 @@
+cmake_minimum_required(VERSION 3.15)
+
+set(LUNASVG_VERSION_MAJOR 3)
+set(LUNASVG_VERSION_MINOR 0)
+set(LUNASVG_VERSION_MICRO 0)
+
+project(lunasvg LANGUAGES CXX VERSION ${LUNASVG_VERSION_MAJOR}.${LUNASVG_VERSION_MINOR}.${LUNASVG_VERSION_MICRO})
+
+set(lunasvg_sources
+    source/lunasvg.cpp
+    source/graphics.cpp
+    source/svgelement.cpp
+    source/svggeometryelement.cpp
+    source/svglayoutstate.cpp
+    source/svgpaintelement.cpp
+    source/svgparser.cpp
+    source/svgproperty.cpp
+    source/svgrenderstate.cpp
+    source/svgtextelement.cpp
+)
+
+set(lunasvg_headers
+    include/lunasvg.h
+    source/graphics.h
+    source/svgelement.h
+    source/svggeometryelement.h
+    source/svglayoutstate.h
+    source/svgpaintelement.h
+    source/svgparserutils.h
+    source/svgproperty.h
+    source/svgrenderstate.h
+    source/svgtextelement.h
+)
+
+find_package(plutovg 0.0.1 QUIET)
+if(NOT plutovg_FOUND)
+    add_subdirectory(plutovg)
+endif()
+
+add_library(lunasvg ${lunasvg_sources} ${lunasvg_headers})
+add_library(lunasvg::lunasvg ALIAS lunasvg)
+
+set_target_properties(lunasvg PROPERTIES
+    SOVERSION ${LUNASVG_VERSION_MAJOR}
+    CXX_VISIBILITY_PRESET hidden
+    CXX_STANDARD_REQUIRED ON
+    CXX_STANDARD 17
+)
+
+target_include_directories(lunasvg PRIVATE
+    ${CMAKE_CURRENT_SOURCE_DIR}/include
+    ${CMAKE_CURRENT_SOURCE_DIR}/source
+)
+
+target_include_directories(lunasvg PUBLIC
+    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+    $<INSTALL_INTERFACE:include/lunasvg>
+)
+
+target_link_libraries(lunasvg PRIVATE plutovg::plutovg)
+target_compile_definitions(lunasvg PRIVATE LUNASVG_BUILD)
+if(NOT BUILD_SHARED_LIBS)
+    target_compile_definitions(lunasvg PUBLIC LUNASVG_BUILD_STATIC)
+endif()
+
+include(GNUInstallDirs)
+install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/include/lunasvg.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/lunasvg)
+
+include(CMakePackageConfigHelpers)
+configure_package_config_file(
+    "${CMAKE_CURRENT_SOURCE_DIR}/cmake/lunasvgConfig.cmake.in"
+    "${CMAKE_CURRENT_BINARY_DIR}/lunasvgConfig.cmake"
+    INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/lunasvg
+)
+
+write_basic_package_version_file(lunasvgConfigVersion.cmake
+    VERSION ${PROJECT_VERSION}
+    COMPATIBILITY SameMajorVersion
+)
+
+install(TARGETS lunasvg
+    EXPORT lunasvgTargets
+    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
+    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+)
+
+install(EXPORT lunasvgTargets
+    FILE lunasvgTargets.cmake
+    NAMESPACE lunasvg::
+    DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/lunasvg
+)
+
+install(FILES
+    ${CMAKE_CURRENT_BINARY_DIR}/lunasvgConfig.cmake
+    ${CMAKE_CURRENT_BINARY_DIR}/lunasvgConfigVersion.cmake
+    DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/lunasvg
+)
+
+export(EXPORT lunasvgTargets
+    FILE ${CMAKE_CURRENT_BINARY_DIR}/lunasvgTargets.cmake
+    NAMESPACE lunasvg::
+)
+
+option(LUNASVG_BUILD_EXAMPLES "Build examples" ON)
+if(LUNASVG_BUILD_EXAMPLES)
+    add_subdirectory(examples)
+endif()
diff --git a/cmake/lunasvgConfig.cmake.in b/cmake/lunasvgConfig.cmake.in
new file mode 100644
index 0000000..850098f
--- /dev/null
+++ b/cmake/lunasvgConfig.cmake.in
@@ -0,0 +1,3 @@
+@PACKAGE_INIT@
+
+include("${CMAKE_CURRENT_LIST_DIR}/lunasvgTargets.cmake")
diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt
new file mode 100644
index 0000000..1bb01f7
--- /dev/null
+++ b/examples/CMakeLists.txt
@@ -0,0 +1,2 @@
+add_executable(svg2png svg2png.cpp)
+target_link_libraries(svg2png lunasvg)
diff --git a/plutovg b/plutovg
new file mode 160000
index 0000000..bbfbbca
--- /dev/null
+++ b/plutovg
@@ -0,0 +1 @@
+Subproject commit bbfbbca52b631046899d0ca1360ea071854f3cf1