summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDimitri van Heesch <doxygen@gmail.com>2019-07-30 12:59:58 (GMT)
committerDimitri van Heesch <doxygen@gmail.com>2019-07-30 12:59:58 (GMT)
commit3c47ea4ff918a63eb3a3e5f67354b6975c839743 (patch)
treedccdf5b5583256944297866d990b165b5f504c82
parent869602993d389ae85994aae17db26940cc44f0cf (diff)
parentcb1ef441b2a4d21cf67a59fe8e57613ba3552051 (diff)
downloadDoxygen-3c47ea4ff918a63eb3a3e5f67354b6975c839743.zip
Doxygen-3c47ea4ff918a63eb3a3e5f67354b6975c839743.tar.gz
Doxygen-3c47ea4ff918a63eb3a3e5f67354b6975c839743.tar.bz2
Merge branch 'feature/bug_gitversion' of https://github.com/albert-github/doxygen into albert-github-feature/bug_gitversion
-rw-r--r--CMakeLists.txt3
-rw-r--r--addon/doxyapp/CMakeLists.txt2
-rw-r--r--addon/doxyparse/CMakeLists.txt2
-rw-r--r--addon/doxywizard/CMakeLists.txt12
-rwxr-xr-xaddon/doxywizard/doxywizard.cpp2
-rw-r--r--addon/doxywizard/expert.cpp2
-rw-r--r--cmake/doxygen_version.cmake96
-rw-r--r--cmake/git_watcher.cmake213
-rw-r--r--libversion/CMakeLists.txt27
-rw-r--r--libversion/doxyversion.cpp.in7
-rw-r--r--libversion/gitversion.cpp.in16
-rw-r--r--libversion/version.h (renamed from addon/doxywizard/version.h)5
-rw-r--r--src/CMakeLists.txt9
-rw-r--r--src/configimpl.l9
-rw-r--r--src/context.cpp2
-rw-r--r--src/doxygen.cpp27
-rw-r--r--src/htmlgen.cpp18
-rw-r--r--src/latexgen.cpp8
-rw-r--r--src/layout.cpp2
-rw-r--r--src/resourcemgr.cpp2
-rw-r--r--src/rtfgen.cpp4
-rw-r--r--src/searchindex.cpp2
-rw-r--r--src/sqlite3gen.cpp2
-rw-r--r--src/util.cpp2
-rw-r--r--src/version.h23
-rw-r--r--src/xmlgen.cpp4
26 files changed, 432 insertions, 69 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1c95f71..2621844 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -11,7 +11,7 @@
# Documents produced by Doxygen are derivative works derived from the
# input used in their production; they are not affected by this license.
-cmake_minimum_required(VERSION 3.1.3)
+cmake_minimum_required(VERSION 3.2)
project(doxygen)
option(build_wizard "Build the GUI frontend for doxygen." OFF)
@@ -155,6 +155,7 @@ endif()
add_subdirectory(libmd5)
add_subdirectory(liblodepng)
add_subdirectory(libmscgen)
+add_subdirectory(libversion)
add_subdirectory(qtools)
add_subdirectory(vhdlparser)
add_subdirectory(src)
diff --git a/addon/doxyapp/CMakeLists.txt b/addon/doxyapp/CMakeLists.txt
index 3312f1a..f205664 100644
--- a/addon/doxyapp/CMakeLists.txt
+++ b/addon/doxyapp/CMakeLists.txt
@@ -2,6 +2,7 @@ find_package(Iconv)
include_directories(
${CMAKE_SOURCE_DIR}/src
+ ${CMAKE_SOURCE_DIR}/libversion
${GENERATED_SRC}
${CMAKE_SOURCE_DIR}/qtools
${ICONV_INCLUDE_DIR}
@@ -22,6 +23,7 @@ qtools
md5
lodepng
mscgen
+version
doxycfg
vhdlparser
${ICONV_LIBRARIES}
diff --git a/addon/doxyparse/CMakeLists.txt b/addon/doxyparse/CMakeLists.txt
index 7741dab..e76f031 100644
--- a/addon/doxyparse/CMakeLists.txt
+++ b/addon/doxyparse/CMakeLists.txt
@@ -2,6 +2,7 @@ find_package(Iconv)
include_directories(
${CMAKE_SOURCE_DIR}/src
+ ${CMAKE_SOURCE_DIR}/libversion
${GENERATED_SRC}
${CMAKE_SOURCE_DIR}/qtools
${ICONV_INCLUDE_DIR}
@@ -22,6 +23,7 @@ qtools
md5
lodepng
mscgen
+version
doxycfg
vhdlparser
${ICONV_LIBRARIES}
diff --git a/addon/doxywizard/CMakeLists.txt b/addon/doxywizard/CMakeLists.txt
index a89864d..9aba4e4 100644
--- a/addon/doxywizard/CMakeLists.txt
+++ b/addon/doxywizard/CMakeLists.txt
@@ -30,6 +30,7 @@ endif()
include_directories(
.
+ ${CMAKE_SOURCE_DIR}/libversion
${CMAKE_SOURCE_DIR}/src
${CMAKE_SOURCE_DIR}/qtools
${GENERATED_SRC}
@@ -57,8 +58,10 @@ CONTENT "#ifndef SETTINGS_H
set_source_files_properties(${GENERATED_SRC_WIZARD}/settings.h PROPERTIES GENERATED 1)
# generate version.cpp
-file(GENERATE OUTPUT ${GENERATED_SRC_WIZARD}/version.cpp
- CONTENT "char versionString[]=\"${VERSION}\";"
+add_custom_command(
+ COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/src/version.py ${VERSION} > ${GENERATED_SRC_WIZARD}/version.cpp
+ DEPENDS ${CMAKE_SOURCE_DIR}/VERSION ${CMAKE_SOURCE_DIR}/src/version.py
+ OUTPUT ${GENERATED_SRC_WIZARD}/version.cpp
)
set_source_files_properties(${GENERATED_SRC_WIZARD}/version.cpp PROPERTIES GENERATED 1)
@@ -93,7 +96,6 @@ inputstring.cpp
inputint.cpp
inputstrlist.cpp
${GENERATED_SRC_WIZARD}/settings.h
-${GENERATED_SRC_WIZARD}/version.cpp
${GENERATED_SRC_WIZARD}/config_doxyw.cpp
${GENERATED_SRC_WIZARD}/configdoc.cpp
${doxywizard_MOC}
@@ -102,9 +104,9 @@ doxywizard.rc
)
if(Qt5Core_FOUND)
- target_link_libraries(doxywizard Qt5::Core Qt5::Gui Qt5::Widgets Qt5::Xml)
+ target_link_libraries(doxywizard Qt5::Core Qt5::Gui Qt5::Widgets Qt5::Xml version)
else()
- target_link_libraries(doxywizard ${QT_LIBRARIES} ${QT_QTMAIN_LIBRARY})
+ target_link_libraries(doxywizard ${QT_LIBRARIES} ${QT_QTMAIN_LIBRARY} version)
endif()
install(TARGETS doxywizard DESTINATION bin)
diff --git a/addon/doxywizard/doxywizard.cpp b/addon/doxywizard/doxywizard.cpp
index 56378ed..02e8cd0 100755
--- a/addon/doxywizard/doxywizard.cpp
+++ b/addon/doxywizard/doxywizard.cpp
@@ -216,7 +216,7 @@ void MainWindow::about()
QString msg;
QTextStream t(&msg,QIODevice::WriteOnly);
t << QString::fromLatin1("<qt><center>A tool to configure and run doxygen version ")+
- QString::fromLatin1(versionString)+
+ QString::fromLatin1(getVersion())+
QString::fromLatin1(" on your source files.</center><p><br>"
"<center>Written by<br> Dimitri van Heesch<br>&copy; 2000-2015</center><p>"
"</qt>");
diff --git a/addon/doxywizard/expert.cpp b/addon/doxywizard/expert.cpp
index 44dea78..c875d8d 100644
--- a/addon/doxywizard/expert.cpp
+++ b/addon/doxywizard/expert.cpp
@@ -781,7 +781,7 @@ void Expert::saveTopic(QTextStream &t,QDomElement &elem,QTextCodec *codec,
bool Expert::writeConfig(QTextStream &t,bool brief)
{
// write global header
- t << "# Doxyfile " << versionString << endl << endl;
+ t << "# Doxyfile " << getVersion() << endl << endl;
if (!brief)
{
t << convertToComment(m_header);
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()
diff --git a/cmake/git_watcher.cmake b/cmake/git_watcher.cmake
new file mode 100644
index 0000000..6447b86
--- /dev/null
+++ b/cmake/git_watcher.cmake
@@ -0,0 +1,213 @@
+# git_watcher.cmake
+#
+# License: MIT
+# Source: https://raw.githubusercontent.com/andrew-hardin/cmake-git-version-tracking/master/git_watcher.cmake
+
+
+# This file defines the functions and targets needed to monitor
+# the state of a git repo. If the state changes (e.g. a commit is made),
+# then a file gets reconfigured.
+#
+# The behavior of this script can be modified by defining any of these variables:
+#
+# PRE_CONFIGURE_GIT_VERSION_FILE (REQUIRED)
+# -- The path to the file that'll be configured.
+#
+# POST_CONFIGURE_GIT_VERSION_FILE (REQUIRED)
+# -- The path to the configured PRE_CONFIGURE_GIT_VERSION_FILE.
+#
+# GIT_STATE_FILE (OPTIONAL)
+# -- The path to the file used to store the previous build's git state.
+# Defaults to the current binary directory.
+#
+# GIT_WORKING_DIR (OPTIONAL)
+# -- The directory from which git commands will be run.
+# Defaults to the directory with the top level CMakeLists.txt.
+#
+# GIT_EXECUTABLE (OPTIONAL)
+# -- The path to the git executable. It'll automatically be set if the
+# user doesn't supply a path.
+#
+# Script design:
+# - This script was designed similar to a Python application
+# with a Main() function. I wanted to keep it compact to
+# simplify "copy + paste" usage.
+#
+# - This script is made to operate in two CMake contexts:
+# 1. Configure time context (when build files are created).
+# 2. Build time context (called via CMake -P)
+# If you see something odd (e.g. the NOT DEFINED clauses),
+# consider that it can run in one of two contexts.
+
+# 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_GIT_VERSION_FILE)
+CHECK_REQUIRED_VARIABLE(POST_CONFIGURE_GIT_VERSION_FILE)
+CHECK_OPTIONAL_VARIABLE(GIT_STATE_FILE "${GENERATED_SRC}/git_state")
+#CHECK_REQUIRED_VARIABLE(GIT_STATE_FILE)
+CHECK_OPTIONAL_VARIABLE(GIT_WORKING_DIR "${CMAKE_SOURCE_DIR}")
+
+# Check the optional git variable.
+# If it's not set, we'll try to find it using the CMake packaging system.
+if(NOT DEFINED GIT_EXECUTABLE)
+ find_package(Git QUIET REQUIRED)
+endif()
+CHECK_REQUIRED_VARIABLE(GIT_EXECUTABLE)
+
+
+
+# Function: GitStateChangedAction
+# Description: this function is executed when the state of the git
+# repo changes (e.g. a commit is made).
+function(GitStateChangedAction _state_as_list)
+ # Set variables by index, then configure the file w/ these variables defined.
+ LIST(GET _state_as_list 0 GIT_RETRIEVED_STATE)
+ LIST(GET _state_as_list 1 GIT_HEAD_SHA1)
+ LIST(GET _state_as_list 2 GIT_IS_DIRTY)
+ configure_file("${PRE_CONFIGURE_GIT_VERSION_FILE}" "${POST_CONFIGURE_GIT_VERSION_FILE}" @ONLY)
+endfunction()
+
+
+
+# Function: GetGitState
+# Description: gets the current state of the git repo.
+# Args:
+# _working_dir (in) string; the directory from which git commands will be executed.
+# _state (out) list; a collection of variables representing the state of the
+# repository (e.g. commit SHA).
+function(GetGitState _working_dir _state)
+
+ # Get the hash for HEAD.
+ set(_success "true")
+ execute_process(COMMAND
+ "${GIT_EXECUTABLE}" rev-parse --verify HEAD
+ WORKING_DIRECTORY "${_working_dir}"
+ RESULT_VARIABLE res
+ OUTPUT_VARIABLE _hashvar
+ ERROR_QUIET
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+ if(NOT res EQUAL 0)
+ set(_success "false")
+ set(_hashvar "GIT-NOTFOUND")
+ endif()
+
+ # Get whether or not the working tree is dirty.
+ execute_process(COMMAND
+ "${GIT_EXECUTABLE}" status --porcelain
+ WORKING_DIRECTORY "${_working_dir}"
+ RESULT_VARIABLE res
+ OUTPUT_VARIABLE out
+ ERROR_QUIET
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+ if(NOT res EQUAL 0)
+ set(_success "false")
+ set(_dirty "false")
+ else()
+ if(NOT "${out}" STREQUAL "")
+ set(_dirty "true")
+ else()
+ set(_dirty "false")
+ endif()
+ endif()
+
+ # Return a list of our variables to the parent scope.
+ set(${_state} ${_success} ${_hashvar} ${_dirty} PARENT_SCOPE)
+endfunction()
+
+
+
+# Function: CheckGit
+# Description: check if the git repo has changed. If so, update the state file.
+# Args:
+# _working_dir (in) string; the directory from which git commands will be ran.
+# _state_changed (out) bool; whether or no the state of the repo has changed.
+# _state (out) list; the repository state as a list (e.g. commit SHA).
+function(CheckGit _working_dir _state_changed _state)
+
+ # Get the current state of the repo.
+ GetGitState("${_working_dir}" state)
+
+ # Set the output _state variable.
+ # (Passing by reference in CMake is awkward...)
+ set(${_state} ${state} PARENT_SCOPE)
+
+ # Check if the state has changed compared to the backup on disk.
+ if(EXISTS "${GIT_STATE_FILE}")
+ file(READ "${GIT_STATE_FILE}" OLD_HEAD_CONTENTS)
+ if(OLD_HEAD_CONTENTS STREQUAL "${state}")
+ # State didn't change.
+ set(${_state_changed} "false" PARENT_SCOPE)
+ return()
+ endif()
+ endif()
+
+ # The state has changed.
+ # We need to update the state file on disk.
+ # Future builds will compare their state to this file.
+ file(WRITE "${GIT_STATE_FILE}" "${state}")
+ set(${_state_changed} "true" PARENT_SCOPE)
+endfunction()
+
+
+
+# Function: SetupGitMonitoring
+# Description: this function sets up custom commands that make the build system
+# check the state of git before every build. If the state has
+# changed, then a file is configured.
+function(SetupGitMonitoring)
+ add_custom_target(check_git_repository
+ ALL
+ DEPENDS ${PRE_CONFIGURE_GIT_VERSION_FILE}
+ BYPRODUCTS ${POST_CONFIGURE_GIT_VERSION_FILE}
+ COMMENT "Checking the git repository for changes..."
+ COMMAND
+ ${CMAKE_COMMAND}
+ -D_BUILD_TIME_CHECK_GIT=TRUE
+ -DGIT_WORKING_DIR=${GIT_WORKING_DIR}
+ -DGIT_EXECUTABLE=${GIT_EXECUTABLE}
+ -DGIT_STATE_FILE=${GIT_STATE_FILE}
+ -DPRE_CONFIGURE_GIT_VERSION_FILE=${PRE_CONFIGURE_GIT_VERSION_FILE}
+ -DPOST_CONFIGURE_GIT_VERSION_FILE=${POST_CONFIGURE_GIT_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)
+ if(_BUILD_TIME_CHECK_GIT)
+ # Check if the repo has changed.
+ # If so, run the change action.
+ CheckGit("${GIT_WORKING_DIR}" did_change state)
+ if(did_change)
+ GitStateChangedAction("${state}")
+ endif()
+ else()
+ # >> Executes at configure time.
+ SetupGitMonitoring()
+ endif()
+endfunction()
+
+# And off we go...
+Main()
diff --git a/libversion/CMakeLists.txt b/libversion/CMakeLists.txt
new file mode 100644
index 0000000..1a430fd
--- /dev/null
+++ b/libversion/CMakeLists.txt
@@ -0,0 +1,27 @@
+# vim:ts=4:sw=4:expandtab:autoindent:
+
+# setup information for doxygen version handling
+set(PRE_CONFIGURE_DOXYGEN_VERSION_FILE "${CMAKE_SOURCE_DIR}/libversion/doxyversion.cpp.in")
+set(POST_CONFIGURE_DOXYGEN_VERSION_FILE "${GENERATED_SRC}/doxyversion.cpp")
+
+# setup information for git version handling
+set(PRE_CONFIGURE_GIT_VERSION_FILE "${CMAKE_SOURCE_DIR}/libversion/gitversion.cpp.in")
+set(POST_CONFIGURE_GIT_VERSION_FILE "${GENERATED_SRC}/gitversion.cpp")
+
+include(${CMAKE_SOURCE_DIR}/cmake/git_watcher.cmake)
+include(${CMAKE_SOURCE_DIR}/cmake/doxygen_version.cmake)
+
+include_directories(
+ .
+)
+
+add_library(version STATIC
+ ${POST_CONFIGURE_DOXYGEN_VERSION_FILE}
+ ${POST_CONFIGURE_GIT_VERSION_FILE}
+)
+
+add_dependencies( version check_git_repository )
+add_dependencies( version check_doxygen_version )
+
+set_source_files_properties(${POST_CONFIGURE_GIT_VERSION_FILE} PROPERTIES GENERATED 1)
+set_source_files_properties(${POST_CONFIGURE_DOXYGEN_VERSION_FILE} PROPERTIES GENERATED 1)
diff --git a/libversion/doxyversion.cpp.in b/libversion/doxyversion.cpp.in
new file mode 100644
index 0000000..11bca8d
--- /dev/null
+++ b/libversion/doxyversion.cpp.in
@@ -0,0 +1,7 @@
+#include "version.h"
+
+char *getVersion(void)
+{
+ static char versionString[] = "@DOXYGEN_VERSION@";
+ return versionString;
+}
diff --git a/libversion/gitversion.cpp.in b/libversion/gitversion.cpp.in
new file mode 100644
index 0000000..164b50b
--- /dev/null
+++ b/libversion/gitversion.cpp.in
@@ -0,0 +1,16 @@
+#include <string.h>
+#include <version.h>
+
+/* - On some systems git is not installed or
+ * installed on a place where FindGit.cmake cannot find it
+ * - No git information is present (no .git directory)
+ * in those cases clear the gitVersionString (would have string GIT-NOTFOUND).
+ */
+char *getGitVersion(void)
+{
+ static char gitVersionString[100];
+ strcpy(gitVersionString,"@GIT_HEAD_SHA1@");
+ strcat(gitVersionString,!strcmp("@GIT_IS_DIRTY@","true")?"*":"");
+ if (!strcmp("@GIT_HEAD_SHA1@", "GIT-NOTFOUND")) gitVersionString[0] = '\0';
+ return gitVersionString;
+}
diff --git a/addon/doxywizard/version.h b/libversion/version.h
index 16bf9df..a656e74 100644
--- a/addon/doxywizard/version.h
+++ b/libversion/version.h
@@ -17,7 +17,6 @@
#ifndef VERSION_H
#define VERSION_H
-
-extern char versionString[];
-
+char *getVersion(void);
+char *getGitVersion(void);
#endif
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 9721bf0..06e0e44 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -5,6 +5,7 @@ include_directories(
${CMAKE_SOURCE_DIR}/libmd5
${CMAKE_SOURCE_DIR}/liblodepng
${CMAKE_SOURCE_DIR}/libmscgen
+ ${CMAKE_SOURCE_DIR}/libversion
${CMAKE_SOURCE_DIR}/vhdlparser
${CMAKE_SOURCE_DIR}/src
${CLANG_INCLUDEDIR}
@@ -32,12 +33,6 @@ CONTENT "#ifndef SETTINGS_H
set_source_files_properties(${GENERATED_SRC}/settings.h PROPERTIES GENERATED 1)
-# generate version.cpp
-file(GENERATE OUTPUT ${GENERATED_SRC}/version.cpp
- CONTENT "char versionString[]=\"${VERSION}\";"
-)
-set_source_files_properties(${GENERATED_SRC}/version.cpp PROPERTIES GENERATED 1)
-
# configvalues.h
add_custom_command(
COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/src/configgen.py -maph ${CMAKE_SOURCE_DIR}/src/config.xml > ${GENERATED_SRC}/configvalues.h
@@ -142,7 +137,6 @@ add_library(_doxygen STATIC
${GENERATED_SRC}/lang_cfg.h
${GENERATED_SRC}/settings.h
${GENERATED_SRC}/layout_default.xml.h
- ${GENERATED_SRC}/version.cpp
${GENERATED_SRC}/ce_parse.h
${GENERATED_SRC}/configvalues.h
${GENERATED_SRC}/resources.cpp
@@ -286,6 +280,7 @@ target_link_libraries(doxygen
md5
lodepng
mscgen
+ version
vhdlparser
${SQLITE3_LIBRARIES}
${ICONV_LIBRARIES}
diff --git a/src/configimpl.l b/src/configimpl.l
index bc08cbf..72c826d 100644
--- a/src/configimpl.l
+++ b/src/configimpl.l
@@ -943,7 +943,7 @@ void ConfigImpl::writeTemplate(FTextStream &t,bool sl,bool upd)
{
t << takeStartComment() << endl;
}
- t << "# Doxyfile " << versionString << endl << endl;
+ t << "# Doxyfile " << getVersion() << endl << endl;
if (!sl)
{
t << convertToComment(m_header,"");
@@ -964,7 +964,12 @@ void ConfigImpl::writeTemplate(FTextStream &t,bool sl,bool upd)
void ConfigImpl::compareDoxyfile(FTextStream &t)
{
- t << "# Difference with default Doxyfile " << versionString << endl;
+ t << "# Difference with default Doxyfile " << getVersion();
+ if (strlen(getGitVersion()))
+ {
+ t << " (" << getGitVersion() << ")";
+ }
+ t << endl;
QListIterator<ConfigOption> it = iterator();
ConfigOption *option;
for (;(option=it.current());++it)
diff --git a/src/context.cpp b/src/context.cpp
index 66206b1..49c9afa 100644
--- a/src/context.cpp
+++ b/src/context.cpp
@@ -380,7 +380,7 @@ class DoxygenContext::Private
public:
TemplateVariant version() const
{
- return versionString;
+ return getVersion();
}
TemplateVariant date() const
{
diff --git a/src/doxygen.cpp b/src/doxygen.cpp
index 0d05f13..92e5292 100644
--- a/src/doxygen.cpp
+++ b/src/doxygen.cpp
@@ -10129,7 +10129,14 @@ static void devUsage()
static void usage(const char *name)
{
- msg("Doxygen version %s\nCopyright Dimitri van Heesch 1997-2015\n\n",versionString);
+ if (strlen(getGitVersion()))
+ {
+ msg("Doxygen version %s (%s)\nCopyright Dimitri van Heesch 1997-2015\n\n",getVersion(),getGitVersion());
+ }
+ else
+ {
+ msg("Doxygen version %s\nCopyright Dimitri van Heesch 1997-2015\n\n",getVersion());
+ }
msg("You can use doxygen in a number of ways:\n\n");
msg("1) Use doxygen to generate a template configuration file:\n");
msg(" %s [-s] -g [configName]\n\n",name);
@@ -10589,7 +10596,14 @@ void readConfiguration(int argc, char **argv)
g_dumpSymbolMap = TRUE;
break;
case 'v':
- msg("%s\n",versionString);
+ if (strlen(getGitVersion()))
+ {
+ msg("%s (%s)\n",getVersion(),getGitVersion());
+ }
+ else
+ {
+ msg("%s\n",getVersion());
+ }
cleanUpDoxygen();
exit(0);
break;
@@ -10601,7 +10615,14 @@ void readConfiguration(int argc, char **argv)
}
else if (qstrcmp(&argv[optind][2],"version")==0)
{
- msg("%s\n",versionString);
+ if (strlen(getGitVersion()))
+ {
+ msg("%s (%s)\n",getVersion(),getGitVersion());
+ }
+ else
+ {
+ msg("%s\n",getVersion());
+ }
cleanUpDoxygen();
exit(0);
}
diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp
index b3abd09..402b4e4 100644
--- a/src/htmlgen.cpp
+++ b/src/htmlgen.cpp
@@ -878,7 +878,7 @@ void HtmlGenerator::writeSearchData(const char *dir)
{
searchCss = mgr.getAsString("search.css");
}
- searchCss = substitute(replaceColorMarkers(searchCss),"$doxygenversion",versionString);
+ searchCss = substitute(replaceColorMarkers(searchCss),"$doxygenversion",getVersion());
t << searchCss;
Doxygen::indexList->addStyleSheetFile("search/search.css");
}
@@ -887,20 +887,20 @@ void HtmlGenerator::writeSearchData(const char *dir)
void HtmlGenerator::writeStyleSheetFile(QFile &file)
{
FTextStream t(&file);
- t << replaceColorMarkers(substitute(ResourceMgr::instance().getAsString("doxygen.css"),"$doxygenversion",versionString));
+ t << replaceColorMarkers(substitute(ResourceMgr::instance().getAsString("doxygen.css"),"$doxygenversion",getVersion()));
}
void HtmlGenerator::writeHeaderFile(QFile &file, const char * /*cssname*/)
{
FTextStream t(&file);
- t << "<!-- HTML header for doxygen " << versionString << "-->" << endl;
+ t << "<!-- HTML header for doxygen " << getVersion() << "-->" << endl;
t << ResourceMgr::instance().getAsString("header.html");
}
void HtmlGenerator::writeFooterFile(QFile &file)
{
FTextStream t(&file);
- t << "<!-- HTML footer for doxygen " << versionString << "-->" << endl;
+ t << "<!-- HTML footer for doxygen " << getVersion() << "-->" << endl;
t << ResourceMgr::instance().getAsString("footer.html");
}
@@ -925,7 +925,7 @@ void HtmlGenerator::startFile(const char *name,const char *,
t << substituteHtmlKeywords(g_header,convertToHtml(filterTitle(title)),relPath);
t << "<!-- " << theTranslator->trGeneratedBy() << " Doxygen "
- << versionString << " -->" << endl;
+ << getVersion() << " -->" << endl;
//static bool generateTreeView = Config_getBool(GENERATE_TREEVIEW);
static bool searchEngine = Config_getBool(SEARCHENGINE);
if (searchEngine /*&& !generateTreeView*/)
@@ -990,7 +990,7 @@ QCString HtmlGenerator::writeLogoAsString(const char *path)
"<img class=\"footer\" src=\"";
result += path;
result += "doxygen.png\" alt=\"doxygen\"/></a> ";
- result += versionString;
+ result += getVersion();
result += " ";
return result;
}
@@ -1043,7 +1043,7 @@ void HtmlGenerator::writeStyleInfo(int part)
//t << "H1 { text-align: center; border-width: thin none thin none;" << endl;
//t << " border-style : double; border-color : blue; padding-left : 1em; padding-right : 1em }" << endl;
- t << replaceColorMarkers(substitute(ResourceMgr::instance().getAsString("doxygen.css"),"$doxygenversion",versionString));
+ t << replaceColorMarkers(substitute(ResourceMgr::instance().getAsString("doxygen.css"),"$doxygenversion",getVersion()));
endPlainFile();
Doxygen::indexList->addStyleSheetFile("doxygen.css");
}
@@ -2461,7 +2461,7 @@ void HtmlGenerator::writeSearchPage()
t << substituteHtmlKeywords(g_header,"Search","");
t << "<!-- " << theTranslator->trGeneratedBy() << " Doxygen "
- << versionString << " -->" << endl;
+ << getVersion() << " -->" << endl;
t << "<script type=\"text/javascript\">\n";
t << "/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n";
t << "var searchBox = new SearchBox(\"searchBox\", \""
@@ -2515,7 +2515,7 @@ void HtmlGenerator::writeExternalSearchPage()
t << substituteHtmlKeywords(g_header,"Search","");
t << "<!-- " << theTranslator->trGeneratedBy() << " Doxygen "
- << versionString << " -->" << endl;
+ << getVersion() << " -->" << endl;
t << "<script type=\"text/javascript\">\n";
t << "/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */\n";
t << "var searchBox = new SearchBox(\"searchBox\", \""
diff --git a/src/latexgen.cpp b/src/latexgen.cpp
index f88f79b..e6c6861 100644
--- a/src/latexgen.cpp
+++ b/src/latexgen.cpp
@@ -776,7 +776,7 @@ static void writeDefaultHeaderPart3(FTextStream &t)
{
// part 3
// Finalize project number
- t << " Doxygen " << versionString << "}\\\\\n";
+ t << " Doxygen " << getVersion() << "}\\\\\n";
if (Config_getBool(LATEX_TIMESTAMP))
t << "\\vspace*{0.5cm}\n"
"{\\small " << dateToString(TRUE) << "}\\\\\n";
@@ -845,7 +845,7 @@ static void writeDefaultFooter(FTextStream &t)
void LatexGenerator::writeHeaderFile(QFile &f)
{
FTextStream t(&f);
- t << "% Latex header for doxygen " << versionString << endl;
+ t << "% Latex header for doxygen " << getVersion() << endl;
writeDefaultHeaderPart1(t);
t << "Your title here";
writeDefaultHeaderPart2(t);
@@ -856,14 +856,14 @@ void LatexGenerator::writeHeaderFile(QFile &f)
void LatexGenerator::writeFooterFile(QFile &f)
{
FTextStream t(&f);
- t << "% Latex footer for doxygen " << versionString << endl;
+ t << "% Latex footer for doxygen " << getVersion() << endl;
writeDefaultFooter(t);
}
void LatexGenerator::writeStyleSheetFile(QFile &f)
{
FTextStream t(&f);
- t << "% stylesheet for doxygen " << versionString << endl;
+ t << "% stylesheet for doxygen " << getVersion() << endl;
writeDefaultStyleSheet(t);
}
diff --git a/src/layout.cpp b/src/layout.cpp
index 4ffdfb8..30c41f9 100644
--- a/src/layout.cpp
+++ b/src/layout.cpp
@@ -1561,7 +1561,7 @@ void writeDefaultLayoutFile(const char *fileName)
return;
}
QTextStream t(&f);
- t << substitute(layout_default,"$doxygenversion",versionString);
+ t << substitute(layout_default,"$doxygenversion",getVersion());
}
//----------------------------------------------------------------------------------
diff --git a/src/resourcemgr.cpp b/src/resourcemgr.cpp
index ab7422a..8cb831e 100644
--- a/src/resourcemgr.cpp
+++ b/src/resourcemgr.cpp
@@ -144,7 +144,7 @@ bool ResourceMgr::copyResourceAs(const char *name,const char *targetDir,const ch
}
else
{
- t << substitute(buf,"$doxygenversion",versionString);
+ t << substitute(buf,"$doxygenversion",getVersion());
}
return TRUE;
}
diff --git a/src/rtfgen.cpp b/src/rtfgen.cpp
index 2f24ca7..948d4cf 100644
--- a/src/rtfgen.cpp
+++ b/src/rtfgen.cpp
@@ -102,7 +102,7 @@ RTFGenerator::~RTFGenerator()
void RTFGenerator::writeStyleSheetFile(QFile &file)
{
FTextStream t(&file);
- t << "# Generated by doxygen " << versionString << "\n\n";
+ t << "# Generated by doxygen " << getVersion() << "\n\n";
t << "# This file describes styles used for generating RTF output.\n";
t << "# All text after a hash (#) is considered a comment and will be ignored.\n";
t << "# Remove a hash to activate a line.\n\n";
@@ -119,7 +119,7 @@ void RTFGenerator::writeStyleSheetFile(QFile &file)
void RTFGenerator::writeExtensionsFile(QFile &file)
{
FTextStream t(&file);
- t << "# Generated by doxygen " << versionString << "\n\n";
+ t << "# Generated by doxygen " << getVersion() << "\n\n";
t << "# This file describes extensions used for generating RTF output.\n";
t << "# All text after a hash (#) is considered a comment and will be ignored.\n";
t << "# Remove a hash to activate a line.\n\n";
diff --git a/src/searchindex.cpp b/src/searchindex.cpp
index e5f9ac8..b21d587 100644
--- a/src/searchindex.cpp
+++ b/src/searchindex.cpp
@@ -984,7 +984,7 @@ void writeJavascriptSearchIndex()
" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">" << endl;
t << "<html><head><title></title>" << endl;
t << "<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>" << endl;
- t << "<meta name=\"generator\" content=\"Doxygen " << versionString << "\"/>" << endl;
+ t << "<meta name=\"generator\" content=\"Doxygen " << getVersion() << "\"/>" << endl;
t << "<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>" << endl;
t << "<script type=\"text/javascript\" src=\"" << baseName << ".js\"></script>" << endl;
t << "<script type=\"text/javascript\" src=\"search.js\"></script>" << endl;
diff --git a/src/sqlite3gen.cpp b/src/sqlite3gen.cpp
index 5a8e81d..012a0c0 100644
--- a/src/sqlite3gen.cpp
+++ b/src/sqlite3gen.cpp
@@ -924,7 +924,7 @@ static int insertPath(QCString name, bool local=TRUE, bool found=TRUE, int type=
static void recordMetadata()
{
- bindTextParameter(meta_insert,":doxygen_version",versionString);
+ bindTextParameter(meta_insert,":doxygen_version",getVersion());
bindTextParameter(meta_insert,":schema_version","0.2.0"); //TODO: this should be a constant somewhere; not sure where
bindTextParameter(meta_insert,":generated_at",dateToString(TRUE), FALSE);
bindTextParameter(meta_insert,":generated_on",dateToString(FALSE), FALSE);
diff --git a/src/util.cpp b/src/util.cpp
index 70c0fce..695a52c 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -5337,7 +5337,7 @@ QCString substituteKeywords(const QCString &s,const char *title,
result = substitute(result,"$datetime",dateToString(TRUE));
result = substitute(result,"$date",dateToString(FALSE));
result = substitute(result,"$year",yearToString());
- result = substitute(result,"$doxygenversion",versionString);
+ result = substitute(result,"$doxygenversion",getVersion());
result = substitute(result,"$projectname",projName);
result = substitute(result,"$projectnumber",projNum);
result = substitute(result,"$projectbrief",projBrief);
diff --git a/src/version.h b/src/version.h
deleted file mode 100644
index 16bf9df..0000000
--- a/src/version.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/******************************************************************************
- *
- *
- *
- * Copyright (C) 1997-2015 by Dimitri van Heesch.
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation under the terms of the GNU General Public License is hereby
- * granted. No representations are made about the suitability of this software
- * for any purpose. It is provided "as is" without express or implied warranty.
- * See the GNU General Public License for more details.
- *
- * Documents produced by Doxygen are derivative works derived from the
- * input used in their production; they are not affected by this license.
- *
- */
-
-#ifndef VERSION_H
-#define VERSION_H
-
-extern char versionString[];
-
-#endif
diff --git a/src/xmlgen.cpp b/src/xmlgen.cpp
index b992b81..16abbf2 100644
--- a/src/xmlgen.cpp
+++ b/src/xmlgen.cpp
@@ -154,7 +154,7 @@ static void writeXMLHeader(FTextStream &t)
t << "<?xml version='1.0' encoding='UTF-8' standalone='no'?>" << endl;;
t << "<doxygen xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" ";
t << "xsi:noNamespaceSchemaLocation=\"compound.xsd\" ";
- t << "version=\"" << versionString << "\">" << endl;
+ t << "version=\"" << getVersion() << "\">" << endl;
}
static void writeCombineScript()
@@ -1981,7 +1981,7 @@ void generateXML()
t << "<?xml version='1.0' encoding='UTF-8' standalone='no'?>" << endl;;
t << "<doxygenindex xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" ";
t << "xsi:noNamespaceSchemaLocation=\"index.xsd\" ";
- t << "version=\"" << versionString << "\">" << endl;
+ t << "version=\"" << getVersion() << "\">" << endl;
{
ClassSDict::Iterator cli(*Doxygen::classSDict);