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