Skip to content

Commit

Permalink
Merge pull request #4 from slurps-mad-rips/main
Browse files Browse the repository at this point in the history
Small refactor for tests/CMakeLists.txt
  • Loading branch information
ThePhD committed Feb 22, 2021
2 parents 72772ce + 2569b6c commit a6835fd
Show file tree
Hide file tree
Showing 3 changed files with 157 additions and 115 deletions.
13 changes: 6 additions & 7 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -33,13 +33,12 @@ cmake_policy(VERSION 3.15)
# # Project declaration
# informs about the project, gives a description, version and MOST IMPORTANTLY
# the languages the project is going to use. Required.
set(ZTD_TEXT_PROJECT_NAME ztd.text)
set(ZTD_TEXT_PROJECT_VERSION 0.0.0)
set(ZTD_TEXT_PROJECT_DESCRIPTION "A spicy text library.")
project(${ZTD_TEXT_PROJECT_NAME}
VERSION ${ZTD_TEXT_PROJECT_VERSION}
DESCRIPTION ${ZTD_TEXT_PROJECT_DESCRIPTION}
LANGUAGES C CXX)

project(ztd.text
VERSION 0.0.0
DESCRIPTION "A spicy text library."
HOMEPAGE_URL "https://ztdtext.readthedocs.io/en/latest/"
LANGUAGES C CXX)

# # Modules
# Include modules useful to the project, whether locally made in our own cmake DIRECTORY
Expand Down
50 changes: 43 additions & 7 deletions cmake/FindSphinx.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,49 @@
#
# ============================================================================>

find_program(SPHINX_EXECUTABLE
NAMES sphinx-build sphinx-build.exe
DOC "Path to sphinx-build executable")

include(FindPackageHandleStandardArgs)
include(FeatureSummary)

find_program(Sphinx_Build_EXECUTABLE NAMES sphinx-build DOC "Path to sphinx-build executable")

if (Sphinx_Build_EXECUTABLE)
set(Sphinx_Build_FOUND YES)
endif()

if (Sphinx_Build_FOUND)
execute_process(
COMMAND ${Sphinx_Build_EXECUTABLE} --version
OUTPUT_VARIABLE Sphinx_Build_VERSION_OUTPUT
OUTPUT_STRIP_TRAILING_WHITESPACE
ENCODING UTF-8)
if (Sphinx_Build_VERSION_OUTPUT)
string(REGEX
MATCH "[^0-9]*([0-9]+)[.]([0-9]+)?[.]?([0-9]+)?[.]?([0-9]+)?.*"
Sphinx_Build_VERSION_CHECK ${Sphinx_Build_VERSION_OUTPUT)
endif()
if (Sphinx_Build_VERSION_CHECK)
string(JOIN "." Sphinx_Build_VERSION
${CMAKE_MATCH_1}
${CMAKE_MATCH_2}
${CMAKE_MATCH_3}
${CMAKE_MATCH_4})
set(Sphinx_Build_VERSION "${Sphinx_Build_VERSION}" CACHE STRING "sphinx-build version" FORCE)
endif()
endif()
# Handle standard arguments to find_package like REQUIRED/QUIET/etc...
find_package_handle_standard_args(Sphinx
"Failed to find sphinx-build executable."
SPHINX_EXECUTABLE)
REQUIRED_VARS Sphinx_Build_EXECUTABLE
VERSION_VAR Sphinx_Build_VERSION
HANDLE_COMPONENTS)
set_package_properties(Sphinx
PROPERTIES
DESCRIPTION "Sphinx Documentation Generator"
URL "https://sphinx-doc.org")
if (Sphinx_Build_FOUND AND NOT TARGET Sphinx::Build)
add_executable(Sphinx::Build IMPORTED)
set_property(TARGET Sphinx::Build PROPERTY IMPORTED_LOCATION ${Sphinx_Build_EXECUTABLE})
set_property(TARGET Sphinx::Build PROPERTY VERSION ${Sphinx_Build_VERSION})
mark_as_advanced(Sphinx_Build_EXECUTABLE Sphinx_Build_VERSION)
endif()
209 changes: 108 additions & 101 deletions documentation/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,101 +1,108 @@
# =============================================================================
#
# ztd.text
# Copyright © 2021 JeanHeyd "ThePhD" Meneide and Shepherd's Oasis, LLC
# Contact: opensource@soasis.org
#
# Commercial License Usage
# Licensees holding valid commercial ztd.text licenses may use this file in
# accordance with the commercial license agreement provided with the
# Software or, alternatively, in accordance with the terms contained in
# a written agreement between you and Shepherd's Oasis, LLC.
# For licensing terms and conditions see your agreement. For
# further information contact opensource@soasis.org.
#
# Apache License Version 2 Usage
# Alternatively, this file may be used under the terms of Apache License
# Version 2.0 (the "License") for non-commercial use; you may not use this
# file except in compliance with the License. You may obtain a copy of the
# License at
#
# http:#www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# ============================================================================>

find_package(Doxygen REQUIRED)
find_package(Python3 REQUIRED)
if (NOT ZTD_TEXT_DOCUMENTATION_NO_SPHINX)
find_package(Sphinx REQUIRED)
endif()

# Find all the public headers
file(GLOB_RECURSE ztd_text_public_headers LIST_DIRECTORIES false CONFIGURE_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/../include/**.*)
# make a list copy for use with dependency tracking later down below
list(LENGTH ztd_text_public_headers ztd_text_public_headers_size)
list(SUBLIST ztd_text_public_headers 0 ${ztd_text_public_headers_size} ztd_text_doxygen_public_headers)
# Remove every single public header
list(FILTER ztd_text_doxygen_public_headers EXCLUDE REGEX /detail/*)
# separate text with spaces and surround them with quotes for Doxygen to understand them all
list(JOIN ztd_text_doxygen_public_headers "\" \"" ztd_text_doxygen_public_headers)
set(ztd_text_doxygen_public_headers \"${ztd_text_doxygen_public_headers}\")

set(ZTD_TEXT_DOXYGEN_PROJECT_NAME ${ZTD_TEXT_PROJECT_NAME})
set(ZTD_TEXT_DOXYGEN_PROJECT_VERSION ${ZTD_TEXT_PROJECT_VERSION})
set(ZTD_TEXT_DOXYGEN_PROJECT_DESCRIPTION ${ZTD_TEXT_PROJECT_DESCRIPTION})
set(ZTD_TEXT_DOXYGEN_INPUT ${ztd_text_doxygen_public_headers})
set(ZTD_TEXT_DOXYGEN_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR}/doxygen)
set(ZTD_TEXT_DOXYGEN_XML_OUTPUT_DIR ${ZTD_TEXT_DOXYGEN_OUTPUT_DIR}/xml)
set(ZTD_TEXT_DOXYGEN_HTML_OUTPUT_DIR ${ZTD_TEXT_DOXYGEN_OUTPUT_DIR}/html)
set(ZTD_TEXT_DOXYGEN_INDEX_FILE ${ZTD_TEXT_DOXYGEN_XML_OUTPUT_DIR}/index.xml)
set(ZTD_TEXT_DOXYFILE_IN ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in)
set(ZTD_TEXT_DOXYFILE_OUT ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile)
set(ZTD_TEXT_SPHINX_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/source)
set(ZTD_TEXT_SPHINX_BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/sphinx)

# Get all Sphinx source files
file(GLOB_RECURSE ztd_text_sphinx_sources LIST_DIRECTORIES false CONFIGURE_DEPENDS ${ZTD_TEXT_SPHINX_SOURCE_DIR}/**.*)

#Replace variables inside @@ with the current values
configure_file(${ZTD_TEXT_DOXYFILE_IN} ${ZTD_TEXT_DOXYFILE_OUT} @ONLY)

# Ensure Doxygen/Sphinx won't crash because it doesn't create directories for us
file(MAKE_DIRECTORY ${ZTD_TEXT_DOXYGEN_OUTPUT_DIR})
file(MAKE_DIRECTORY ${ZTD_TEXT_DOXYGEN_XML_OUTPUT_DIR})
file(MAKE_DIRECTORY ${ZTD_TEXT_DOXYGEN_HTML_OUTPUT_DIR})
file(MAKE_DIRECTORY ${ZTD_TEXT_SPHINX_BUILD_DIR})

set_directory_properties(PROPERTIES ADDITIONAL_CLEAN_FILES
"${ZTD_TEXT_DOXYGEN_OUTPUT_DIR};${ZTD_TEXT_DOXYGEN_XML_OUTPUT_DIR};${ZTD_TEXT_DOXYGEN_HTML_OUTPUT_DIR};${ZTD_TEXT_SPHINX_BUILD_DIR}"
)

add_custom_command(OUTPUT ${ZTD_TEXT_DOXYGEN_INDEX_FILE}
COMMAND ${DOXYGEN_EXECUTABLE} ${ZTD_TEXT_DOXYFILE_OUT}
MAIN_DEPENDENCY ${ZTD_TEXT_DOXYFILE_IN} ${ZTD_TEXT_DOXYFILE_OUT}
DEPENDS ${ztd_text_public_headers}
COMMENT "[ztd.text/documentation] Generating Doxygen XML..."
)
add_custom_target(ztd.text.documentation.doxygen ALL DEPENDS ${ZTD_TEXT_DOXYGEN_INDEX_FILE})

if (NOT ZTD_TEXT_DOCUMENTATION_NO_SPHINX)
add_custom_target(ztd.text.documentation.sphinx ALL
COMMAND ${SPHINX_EXECUTABLE} -b html ${ZTD_TEXT_SPHINX_SOURCE_DIR} ${ZTD_TEXT_SPHINX_BUILD_DIR}
-Dbreathe_projects.ztd.text=${ZTD_TEXT_DOXYGEN_XML_OUTPUT_DIR}
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
DEPENDS ${ZTD_TEXT_DOXYGEN_INDEX_FILE} ${ztd_text_sphinx_sources}
COMMENT "[ztd.text/documentation] Generating Sphinx documentation..."
)

add_dependencies(ztd.text.documentation.sphinx ztd.text.documentation.doxygen)
endif()

# For the install target
include(GNUInstallDirs)
install(DIRECTORY ${ZTD_TEXT_SPHINX_BUILD_DIR}
DESTINATION ${CMAKE_INSTALL_DOCDIR}
)
# =============================================================================
#
# ztd.text
# Copyright © 2021 JeanHeyd "ThePhD" Meneide and Shepherd's Oasis, LLC
# Contact: opensource@soasis.org
#
# Commercial License Usage
# Licensees holding valid commercial ztd.text licenses may use this file in
# accordance with the commercial license agreement provided with the
# Software or, alternatively, in accordance with the terms contained in
# a written agreement between you and Shepherd's Oasis, LLC.
# For licensing terms and conditions see your agreement. For
# further information contact opensource@soasis.org.
#
# Apache License Version 2 Usage
# Alternatively, this file may be used under the terms of Apache License
# Version 2.0 (the "License") for non-commercial use; you may not use this
# file except in compliance with the License. You may obtain a copy of the
# License at
#
# http:#www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# ============================================================================>

find_package(Doxygen REQUIRED)
find_package(Python3 REQUIRED)
find_package(Sphinx QUIET)

# Find all the public headers
file(GLOB_RECURSE ztd_text_public_headers
LIST_DIRECTORIES NO
CONFIGURE_DEPENDS ${PROJECT_SOURCE_DIR}/include/**.*)
# make a list copy for use with dependency tracking later down below
set(ztd_text_doxygen_public_headers ${ztd_text_public_headers})
# Remove every single public header
list(FILTER ztd_text_doxygen_public_headers EXCLUDE REGEX /detail/.*)
# separate text with spaces and surround them with quotes for Doxygen to understand them all
list(TRANSFORM ztd_text_doxygen_public_headers REPLACE ".*" [["\1"]])
list(JOIN ztd_text_doxygen_public_headers " " ztd_text_doxygen_public_headers)

set(ZTD_TEXT_DOXYGEN_PROJECT_DESCRIPTION ${PROJECT_DESCRIPTION})
set(ZTD_TEXT_DOXYGEN_PROJECT_VERSION ${PROJECT_VERSION})
set(ZTD_TEXT_DOXYGEN_PROJECT_NAME ${PROJECT_NAME})
set(ZTD_TEXT_DOXYGEN_INPUT ${ztd_text_doxygen_public_headers})
set(ZTD_TEXT_DOXYGEN_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR}/doxygen)
set(ZTD_TEXT_DOXYGEN_XML_OUTPUT_DIR ${ZTD_TEXT_DOXYGEN_OUTPUT_DIR}/xml)
set(ZTD_TEXT_DOXYGEN_HTML_OUTPUT_DIR ${ZTD_TEXT_DOXYGEN_OUTPUT_DIR}/html)
set(ZTD_TEXT_DOXYGEN_INDEX_FILE ${ZTD_TEXT_DOXYGEN_XML_OUTPUT_DIR}/index.xml)
set(ZTD_TEXT_DOXYFILE_IN ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in)
set(ZTD_TEXT_DOXYFILE_OUT ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile)
set(ZTD_TEXT_SPHINX_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/source)
set(ZTD_TEXT_SPHINX_BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/sphinx)

# Get all Sphinx source files
file(GLOB_RECURSE ztd_text_sphinx_sources
LIST_DIRECTORIES NO
CONFIGURE_DEPENDS ${ZTD_TEXT_SPHINX_SOURCE_DIR}/**.*)

#Replace variables inside @@ with the current values
configure_file(${ZTD_TEXT_DOXYFILE_IN} ${ZTD_TEXT_DOXYFILE_OUT} @ONLY)

# Ensure Doxygen/Sphinx won't crash because it doesn't create directories for us
file(MAKE_DIRECTORY ${ZTD_TEXT_DOXYGEN_OUTPUT_DIR})
file(MAKE_DIRECTORY ${ZTD_TEXT_DOXYGEN_XML_OUTPUT_DIR})
file(MAKE_DIRECTORY ${ZTD_TEXT_DOXYGEN_HTML_OUTPUT_DIR})
file(MAKE_DIRECTORY ${ZTD_TEXT_SPHINX_BUILD_DIR})

set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_CLEAN_FILES
${ZTD_TEXT_DOXYGEN_XML_OUTPUT_DIR}
${ZTD_TEXT_DOXYGEN_HTML_OUTPUT_DIR}
${ZTD_TEXT_DOXYGEN_OUTPUT_DIR}
${ZTD_TEXT_SPHINX_BUILD_DIR})

add_custom_command(OUTPUT ${ZTD_TEXT_DOXYGEN_INDEX_FILE}
COMMAND ${DOXYGEN_EXECUTABLE} ${ZTD_TEXT_DOXYFILE_OUT}
MAIN_DEPENDENCY ${ZTD_TEXT_DOXYFILE_IN} ${ZTD_TEXT_DOXYFILE_OUT}
DEPENDS ${ztd_text_public_headers}
COMMENT "[ztd.text/documentation] Generating Doxygen XML..."
)
add_custom_target(ztd.text.documentation.doxygen ALL DEPENDS ${ZTD_TEXT_DOXYGEN_INDEX_FILE})

if (NOT ZTD_TEXT_DOCUMENTATION_NO_SPHINX)
add_custom_target(ztd.text.documentation.sphinx ALL
COMMAND Sphinx::Build
-b html
-Dbreathe_projects.ztd.text=${ZTD_TEXT_DOXYGEN_XML_OUTPUT_DIR}
${ZTD_TEXT_SPHINX_SOURCE_DIR}
${ZTD_TEXT_SPHINX_BUILD_DIR}
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
DEPENDS ${ZTD_TEXT_DOXYGEN_INDEX_FILE} ${ztd_text_sphinx_sources}
COMMENT "[ztd.text/documentation] Generating Sphinx documentation..."
COMMAND_EXPAND_LISTS
VERBATIM)

add_dependencies(ztd.text.documentation.sphinx ztd.text.documentation.doxygen)
endif()

# For the install target
include(GNUInstallDirs)
install(DIRECTORY ${ZTD_TEXT_SPHINX_BUILD_DIR}
DESTINATION ${CMAKE_INSTALL_DOCDIR}
)

0 comments on commit a6835fd

Please sign in to comment.