mirror of
https://github.com/tstack/lnav
synced 2024-11-01 21:40:34 +00:00
113 lines
3.3 KiB
CMake
113 lines
3.3 KiB
CMake
cmake_minimum_required(VERSION 3.14)
|
|
|
|
foreach(var IN ITEMS PROJECT_BINARY_DIR PROJECT_SOURCE_DIR)
|
|
if(NOT DEFINED "${var}")
|
|
message(FATAL_ERROR "${var} must be defined")
|
|
endif()
|
|
endforeach()
|
|
set(bin "${PROJECT_BINARY_DIR}")
|
|
set(src "${PROJECT_SOURCE_DIR}")
|
|
|
|
# ---- Dependencies ----
|
|
|
|
set(mcss_SOURCE_DIR "${bin}/docs/.ci")
|
|
if(NOT IS_DIRECTORY "${mcss_SOURCE_DIR}")
|
|
file(MAKE_DIRECTORY "${mcss_SOURCE_DIR}")
|
|
file(
|
|
DOWNLOAD
|
|
https://github.com/friendlyanon/m.css/releases/download/release-1/mcss.zip
|
|
"${mcss_SOURCE_DIR}/mcss.zip"
|
|
STATUS status
|
|
EXPECTED_MD5 00cd2757ebafb9bcba7f5d399b3bec7f
|
|
)
|
|
if(NOT status MATCHES "^0;")
|
|
message(FATAL_ERROR "Download failed with ${status}")
|
|
endif()
|
|
execute_process(
|
|
COMMAND "${CMAKE_COMMAND}" -E tar xf mcss.zip
|
|
WORKING_DIRECTORY "${mcss_SOURCE_DIR}"
|
|
RESULT_VARIABLE result
|
|
)
|
|
if(NOT result EQUAL "0")
|
|
message(FATAL_ERROR "Extraction failed with ${result}")
|
|
endif()
|
|
file(REMOVE "${mcss_SOURCE_DIR}/mcss.zip")
|
|
endif()
|
|
|
|
find_program(Python3_EXECUTABLE NAMES python3 python)
|
|
if(NOT Python3_EXECUTABLE)
|
|
message(FATAL_ERROR "Python executable was not found")
|
|
endif()
|
|
|
|
# ---- Process project() call in CMakeLists.txt ----
|
|
|
|
file(READ "${src}/CMakeLists.txt" content)
|
|
|
|
string(FIND "${content}" "project(" index)
|
|
if(index EQUAL "-1")
|
|
message(FATAL_ERROR "Could not find \"project(\"")
|
|
endif()
|
|
string(SUBSTRING "${content}" "${index}" -1 content)
|
|
|
|
string(FIND "${content}" "\n)\n" index)
|
|
if(index EQUAL "-1")
|
|
message(FATAL_ERROR "Could not find \"\\n)\\n\"")
|
|
endif()
|
|
string(SUBSTRING "${content}" 0 "${index}" content)
|
|
|
|
file(WRITE "${bin}/docs-ci.project.cmake" "docs_${content}\n)\n")
|
|
|
|
macro(list_pop_front list out)
|
|
list(GET "${list}" 0 "${out}")
|
|
list(REMOVE_AT "${list}" 0)
|
|
endmacro()
|
|
|
|
function(docs_project name)
|
|
cmake_parse_arguments(PARSE_ARGV 1 "" "" "VERSION;DESCRIPTION;HOMEPAGE_URL" LANGUAGES)
|
|
set(PROJECT_NAME "${name}" PARENT_SCOPE)
|
|
if(DEFINED _VERSION)
|
|
set(PROJECT_VERSION "${_VERSION}" PARENT_SCOPE)
|
|
string(REGEX MATCH "^[0-9]+(\\.[0-9]+)*" versions "${_VERSION}")
|
|
string(REPLACE . ";" versions "${versions}")
|
|
set(suffixes MAJOR MINOR PATCH TWEAK)
|
|
while(NOT versions STREQUAL "" AND NOT suffixes STREQUAL "")
|
|
list_pop_front(versions version)
|
|
list_pop_front(suffixes suffix)
|
|
set("PROJECT_VERSION_${suffix}" "${version}" PARENT_SCOPE)
|
|
endwhile()
|
|
endif()
|
|
if(DEFINED _DESCRIPTION)
|
|
set(PROJECT_DESCRIPTION "${_DESCRIPTION}" PARENT_SCOPE)
|
|
endif()
|
|
if(DEFINED _HOMEPAGE_URL)
|
|
set(PROJECT_HOMEPAGE_URL "${_HOMEPAGE_URL}" PARENT_SCOPE)
|
|
endif()
|
|
endfunction()
|
|
|
|
include("${bin}/docs-ci.project.cmake")
|
|
|
|
# ---- Generate docs ----
|
|
|
|
if(NOT DEFINED DOXYGEN_OUTPUT_DIRECTORY)
|
|
set(DOXYGEN_OUTPUT_DIRECTORY "${bin}/docs")
|
|
endif()
|
|
set(out "${DOXYGEN_OUTPUT_DIRECTORY}")
|
|
|
|
foreach(file IN ITEMS Doxyfile conf.py)
|
|
configure_file("${src}/docs/${file}.in" "${bin}/docs/${file}" @ONLY)
|
|
endforeach()
|
|
|
|
set(mcss_script "${mcss_SOURCE_DIR}/documentation/doxygen.py")
|
|
set(config "${bin}/docs/conf.py")
|
|
|
|
file(REMOVE_RECURSE "${out}/html" "${out}/xml")
|
|
|
|
execute_process(
|
|
COMMAND "${Python3_EXECUTABLE}" "${mcss_script}" "${config}"
|
|
WORKING_DIRECTORY "${bin}/docs"
|
|
RESULT_VARIABLE result
|
|
)
|
|
if(NOT result EQUAL "0")
|
|
message(FATAL_ERROR "m.css returned with ${result}")
|
|
endif()
|