Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
165 changes: 92 additions & 73 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,14 @@ set(PLUTOSVG_VERSION_MICRO 7)

project(plutosvg LANGUAGES C VERSION ${PLUTOSVG_VERSION_MAJOR}.${PLUTOSVG_VERSION_MINOR}.${PLUTOSVG_VERSION_MICRO})

if(CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR)
set(PLUTOSVG_MAINPROJECT ON)
else()
set(PLUTOSVG_MAINPROJECT OFF)
endif()

option(PLUTOSVG_INSTALL "Enable installation of PlutoSVG" ${PLUTOSVG_MAINPROJECT})

find_package(plutovg 1.0.0 QUIET)
if(NOT plutovg_FOUND)
add_subdirectory(plutovg)
Expand Down Expand Up @@ -52,10 +60,19 @@ if(NOT BUILD_SHARED_LIBS)
endif()

option(PLUTOSVG_ENABLE_FREETYPE "Enable Freetype integration" OFF)
option(PLUTOSVG_EXTERNAL_FREETYPE "Use the available freetype instead of finding it" OFF)
if(PLUTOSVG_ENABLE_FREETYPE)
find_package(Freetype 2.12 REQUIRED)
target_compile_definitions(plutosvg PUBLIC PLUTOSVG_HAS_FREETYPE)
target_link_libraries(plutosvg PUBLIC Freetype::Freetype)
if (NOT PLUTOSVG_EXTERNAL_FREETYPE)
find_package(Freetype 2.12 REQUIRED)
target_link_libraries(plutosvg PUBLIC Freetype::Freetype)
else()
if (NOT TARGET freetype)
message(FATAL_ERROR "FreeType not available.")
else()
target_link_libraries(plutosvg PUBLIC freetype)
endif()
endif()
endif()

configure_package_config_file(
Expand All @@ -69,79 +86,81 @@ write_basic_package_version_file(plutosvgConfigVersion.cmake
COMPATIBILITY SameMajorVersion
)

install(FILES
${CMAKE_CURRENT_SOURCE_DIR}/source/plutosvg.h
${CMAKE_CURRENT_SOURCE_DIR}/source/plutosvg-ft.h
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/plutosvg
)

install(TARGETS plutosvg
EXPORT plutosvgTargets
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)

install(EXPORT plutosvgTargets
FILE plutosvgTargets.cmake
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/plutosvg
NAMESPACE plutosvg::
)

install(FILES
${CMAKE_CURRENT_BINARY_DIR}/plutosvgConfig.cmake
${CMAKE_CURRENT_BINARY_DIR}/plutosvgConfigVersion.cmake
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/plutosvg
)

export(EXPORT plutosvgTargets
FILE ${CMAKE_CURRENT_BINARY_DIR}/plutosvgTargets.cmake
NAMESPACE plutosvg::
)

file(RELATIVE_PATH plutosvg_pc_prefix_relative
"${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/pkgconfig"
"${CMAKE_INSTALL_PREFIX}"
)

set(plutosvg_pc_cflags "")
set(plutosvg_pc_libs_private "")
set(plutosvg_pc_requires "")

if(MATH_LIBRARY)
string(APPEND plutosvg_pc_libs_private " -lm")
endif()

if(NOT BUILD_SHARED_LIBS)
string(APPEND plutosvg_pc_cflags " -DPLUTOSVG_BUILD_STATIC")
endif()

if(PLUTOSVG_ENABLE_FREETYPE)
string(APPEND plutosvg_pc_cflags " -DPLUTOSVG_HAS_FREETYPE")
string(APPEND plutosvg_pc_requires " freetype2 >= 2.12")
if (PLUTOSVG_INSTALL)
install(FILES
${CMAKE_CURRENT_SOURCE_DIR}/source/plutosvg.h
${CMAKE_CURRENT_SOURCE_DIR}/source/plutosvg-ft.h
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/plutosvg
)

install(TARGETS plutosvg
EXPORT plutosvgTargets
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)

install(EXPORT plutosvgTargets
FILE plutosvgTargets.cmake
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/plutosvg
NAMESPACE plutosvg::
)

install(FILES
${CMAKE_CURRENT_BINARY_DIR}/plutosvgConfig.cmake
${CMAKE_CURRENT_BINARY_DIR}/plutosvgConfigVersion.cmake
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/plutosvg
)

export(EXPORT plutosvgTargets
FILE ${CMAKE_CURRENT_BINARY_DIR}/plutosvgTargets.cmake
NAMESPACE plutosvg::
)

file(RELATIVE_PATH plutosvg_pc_prefix_relative
"${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/pkgconfig"
"${CMAKE_INSTALL_PREFIX}"
)

set(plutosvg_pc_cflags "")
set(plutosvg_pc_libs_private "")
set(plutosvg_pc_requires "")

if(MATH_LIBRARY)
string(APPEND plutosvg_pc_libs_private " -lm")
endif()

if(NOT BUILD_SHARED_LIBS)
string(APPEND plutosvg_pc_cflags " -DPLUTOSVG_BUILD_STATIC")
endif()

if(PLUTOSVG_ENABLE_FREETYPE)
string(APPEND plutosvg_pc_cflags " -DPLUTOSVG_HAS_FREETYPE")
string(APPEND plutosvg_pc_requires " freetype2 >= 2.12")
endif()

string(CONFIGURE [[
prefix=${pcfiledir}/@plutosvg_pc_prefix_relative@
includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@
libdir=${prefix}/@CMAKE_INSTALL_LIBDIR@

Name: PlutoSVG
Description: Tiny SVG rendering library in C
Version: @PROJECT_VERSION@

Requires: plutovg@plutosvg_pc_requires@
Cflags: -I${includedir}/plutosvg@plutosvg_pc_cflags@
Libs: -L${libdir} -lplutosvg
Libs.private:@plutosvg_pc_libs_private@
]] plutosvg_pc @ONLY)

file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/plutosvg.pc" "${plutosvg_pc}")

install(FILES "${CMAKE_CURRENT_BINARY_DIR}/plutosvg.pc"
DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig"
)
endif()

string(CONFIGURE [[
prefix=${pcfiledir}/@plutosvg_pc_prefix_relative@
includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@
libdir=${prefix}/@CMAKE_INSTALL_LIBDIR@

Name: PlutoSVG
Description: Tiny SVG rendering library in C
Version: @PROJECT_VERSION@

Requires: plutovg@plutosvg_pc_requires@
Cflags: -I${includedir}/plutosvg@plutosvg_pc_cflags@
Libs: -L${libdir} -lplutosvg
Libs.private:@plutosvg_pc_libs_private@
]] plutosvg_pc @ONLY)

file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/plutosvg.pc" "${plutosvg_pc}")

install(FILES "${CMAKE_CURRENT_BINARY_DIR}/plutosvg.pc"
DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig"
)

option(PLUTOSVG_BUILD_EXAMPLES "Build examples" ON)
if(PLUTOSVG_BUILD_EXAMPLES)
add_subdirectory(examples)
Expand Down
Loading