# docpp CMakeLists.txt cmake_minimum_required(VERSION 3.1...3.29) project(docpp VERSION 0.1.0 DESCRIPTION "C++ library for generating XML, HTML and CSS." HOMEPAGE_URL "https://speedie.site/docpp" LANGUAGES CXX ) option(GENERATE_PKGBUILD "Generate PKGBUILD" OFF) option(GENERATE_EBUILD "Generate ebuild" OFF) option(BUILD_TARBALL "Build tarball" OFF) add_compile_definitions(DOCPP_VERSION="${PROJECT_VERSION}") include(GNUInstallDirs) include(CMakePackageConfigHelpers) if (NOT DEFINED CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Debug) endif() if (MSVC AND CMAKE_BUILD_TYPE STREQUAL "Debug") set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) endif() if (APPLE) set(INSTALL_RPATH_USE_LINK_PATH ON) endif() set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) add_library(${PROJECT_NAME} SHARED) target_sources(${PROJECT_NAME} PRIVATE "src/docpp.cpp" ) target_include_directories(${PROJECT_NAME} PRIVATE "${PROJECT_SOURCE_DIR}") set_target_properties(${PROJECT_NAME} PROPERTIES VERSION ${PROJECT_VERSION} SOVERSION ${PROJECT_VERSION} PUBLIC_HEADER "include/docpp.hpp" ) install(TARGETS ${PROJECT_NAME} EXPORT ${PROJECT_NAME}Targets FILE_SET HEADERS LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/docpp INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) write_basic_package_version_file( "${PROJECT_NAME}ConfigVersion.cmake" VERSION ${PROJECT_VERSION} COMPATIBILITY AnyNewerVersion) install(EXPORT ${PROJECT_NAME}Targets FILE ${PROJECT_NAME}Targets.cmake NAMESPACE docpp:: DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}) install(FILES "${PROJECT_SOURCE_DIR}/cmake/${PROJECT_NAME}Config.cmake" "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake" DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}) if (NOT WIN32 AND NOT APPLE) configure_file(${PROJECT_SOURCE_DIR}/cmake/${PROJECT_NAME}.pc.in ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc @ONLY ) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) endif() if (CMAKE_BUILD_TYPE STREQUAL "Debug") find_package(Catch2 3 REQUIRED) add_executable(${PROJECT_NAME}_test tests/test.cpp ) target_include_directories(${PROJECT_NAME}_test PRIVATE "${PROJECT_SOURCE_DIR}" ) target_link_libraries(${PROJECT_NAME}_test PRIVATE Catch2::Catch2WithMain ) add_custom_command( TARGET ${PROJECT_NAME}_test COMMENT "Run tests" POST_BUILD WORKING_DIRECTORY ${CMAKE_BINARY_DIR} COMMAND ${PROJECT_NAME}_test ) endif() if (NOT WIN32) if (EXISTS "${PROJECT_SOURCE_DIR}/cmake/${PROJECT_NAME}.PKGBUILD.in" AND GENERATE_PKGBUILD) configure_file(${PROJECT_SOURCE_DIR}/cmake/${PROJECT_NAME}.PKGBUILD.in ${CMAKE_CURRENT_BINARY_DIR}/PKGBUILD @ONLY ) endif() if (BUILD_TARBALL OR GENERATE_EBUILD) add_custom_command( TARGET ${PROJECT_NAME} COMMENT "Create tarball" POST_BUILD WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} COMMAND scripts/${PROJECT_NAME}_make dist && mv ${PROJECT_SOURCE_DIR}/${PROJECT_NAME}-${PROJECT_VERSION}.tar.gz* ${CMAKE_BINARY_DIR} ) endif() if (EXISTS "${PROJECT_SOURCE_DIR}/cmake/${PROJECT_NAME}.ebuild.in" AND GENERATE_EBUILD ) configure_file(${PROJECT_SOURCE_DIR}/cmake/${PROJECT_NAME}.ebuild.in ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-${PROJECT_VERSION}.ebuild @ONLY ) add_custom_command( TARGET ${PROJECT_NAME} COMMENT "Copy ebuild and generate manifest" POST_BUILD WORKING_DIRECTORY ${CMAKE_BINARY_DIR} COMMAND cp ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-${PROJECT_VERSION}.ebuild ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-9999.ebuild && ${PROJECT_SOURCE_DIR}/scripts/generate_manifest ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-${PROJECT_VERSION}.tar.gz > ${CMAKE_CURRENT_BINARY_DIR}/Manifest ) endif() endif()