cmake_minimum_required(VERSION 3.16) project(sago_web_git CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Release) endif() # --- Dependencies --------------------------------------------------------- find_package(PkgConfig REQUIRED) pkg_check_modules(GIT2 REQUIRED libgit2) find_package(ZLIB REQUIRED) # cppcms / booster ship no pkg-config or CMake package, so locate them directly. find_path(CPPCMS_INCLUDE_DIR cppcms/application.h PATHS /usr/local/include /usr/include) find_library(CPPCMS_LIBRARY NAMES cppcms PATHS /usr/local/lib /usr/lib) find_library(BOOSTER_LIBRARY NAMES booster PATHS /usr/local/lib /usr/lib) if(NOT CPPCMS_INCLUDE_DIR OR NOT CPPCMS_LIBRARY OR NOT BOOSTER_LIBRARY) message(FATAL_ERROR "cppcms/booster not found. Install cppcms first.") endif() find_program(CPPCMS_TMPL_CC NAMES cppcms_tmpl_cc REQUIRED) # --- Generate cppcms views from the template skin ------------------------- set(TEMPLATE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/templates) set(SKINS ${TEMPLATE_DIR}/master.tmpl ${TEMPLATE_DIR}/pages.tmpl ${TEMPLATE_DIR}/repo.tmpl ${TEMPLATE_DIR}/history.tmpl) set(VIEWS_CPP ${CMAKE_CURRENT_BINARY_DIR}/views.cpp) add_custom_command( OUTPUT ${VIEWS_CPP} COMMAND ${CPPCMS_TMPL_CC} ${SKINS} -o ${VIEWS_CPP} DEPENDS ${SKINS} COMMENT "Generating cppcms views from templates" VERBATIM) # --- Application ---------------------------------------------------------- add_executable(sago_web_git src/main.cpp src/application.cpp src/git_repo.cpp src/archive.cpp src/repo_scanner.cpp src/util.cpp src/cgi.cpp ${VIEWS_CPP}) target_include_directories(sago_web_git PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src ${CPPCMS_INCLUDE_DIR} ${GIT2_INCLUDE_DIRS}) target_link_libraries(sago_web_git PRIVATE ${CPPCMS_LIBRARY} ${BOOSTER_LIBRARY} ${GIT2_LIBRARIES} ZLIB::ZLIB pthread) target_compile_options(sago_web_git PRIVATE ${GIT2_CFLAGS_OTHER})