git repos / sago_web_git

CMakeLists.txt

browsing at commit = 118f7b3050759438e47061859b2ee856af44ebfc

raw · blame · history

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})