summaryrefslogtreecommitdiffstats
path: root/cmake/doxygen_version.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'cmake/doxygen_version.cmake')
-rw-r--r--cmake/doxygen_version.cmake96
1 files changed, 96 insertions, 0 deletions
diff --git a/cmake/doxygen_version.cmake b/cmake/doxygen_version.cmake
new file mode 100644
index 0000000..2433889
--- /dev/null
+++ b/cmake/doxygen_version.cmake
@@ -0,0 +1,96 @@
+# doxygen_version.cmake
+#
+
+# This file defines the functions and targets needed to monitor
+# doxygen VERSION file.
+#
+# The behavior of this script can be modified by defining any of these variables:
+#
+# PRE_CONFIGURE_DOXYGEN_VERSION_FILE (REQUIRED)
+# -- The path to the file that'll be configured.
+#
+# POST_CONFIGURE_DOXYGEN_VERSION_FILE (REQUIRED)
+# -- The path to the configured PRE_CONFIGURE_DOXYGEN_VERSION_FILE.
+#
+# DOXY_STATE_FILE (OPTIONAL)
+# -- The path to the file used to store the doxygen version information.
+#
+# This file is based on git_watcher.cmake
+
+# Short hand for converting paths to absolute.
+macro(PATH_TO_ABSOLUTE var_name)
+ get_filename_component(${var_name} "${${var_name}}" ABSOLUTE)
+endmacro()
+
+# Check that a required variable is set.
+macro(CHECK_REQUIRED_VARIABLE var_name)
+ if(NOT DEFINED ${var_name})
+ message(FATAL_ERROR "The \"${var_name}\" variable must be defined.")
+ endif()
+ PATH_TO_ABSOLUTE(${var_name})
+endmacro()
+
+# Check that an optional variable is set, or, set it to a default value.
+macro(CHECK_OPTIONAL_VARIABLE var_name default_value)
+ if(NOT DEFINED ${var_name})
+ set(${var_name} ${default_value})
+ endif()
+ PATH_TO_ABSOLUTE(${var_name})
+endmacro()
+
+CHECK_REQUIRED_VARIABLE(PRE_CONFIGURE_DOXYGEN_VERSION_FILE)
+CHECK_REQUIRED_VARIABLE(POST_CONFIGURE_DOXYGEN_VERSION_FILE)
+CHECK_OPTIONAL_VARIABLE(DOXY_STATE_FILE "${CMAKE_SOURCE_DIR}/VERSION")
+
+# Function: DoxygenStateChangedAction
+# Description: this function is executed when the
+# doxygen version file has changed.
+function(DoxygenStateChangedAction _state_as_list)
+ # Set variables by index, then configure the file w/ these variables defined.
+ LIST(GET _state_as_list 0 DOXYGEN_VERSION)
+ configure_file("${PRE_CONFIGURE_DOXYGEN_VERSION_FILE}" "${POST_CONFIGURE_DOXYGEN_VERSION_FILE}" @ONLY)
+endfunction()
+
+
+
+# Function: SetupDoxyMonitoring
+# Description: this function sets up custom commands that make the build system
+# check the doxygen version file before every build. If it has
+# changed, then a file is configured.
+function(SetupDoxyMonitoring)
+ add_custom_target(check_doxygen_version
+ ALL
+ DEPENDS ${PRE_CONFIGURE_DOXYGEN_VERSION_FILE}
+ BYPRODUCTS ${POST_CONFIGURE_DOXYGEN_VERSION_FILE}
+ COMMENT "Checking the doxygen version for changes..."
+ COMMAND
+ ${CMAKE_COMMAND}
+ -D_BUILD_TIME_CHECK_DOXY=TRUE
+ -DDOXY_STATE_FILE=${DOXY_STATE_FILE}
+ -DPRE_CONFIGURE_DOXYGEN_VERSION_FILE=${PRE_CONFIGURE_DOXYGEN_VERSION_FILE}
+ -DPOST_CONFIGURE_DOXYGEN_VERSION_FILE=${POST_CONFIGURE_DOXYGEN_VERSION_FILE}
+ -P "${CMAKE_CURRENT_LIST_FILE}")
+endfunction()
+
+
+
+# Function: Main
+# Description: primary entry-point to the script. Functions are selected based
+# on whether it's configure or build time.
+function(Main)
+ file(STRINGS "${DOXY_STATE_FILE}" DOXYGEN_VERSION)
+ if(_BUILD_TIME_CHECK_DOXY)
+ # Check if the doxygen version file has changed.
+ # If so, run the change action.
+ if(${DOXY_STATE_FILE} IS_NEWER_THAN ${POST_CONFIGURE_DOXYGEN_VERSION_FILE})
+ DoxygenStateChangedAction("${DOXYGEN_VERSION}")
+ endif()
+ else()
+ # >> Executes at configure time.
+ SetupDoxyMonitoring()
+ DoxygenStateChangedAction("${DOXYGEN_VERSION}")
+ endif()
+endfunction()
+
+# And off we go...
+Main()