aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source/CMakeLists.txt5
-rw-r--r--source/doc/CMakeLists.txt79
-rw-r--r--source/doc/requirements.txt2
3 files changed, 83 insertions, 3 deletions
diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt
index 82beacd..984e085 100644
--- a/source/CMakeLists.txt
+++ b/source/CMakeLists.txt
@@ -13,6 +13,7 @@ option(BUILD_EXAMPLES "Build the library examples" OFF)
# Project Components
-add_subdirectory("lib")
-add_subdirectory("tests")
+add_subdirectory("doc")
add_subdirectory("examples")
+add_subdirectory("lib")
+add_subdirectory("tests") \ No newline at end of file
diff --git a/source/doc/CMakeLists.txt b/source/doc/CMakeLists.txt
new file mode 100644
index 0000000..616b040
--- /dev/null
+++ b/source/doc/CMakeLists.txt
@@ -0,0 +1,79 @@
+find_package("Python3"
+ REQUIRED
+ COMPONENTS "Interpreter"
+)
+
+set(DOCENV_DIR "${PROJECT_BINARY_DIR}/docenv")
+
+if(NOT EXISTS "${DOCENV_DIR}")
+ message(STATUS "Creating Python virtual environment")
+ execute_process(COMMAND "${Python3_EXECUTABLE}"
+ "-m"
+ "venv"
+ "${DOCENV_DIR}"
+ OUTPUT_QUIET
+ )
+ message(STATUS "Installing documentation requirements")
+ execute_process(COMMAND
+ "${DOCENV_DIR}/bin/python"
+ "-m"
+ "pip"
+ "install"
+ "-r"
+ "${CMAKE_CURRENT_SOURCE_DIR}/requirements.txt"
+ OUTPUT_QUIET
+ )
+else()
+ message(STATUS "Reusing existing Python virtual environment")
+endif()
+
+file(GLOB SOURCES
+ CONFIGURE_DEPENDS
+ "${CMAKE_CURRENT_SOURCE_DIR}/src/*"
+ "${PROJECT_SOURCE_DIR}/examples/src/*"
+)
+
+add_custom_target("docs"
+ ALL
+ DEPENDS
+ "${CMAKE_CURRENT_BINARY_DIR}/html/index.html"
+ "${CMAKE_CURRENT_BINARY_DIR}/man/newtype.3"
+ WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
+ COMMENT "Building documentation"
+)
+
+add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/html/index.html"
+ COMMAND "${DOCENV_DIR}/bin/sphinx-build"
+ "-b"
+ "singlehtml"
+ "-q"
+ "${CMAKE_CURRENT_SOURCE_DIR}/src"
+ "${CMAKE_CURRENT_BINARY_DIR}/html"
+ DEPENDS ${SOURCES}
+ WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
+ COMMENT "Compiling HTML documentation"
+)
+
+add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/man/newtype.3"
+ COMMAND "${DOCENV_DIR}/bin/sphinx-build"
+ "-b"
+ "man"
+ "-q"
+ "${CMAKE_CURRENT_SOURCE_DIR}/src"
+ "${CMAKE_CURRENT_BINARY_DIR}/man"
+ DEPENDS ${SOURCES}
+ WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
+ COMMENT "Compiling man page"
+)
+
+install(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/html"
+ TYPE DOC
+ PATTERN ".doctrees" EXCLUDE
+ PATTERN ".buildinfo" EXCLUDE
+ PATTERN ".nojekyll" EXCLUDE
+)
+
+install(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/man/"
+ TYPE MAN
+ PATTERN ".doctrees" EXCLUDE
+)
diff --git a/source/doc/requirements.txt b/source/doc/requirements.txt
index b80a564..47b0805 100644
--- a/source/doc/requirements.txt
+++ b/source/doc/requirements.txt
@@ -1 +1 @@
-sphinx==2.4.2
+sphinx~=7.0