diff --git a/.gitignore b/.gitignore index 8e1d0eba1..2a97e597b 100644 --- a/.gitignore +++ b/.gitignore @@ -64,3 +64,4 @@ configure svn-revision.h svn_revision svnmove.txt +git_version.h diff --git a/aegisub/Makefile.inc.in b/aegisub/Makefile.inc.in index 6f22236f7..23705db3e 100644 --- a/aegisub/Makefile.inc.in +++ b/aegisub/Makefile.inc.in @@ -43,7 +43,7 @@ AEGISUB_VERSION_DATA = @AEGISUB_VERSION_DATA@ BUILD_DATE = @BUILD_DATE@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_DEBUG = @PACKAGE_DEBUG@ -SVN_REVISION = @SVN_REVISION@ +BUILD_VERSION_STRING = @BUILD_GIT_VERSION_STRING@ # OS X BUNDLE_STRING = @BUNDLE_STRING@ DARWIN_ARCH = @DARWIN_ARCH@ diff --git a/aegisub/build/version.bat b/aegisub/build/version.bat new file mode 100644 index 000000000..25579c2fd --- /dev/null +++ b/aegisub/build/version.bat @@ -0,0 +1,9 @@ +cd %~dp0.. +sh build/version.sh . +if %ERRORLEVEL% NEQ 0 goto :fail +goto :eof + +:fail +ECHO Aegisub requires that sh and git be on the windows command line path for version checking. +> build\git_version.h echo #define BUILD_GIT_VERSION_NUMBER 0 +>> build\git_version.h echo #define BUILD_GIT_VERSION_STR "unknown" diff --git a/aegisub/build/version.sh b/aegisub/build/version.sh new file mode 100755 index 000000000..a1c708e19 --- /dev/null +++ b/aegisub/build/version.sh @@ -0,0 +1,52 @@ +srcdir="$1" + +# If no git repo try to read from the existing git_version.h, for building from tarballs +if ! test -d "${srcdir}/.git"; then + version_h_path="${srcdir}/aegisub/build/git_version.h" + if test -f "${version_h_path}"; then + while read line; do + set -- $line + export $2=$(echo $3 | sed 's/"//g') + done < "${version_h_path}" + if test x$BUILD_GIT_VERSION_NUMBER != x -a x$BUILD_GIT_VERSION_STRING != x; then + export VERSION_SOURCE="from cached git_version.h" + return 0 + else + echo "invalid git_version.h" + exit 2 + fi + else + echo "git repo not found and no cached git_version.h" + exit 2 + fi +fi + +last_svn_revision=6962 +last_svn_hash="2289c084f28d9923989e1b58b81332347130ea78" + +git_branch="$(git symbolic-ref HEAD 2> /dev/null)" || git_branch="(unnamed branch)" +git_branch="${git_branch##refs/heads/}" +git_revision=$(expr $last_svn_revision + $(git log --pretty=oneline $last_svn_hash..HEAD 2>/dev/null | wc -l)) +git_hash=$(git rev-parse --short HEAD) + +git_version_str="${git_revision}-${git_branch}-${git_hash}" + +new_version_h="\ +#define BUILD_GIT_VERSION_NUMBER ${git_revision} +#define BUILD_GIT_VERSION_STRING \"${git_version_str}\"" + +# may not exist yet for out of tree builds +mkdir -p build +version_h_path="build/git_version.h" + +# Write it only if it's changed to avoid spurious rebuilds +# This bizzare comparison method is due to that newlines in shell variables are very exciting +case "$(cat ${version_h_path} 2> /dev/null)" +in + "${new_version_h}");; + *) echo "${new_version_h}" > "${version_h_path}" +esac + +export BUILD_GIT_VERSION_NUMBER="${git_revision}" +export BUILD_GIT_VERSION_STRING="${git_version_str}" +export VERSION_SOURCE="from git" diff --git a/aegisub/configure.in b/aegisub/configure.in index 592132e40..07409ad52 100644 --- a/aegisub/configure.in +++ b/aegisub/configure.in @@ -40,7 +40,6 @@ AC_CONFIG_HEADER([acconf.h]) AC_GNU_SOURCE AC_CANONICAL_HOST - ########################### # Check host architecture ########################### @@ -151,29 +150,9 @@ PKG_PROG_PKG_CONFIG([pkgconfig_required_version]) ################# # Developers only ################# -# XXX: This needs to be fixed to handle mixed revisions properly -# There is probably a better way to handle it as well... -AC_MSG_CHECKING([for svn version]) -# Try to get revision from working copy and check if it makes sense -SVN_REVISION=`svnversion $srcdir | sed "s/\(^@<:@0-9@:>@*\).*/\1/"` 2> /dev/null -AS_IF([test -n "$SVN_REVISION" -a -z "`echo $SVN_REVISION | tr -d '0-9'`"], [ - `echo $SVN_REVISION > $srcdir/svn_revision` - AC_MSG_RESULT([$SVN_REVISION from "svnversion $srcdir"]) -], [test -f "$srcdir/svn_revision"], [ - SVN_REVISION=`cat $srcdir/svn_revision` - AC_MSG_RESULT([$SVN_REVISION from "$srcdir/svn_revision"]) -], [test -d "$srcdir/../.git"], [ - SVN_REVISION=[`git log --format=%b | grep git-svn-id -m 1 | sed -E 's/.*@([0-9]+) .*/\1/'`] - `echo $SVN_REVISION > $srcdir/svn_revision` - AC_MSG_RESULT([$SVN_REVISION from git]) -], [ - AC_MSG_RESULT([not found]) - AC_MSG_FAILURE([unable to get SVN Revision from $srcdir/svn_revision or 'svnversion $srcdir']) -]) - -# This is required in order for the config file to work correctly. -AC_DEFINE_UNQUOTED([BUILD_SVN_REVISION], [$SVN_REVISION], [SVN Revision number, used for config.dat and version.cpp]) - +AC_MSG_CHECKING([for version]) +. $srcdir/build/version.sh "$srcdir/.." +AC_MSG_RESULT([$BUILD_GIT_VERSION_STRING $VERSION_SOURCE]) # Release information. AS_IF([test "aegisub_FINAL_RELEASE" = "1"], [ @@ -181,24 +160,23 @@ AS_IF([test "aegisub_FINAL_RELEASE" = "1"], [ BUNDLE_STRING="${PACKAGE_NAME}" DMG_STRING="${PACKAGE_NAME}-${PACKAGE_VERSION}-${arch_bundle}" ], [ - PACKAGE_STRING="${PACKAGE_STRING}-dev-r${SVN_REVISION}" - PACKAGE_VERSION="${PACKAGE_VERSION}-dev-r${SVN_REVISION}" - VERSION="${VERSION}-dev-r${SVN_REVISION}" + PACKAGE_STRING="${PACKAGE_STRING}-dev-r${BUILD_GIT_VERSION_NUMBER}" + PACKAGE_VERSION="${PACKAGE_VERSION}-dev-r${BUILD_GIT_VERSION_NUMBER}" + VERSION="${VERSION}-dev-r${BUILD_GIT_VERSION_NUMBER}" BUNDLE_STRING="${PACKAGE_NAME}-${PACKAGE_VERSION}" DMG_STRING="${PACKAGE_NAME}-${PACKAGE_VERSION}-${arch_bundle}" ]) PACKAGE_TARNAME="${PACKAGE_TARNAME}-${PACKAGE_VERSION}" -# Used in version.cpp AC_MSG_CHECKING([for build date]) BUILD_DATE=`date "+%Y-%m-%d %H:%M %Z"` AC_MSG_RESULT($BUILD_DATE) -AC_SUBST(SVN_REVISION) -AC_SUBST(BUILD_DATE) AC_SUBST(BUNDLE_STRING) AC_SUBST(DMG_STRING) +AC_SUBST([BUILD_GIT_VERSION_STRING]) +AC_SUBST([BUILD_DATE]) ################################################### # Check for pthreads and setup variables / compiler @@ -731,7 +709,7 @@ AS_IF([test x$with_ffms2 != xyes], [AC_MSG_NOTICE([ AC_MSG_RESULT([ Configure settings Install prefix: $prefix - SVN Revision: $SVN_REVISION + Revision: $BUILD_GIT_VERSION_STRING Debug $enable_debug CFLAGS $CFLAGS CXXFLAGS $CXXFLAGS diff --git a/aegisub/packages/osx_bundle/Contents/Info.plist b/aegisub/packages/osx_bundle/Contents/Info.plist index e96819499..3fcfe2ced 100644 --- a/aegisub/packages/osx_bundle/Contents/Info.plist +++ b/aegisub/packages/osx_bundle/Contents/Info.plist @@ -31,7 +31,7 @@ @PLIST_VERSION@ CFBundleLongVersionString - @PLIST_VERSION@ (@PLIST_SVN_REVISION@), Copyright 2005-2012, aegisub http://www.aegisub.org/ + @PLIST_VERSION@, Copyright 2005-2012, aegisub http://www.aegisub.org/ LSArchitecturePriority @@ -39,7 +39,7 @@ CFBundleGetInfoString - aegisub version @PLIST_VERSION@ (@PLIST_SVN_REVISION@) built on @PLIST_BUILD_DATE@ http://www.aegisub.org/ + aegisub version @PLIST_VERSION@ built on @PLIST_BUILD_DATE@ http://www.aegisub.org/ LSMultipleInstancesProhibited diff --git a/aegisub/src/Makefile b/aegisub/src/Makefile index 4b4bf9dee..46eac5e8c 100644 --- a/aegisub/src/Makefile +++ b/aegisub/src/Makefile @@ -5,7 +5,7 @@ PROGRAM_INSTALL = yes PRECOMPILED_HEADER_NAME=agi_pre.h -AEGISUB_CFLAGS = -I. -I.. -Iinclude -I../libaegisub/include -DAEGISUB $(CFLAGS_PTHREAD) $(CFLAGS_FFTW3) $(CFLAGS_PROFILE) +AEGISUB_CFLAGS = -I. -I.. -Iinclude -I../libaegisub/include -I../build -DAEGISUB $(CFLAGS_PTHREAD) $(CFLAGS_FFTW3) $(CFLAGS_PROFILE) CFLAGS += $(AEGISUB_CFLAGS) CXXFLAGS += $(AEGISUB_CFLAGS) -D__STDC_FORMAT_MACROS $(CXXFLAGS_WX) diff --git a/aegisub/src/version.cpp b/aegisub/src/version.cpp index 587fb02b9..44697700c 100644 --- a/aegisub/src/version.cpp +++ b/aegisub/src/version.cpp @@ -37,60 +37,40 @@ #include "config.h" #include "version.h" - -#ifdef __WINDOWS__ -#include "../build/svn-revision.h" -#endif - -#define STR_INT2(x) #x -#define STR_INT(x) STR_INT2(x) - -#ifdef _DEBUG -#define DEBUG_SUFFIX " [DEBUG VERSION]" -#else -#define DEBUG_SUFFIX "" -#endif - -#ifdef BUILD_CREDIT -#define BUILD_CREDIT_SUFFIX ", " BUILD_CREDIT -#else -#define BUILD_CREDIT_SUFFIX "" -#endif - -#ifndef BUILD_SVN_DATE -#define BUILD_SVN_DATE __DATE__ " " __TIME__ -#endif - -#ifndef BUILD_SVN_LOCALMODS -#define BUILD_SVN_LOCALMODS "" -#endif +#include "git_version.h" // Define FINAL_RELEASE to mark a build as a "final" version, ie. not pre-release version // In that case it won't include the SVN revision information #ifdef FINAL_RELEASE -#define VERSION_NUMBER "3.0.0" + #define VERSION_NUMBER "3.0.0" + #define BUILD_CREDIT_SUFFIX "" + #define DEBUG_SUFFIX "" #else -#define VERSION_NUMBER "r" STR_INT(BUILD_SVN_REVISION) BUILD_SVN_LOCALMODS + #define VERSION_NUMBER BUILD_GIT_VERSION_STRING + + #ifdef _DEBUG + #define DEBUG_SUFFIX " [DEBUG VERSION]" + #else + #define DEBUG_SUFFIX "" + #endif + + #ifdef BUILD_CREDIT + #define BUILD_CREDIT_SUFFIX ", " BUILD_CREDIT + #else + #define BUILD_CREDIT_SUFFIX "" + #endif #endif const char *GetAegisubLongVersionString() { -#ifdef FINAL_RELEASE - return VERSION_NUMBER DEBUG_SUFFIX; -#else - return VERSION_NUMBER " (development version" BUILD_CREDIT_SUFFIX ")" DEBUG_SUFFIX; -#endif + return VERSION_NUMBER BUILD_CREDIT_SUFFIX DEBUG_SUFFIX; } const char *GetAegisubShortVersionString() { -#ifdef FINAL_RELEASE - return VERSION_NUMBER " (built from SVN revision r" #BUILD_SVN_REVISION BUILD_SVN_LOCALMODS ")" DEBUG_SUFFIX; -#else - return VERSION_NUMBER " (development version" BUILD_CREDIT_SUFFIX ")" DEBUG_SUFFIX; -#endif + return VERSION_NUMBER DEBUG_SUFFIX; } const char *GetAegisubBuildTime() { - return BUILD_SVN_DATE; + return __DATE__ " " __TIME__; } const char *GetAegisubBuildCredit() { @@ -114,9 +94,10 @@ const char *GetVersionNumber() { } int GetSVNRevision() { -#ifdef BUILD_SVN_REVISION - return BUILD_SVN_REVISION; +#ifdef BUILD_GIT_VERSION_NUMBER + return BUILD_GIT_VERSION_NUMBER; #else return 0; #endif } + diff --git a/aegisub/tools/osx-bundle.sed.in b/aegisub/tools/osx-bundle.sed.in index 076edf976..b3c571a63 100644 --- a/aegisub/tools/osx-bundle.sed.in +++ b/aegisub/tools/osx-bundle.sed.in @@ -1,5 +1,4 @@ -s/@PLIST_VERSION@/@VERSION@/g -s/@PLIST_SVN_REVISION@/@SVN_REVISION@/g +s/@PLIST_VERSION@/@BUILD_VERSION_STRING@/g s/@PLIST_BUILD_DATE@/@BUILD_DATE@/g s/@PKG_DMG_STRING@/@DMG_STRING@/ s/@PKG_BUNDLE_STRING@/@BUNDLE_STRING@/