diff options
| author | Adam <Adam@Anope.org> | 2010-06-25 20:00:21 -0400 |
|---|---|---|
| committer | Adam <Adam@Anope.org> | 2010-06-25 20:00:21 -0400 |
| commit | 03fbc7d281f5039a97c851970dea3cd8cfaefd64 (patch) | |
| tree | c527046a41b97751b1a52ba7046e36337f0d0373 /include | |
| parent | cbcead4e89b3dc0dfb236fff9cb3e62b1b0707c0 (diff) | |
Changed the versioning system to use git
Diffstat (limited to 'include')
| -rw-r--r-- | include/CMakeLists.txt | 41 | ||||
| -rw-r--r-- | include/Makefile | 8 | ||||
| -rw-r--r-- | include/extern.h | 3 | ||||
| -rw-r--r-- | include/services.h | 28 | ||||
| -rw-r--r-- | include/version.cpp | 116 | ||||
| -rw-r--r-- | include/version.sh | 63 | ||||
| -rw-r--r-- | include/version.sh.c | 248 |
7 files changed, 161 insertions, 346 deletions
diff --git a/include/CMakeLists.txt b/include/CMakeLists.txt index de44e4f28..caef56a19 100644 --- a/include/CMakeLists.txt +++ b/include/CMakeLists.txt @@ -1,30 +1,17 @@ -# If we are building for Visual Studio OR if the system we are on doesn't have sh (which would be odd on a *nix system...), we'll build a C++ program to create version.h -if(MSVC OR NOT SH) - # Set version.sh.c to use C++ as well as set it's compile flags - set_source_files_properties(version.sh.c PROPERTIES LANGUAGE CXX COMPILE_FLAGS "${CXXFLAGS}") - # Generate version_sh executable to create version.h from the contents of version.sh, setting it's linker flags as well - add_executable(version_sh version.sh.c) - set_target_properties(version_sh PROPERTIES LINKER_LANGUAGE CXX LINK_FLAGS "${LDFLAGS}") - # Generate version.h from the above executable and the version.log file from the main source directory, with dependencies to the given headers and all source files in the main Anope build - add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/version.h - COMMAND version_sh ${Anope_SOURCE_DIR}/version.log ${CMAKE_CURRENT_SOURCE_DIR}/version.sh ${CMAKE_CURRENT_BINARY_DIR}/version.h - MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/version.sh DEPENDS version_sh ${CMAKE_CURRENT_SOURCE_DIR}/services.h ${SRC_SRCS} - ) - # Add version_sh to list of files for CPack to ignore - get_target_property(version_sh_BINARY version_sh LOCATION) - get_filename_component(version_sh_BINARY ${version_sh_BINARY} NAME) - add_to_cpack_ignored_files("${version_sh_BINARY}$" TRUE) -# For any non-Visual Studio platforms that do have sh, we will run version.h through the version.h shell script -else(MSVC OR NOT SH) - # Generate version.h from version.sh and the version.log file from the main source directory, with dependencies to the given headers and all source files in the main Anope build - add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/version.h - COMMAND ${SH} ${CMAKE_CURRENT_SOURCE_DIR}/version.sh ${Anope_SOURCE_DIR}/version.log ${CMAKE_CURRENT_BINARY_DIR}/version.h - MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/version.sh DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/services.h ${SRC_SRCS} - ) -endif(MSVC OR NOT SH) - -# Add version.h to the list of files for CPack to ignore -add_to_cpack_ignored_files("version.h$" TRUE) +# Set version.cpp to use C++ as well as set its compile flags +set_source_files_properties(version.cpp PROPERTIES LANGUAGE CXX COMPILE_FLAGS "${CXXFLAGS}") +# Generate version executable to modify version.h, setting it's linker flags as well +add_executable(version version.cpp) +set_target_properties(version PROPERTIES LINKER_LANGUAGE CXX LINK_FLAGS "${LDFLAGS}") +# Modify version.h from the above executable, with dependencies to the given headers, version.cpp, and all source files in the main Anope build +add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/version.h + COMMAND version ${Anope_SOURCE_DIR}/src/version.sh ${CMAKE_CURRENT_SOURCE_DIR}/version.h + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/services.h ${CMAKE_CURRENT_SOURCE_DIR}/version.cpp ${SRC_SRCS} +) +# Add version to list of files for CPack to ignore +get_target_property(version_BINARY version LOCATION) +get_filename_component(version_BINARY ${version_BINARY} NAME) +add_to_cpack_ignored_files("${version_BINARY}$" TRUE) # Add a custom target to the above file add_custom_target(headers DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/version.h) diff --git a/include/Makefile b/include/Makefile index de32199d3..06ec4a24a 100644 --- a/include/Makefile +++ b/include/Makefile @@ -1,8 +1,8 @@ - all: services.h extern.h version.h + ./version ../src/version.sh version.h -version.h: Makefile version.sh services.h $(SRCS) - sh version.sh ../version.log $@ +version.h: Makefile services.h version.cpp $(SRCS) + $(CC) version.cpp -o version services.h: sysconf.h config.h extern.h touch $@ @@ -11,4 +11,4 @@ clean: (rm -f language.h) distclean: clean - (rm -f sysconf.h version.h) + (rm -f sysconf.h version.h version) diff --git a/include/extern.h b/include/extern.h index 200ed3415..093def853 100644 --- a/include/extern.h +++ b/include/extern.h @@ -206,9 +206,6 @@ E void fatal_perror(const char *fmt, ...) FORMAT(printf,1,2); /**** main.c ****/ -E const char version_number[]; -E const char version_number_dotted[]; -E const char version_build[]; E char *version_protocol; E std::string services_dir; diff --git a/include/services.h b/include/services.h index 900c8d49c..c945c10d4 100644 --- a/include/services.h +++ b/include/services.h @@ -16,6 +16,7 @@ /*************************************************************************/ +#include "version.h" #include "sysconf.h" #define BUFSIZE 1024 @@ -202,6 +203,7 @@ extern "C" void __pfnBkCheck() {} /* Pull in the various bits of STL */ #include <iostream> +#include <sstream> #include <string> #include <map> #include <exception> @@ -355,6 +357,19 @@ template<typename T> class Flags /*************************************************************************/ +template<typename T> +inline const std::string stringify(const T &x) +{ + std::stringstream stream; + + if (!(stream << x)) + throw CoreException("Stringify fail"); + + return stream.str(); +} + +/*************************************************************************/ + /* forward declarations, mostly used by older code */ class User; class ChannelInfo; @@ -1036,7 +1051,19 @@ struct Message; // XXX class CoreExport Anope { + private: + static const char * const compiled; public: + static inline const std::string Version() + { + return stringify(VERSION_MAJOR) + "." + stringify(VERSION_MINOR) + "." + stringify(VERSION_PATCH) + VERSION_EXTRA " (" + stringify(VERSION_BUILD) + ")"; + } + + static inline const std::string Build() + { + return "build #" + stringify(BUILD) + ", compiled " + compiled; + } + /** Check whether two strings match. * @param str The string to check against the pattern (e.g. foobar) * @param mask The pattern to check (e.g. foo*bar) @@ -1064,7 +1091,6 @@ class CoreExport Anope * @return a vector with pointers to the messagehandlers (you can bind more than one handler to a message) */ static std::vector<Message *> FindMessage(const std::string &name); - }; /*************************************************************************/ diff --git a/include/version.cpp b/include/version.cpp new file mode 100644 index 000000000..5b642c70b --- /dev/null +++ b/include/version.cpp @@ -0,0 +1,116 @@ +/* Build bumper + * + * (C) 2003-2010 Anope Team + * Contact us at team@anope.org + * + * Please read COPYING and README for furhter details. + * + * Based on the original code of Epona by Lara. + * Based on the original code of Services by Andy Church. + */ + +#include <iostream> +#include <fstream> +#include <sstream> +#include <list> + +int main(int argc, char *argv[]) +{ + using namespace std; + + if (argc < 3) + { + cout << "Syntax: " << argv[0] << " <src/version.sh> <version.h>" << endl; + return 1; + } + + fstream fd; + + fd.open(argv[1], ios::in); + if (!fd.is_open()) + { + cout << "Error: Unable to open src/version.sh for reading: " << argv[1] << endl; + return 1; + } + + string filebuf; + list<pair<string, string> > versions; + while (getline(fd, filebuf)) + { + if (filebuf.find("VERSION_") == 0) + { + size_t eq = filebuf.find('='); + + string type = filebuf.substr(8, 5); + string value = filebuf.substr(eq + 2, filebuf.length() - eq - 3); + versions.push_back(make_pair(type, value)); + } + } + + fd.close(); + + fd.open(argv[2], ios::in); + + string version_build = "#define VERSION_BUILD 1"; + string version_extra; + string build = "#define BUILD 1"; + if (fd.is_open()) + { + while (getline(fd, filebuf)) + { + if (filebuf.find("#define VERSION_BUILD") == 0) + { + version_build = filebuf; + } + else if (filebuf.find("#define VERSION_EXTRA") == 0) + { + size_t q = filebuf.find('"'); + + version_extra = filebuf.substr(q + 1, filebuf.length() - q - 2); + } + else if (filebuf.find("#define BUILD") == 0) + { + size_t tab = filebuf.find(' '); + + int ibuild = atoi(filebuf.substr(tab + 1).c_str()); + ++ibuild; + + stringstream ss; + ss << "#define BUILD " << ibuild; + build = ss.str(); + } + } + + fd.close(); + } + + fd.open(argv[2], ios::out); + + if (!fd.is_open()) + { + cout << "Error: Unable to include/version.h for writing: " << argv[2]; + return 1; + } + + fd << "/* This file is automatically generated by version.cpp - do not edit it! */" << endl; + + for (list<pair<string, string> >::iterator it = versions.begin(), it_end = versions.end(); it != it_end; ++it) + { + if (it->first == "EXTRA") + { + if (!version_extra.empty()) + fd << "#define VERSION_EXTRA \"" << version_extra << "\"" << endl; + else + fd << "#define VERSION_EXTRA \"" << it->second << "\"" << endl; + } + else + fd << "#define VERSION_" << it->first << " " << it->second << endl; + } + + fd << version_build << endl; + fd << build << endl; + + fd.close(); + + return 0; +} diff --git a/include/version.sh b/include/version.sh deleted file mode 100644 index a32c34c5a..000000000 --- a/include/version.sh +++ /dev/null @@ -1,63 +0,0 @@ -#!/bin/sh -# -# Build version string and increment Services build number. -# - -if [ $# -lt 2 ] ; then - echo "Syntax: $0 <version.log> <version.h>" - exit 1 -fi -# Grab version information from the version control file. -CTRL="$1" -if [ -f $CTRL ] ; then - . $CTRL -else - echo "Error: Unable to find control file: $CTRL" - exit 0 -fi - -VERSION="${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}${VERSION_EXTRA} (${VERSION_BUILD})" -VERSIONDOTTED="${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}${VERSION_EXTRA}.${VERSION_BUILD}" - -VERSIONH="$2" -if [ -f $VERSIONH ] ; then - BUILD=`fgrep '#define BUILD' $VERSIONH | cut -f2 -d\"` - BUILD=`expr $BUILD + 1 2>/dev/null` -else - BUILD=1 -fi -if [ ! "$BUILD" ] ; then - BUILD=1 -fi -cat >$VERSIONH <<EOF -/* Version information for Services. - * - * (C) 2003-2010 Anope Team - * Contact us at team@anope.org - * - * Please read COPYING and CREDITS for further details. - * - * Based on the original code of Epona by Lara. - * Based on the original code of Services by Andy Church. - * - * This file is auto-generated by version.sh - * - */ - - #ifndef VERSION_H - #define VERSION_H - -#define VERSION_MAJOR $VERSION_MAJOR -#define VERSION_MINOR $VERSION_MINOR -#define VERSION_PATCH $VERSION_PATCH -#define VERSION_EXTRA "$VERSION_EXTRA" -#define VERSION_BUILD $VERSION_BUILD - -#define BUILD "$BUILD" -#define VERSION_STRING "$VERSION" -#define VERSION_STRING_DOTTED "$VERSIONDOTTED" - -#endif - -EOF - diff --git a/include/version.sh.c b/include/version.sh.c deleted file mode 100644 index 83dc2b9cd..000000000 --- a/include/version.sh.c +++ /dev/null @@ -1,248 +0,0 @@ -/* version file handler for win32. - * - * (C) 2003-2010 Anope Team - * Contact us at team@anope.org - * - * Please read COPYING and README for furhter details. - * - * Based on the original code of Epona by Lara. - * Based on the original code of Services by Andy Church. - * - * Written by Dominick Meglio <codemastr@unrealircd.com> - */ - -/* Needed due to Windows lack of a decent interpreter */ - -#include <stdio.h> -#include <string.h> -#include <cstdlib> -#include <cctype> - -long version_major, version_minor, version_patch, version_build, build; -char *version_extra = NULL; -char version[1024]; -char version_dotted[1024]; - -void load_ctrl(FILE *); -long get_value(char *); -char *get_value_str(char *); -char *strip(char *); -void parse_version(FILE *); -void write_version(FILE *, const char *); -void parse_line(FILE *, char *); - -int main(int argc, char *argv[]) -{ - if (argc < 4) - { - fprintf(stderr, "Syntax: %s <version.log> <version.sh> <version.h>\n", argv[0]); - exit(1); - } - FILE *fd = fopen(argv[1], "r"); - - if (!fd) - { - fprintf(stderr, "Error: Unable to find control file: %s\n", argv[1]); - exit(0); - } - - load_ctrl(fd); - fclose(fd); - - _snprintf(version, 1024, "%ld.%ld.%ld%s (%ld)", version_major, version_minor, version_patch, version_extra ? version_extra : "", version_build); - - _snprintf(version_dotted, 1024, "%ld.%ld.%ld%s.%ld", version_major, version_minor, version_patch, version_extra ? version_extra : "", version_build); - - fd = fopen(argv[3], "r"); - - if (fd) - { - parse_version(fd); - fclose(fd); - } - else - build = 1; - - fd = fopen(argv[3], "w"); - write_version(fd, argv[2]); - fclose(fd); - - if (version_extra) - free(version_extra); -} - -void load_ctrl(FILE * fd) -{ - char buf[512]; - while (fgets(buf, 511, fd)) - { - char *var; - - strip(buf); - - var = strtok(buf, "="); - if (!var) - continue; - if (!strcmp(var, "VERSION_MAJOR")) - version_major = get_value(strtok(NULL, "")); - else if (!strcmp(var, "VERSION_MINOR")) - version_minor = get_value(strtok(NULL, "")); - else if (!strcmp(var, "VERSION_PATCH")) - version_patch = get_value(strtok(NULL, "")); - else if (!strcmp(var, "VERSION_BUILD")) - version_build = get_value(strtok(NULL, "")); - else if (!strcmp(var, "VERSION_EXTRA")) - version_extra = get_value_str(strtok(NULL, "")); - } -} - -char *strip(char *str) -{ - char *c; - if ((c = strchr(str, '\n'))) - *c = 0; - if ((c = strchr(str, '\r'))) - *c = 0; - return str; -} - -long get_value(char *string) -{ - // XXX : if the fields in version.log are empty strtok returns a double quote, dont try to atol it then - if (string[1] != '"') - return atol(get_value_str(string)); - else - return 0; -} - -char *get_value_str(char *string) -{ - int len; - char *newstr; - - if (*string == '"') - ++string; - - len = strlen(string); - - if (string[len - 1] == '"') - string[len - 1] = 0; - if (!*string) - return NULL; - newstr = (char *)malloc(len + 1); - strcpy(newstr, string); - return newstr; - //return strdup(string); -} - -void parse_version(FILE * fd) -{ - char buf[1024]; - - while (fgets(buf, 1023, fd)) - { - char *para1; - - strip(buf); - para1 = strtok(buf, " \t"); - - if (!para1) - continue; - - if (!strcmp(para1, "#define")) - { - char *para2 = strtok(NULL, " \t"); - - if (!para2) - continue; - - if (!strcmp(para2, "BUILD")) - { - char *value = strtok(NULL, ""); - build = get_value(value); - build++; - return; - } - } - } - build = 1; -} - -void write_version(FILE *fd, const char *input) -{ - FILE *fdin = fopen(input, "r"); - char buf[1024]; - short until_eof = 0; - - while (fgets(buf, 1023, fdin)) - { - strip(buf); - - if (until_eof) - { - if (!strcmp(buf, "EOF")) - break; - else - parse_line(fd, buf); - } - - if (!strcmp(buf, "cat >$VERSIONH <<EOF")) - until_eof = 1; - } - - if (fdin) - fclose(fdin); -} - -void parse_line(FILE *fd, char *line) -{ - char *c; - for (c = line; *c; ++c) - { - /* It's a variable, find out which */ - if (*c == '$') - { - char *var, *varbegin; - - if (*(c + 1)) - ++c; - else - continue; - for (var = varbegin = c; var; ++var) - if (!isalnum(*var) && *var != '_') - break; - if (var != varbegin) - { - char tmp = *var; - - *var = 0; - if (!strcmp(varbegin, "VERSION_MAJOR")) - fprintf(fd, "%ld", version_major); - else if (!strcmp(varbegin, "VERSION_MINOR")) - fprintf(fd, "%ld", version_minor); - else if (!strcmp(varbegin, "VERSION_PATCH")) - fprintf(fd, "%ld", version_patch); - else if (!strcmp(varbegin, "VERSION_EXTRA")) - { - if (version_extra) - fprintf(fd, "%s", version_extra); - } - else if (!strcmp(varbegin, "VERSION_BUILD")) - fprintf(fd, "%ld", version_build); - else if (!strcmp(varbegin, "BUILD")) - fprintf(fd, "%ld", build); - else if (!strcmp(varbegin, "VERSION")) - fprintf(fd, "%s", version); - else if (!strcmp(varbegin, "VERSIONDOTTED")) - fprintf(fd, "%s", version_dotted); - if (tmp) - fputc(tmp, fd); - } - c = var; - } - else - fputc(*c, fd); - } - /* We only need \n here - we didn't open the file as binary -GD */ - fprintf(fd, "\n"); -} |
