diff --git a/configure.ac b/configure.ac index 05f0cf9cd91..f0aace731ea 100644 --- a/configure.ac +++ b/configure.ac @@ -279,6 +279,12 @@ else AC_MSG_FAILURE([no suitable crypto library found]) fi +AC_ARG_ENABLE(gitversion, + [AC_HELP_STRING([--enable-gitversion], [build Ceph with git version string])], + [], [enable_gitversion=yes]) + +AM_CONDITIONAL(NO_GIT_VERSION, [test "x$enable_gitversion" = "xno"]) + AC_ARG_ENABLE([root-make-check], [AS_HELP_STRING([--enable-root-make-check], [enable make check tests that require root privileges])], [], diff --git a/src/Makefile.am b/src/Makefile.am index 116be9d32e8..f26da2782da 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -3,7 +3,9 @@ include Makefile-env.am SUBDIRS += ocf java tracing DIST_SUBDIRS += gmock ocf libs3 java tracing - +if NO_GIT_VERSION +export NO_VERSION="yes" +endif # subdirs @@ -164,7 +166,6 @@ EXTRA_DIST += \ $(srcdir)/init-rbdmap \ $(srcdir)/ceph-clsinfo \ $(srcdir)/make_version \ - $(srcdir)/check_version \ $(srcdir)/.git_version \ $(srcdir)/ceph-rbdnamer \ $(srcdir)/test/encoding/readable.sh \ @@ -670,19 +671,17 @@ base: core-daemons admin-tools \ FORCE: .git_version: FORCE - $(srcdir)/check_version $(srcdir)/.git_version + $(srcdir)/make_version -g $(srcdir)/.git_version # if NO_VERSION is set, only generate a new ceph_ver.h if there currently # is none, and call "make_version -n" to fill it with a fixed string. # Otherwise, set it from the contents of .git_version. -ceph_ver.h: .git_version +ceph_ver.h: .git_version FORCE if [ -n "$$NO_VERSION" ] ; then \ - if [ ! -f ./ceph_ver.h ] ; then \ - $(srcdir)/make_version -n ./ceph_ver.h ; \ - fi; \ - else \ - $(srcdir)/make_version $(srcdir)/.git_version ./ceph_ver.h ; \ + $(srcdir)/make_version -g $(srcdir)/.git_version -c $(srcdir)/ceph_ver.h -n ; \ + else \ + $(srcdir)/make_version -g $(srcdir)/.git_version -c $(srcdir)/ceph_ver.h ; \ fi ceph_ver.c: ./ceph_ver.h @@ -693,7 +692,7 @@ sample.fetch_config: fetch_config cp -f $(srcdir)/fetch_config ./sample.fetch_config dist-hook: - $(srcdir)/check_version $(srcdir)/.git_version + $(srcdir)/make_version -g $(srcdir)/.git_version CLEANFILES += ceph_ver.h sample.fetch_config diff --git a/src/check_version b/src/check_version deleted file mode 100755 index 8600c556f4c..00000000000 --- a/src/check_version +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/sh - -dname=`dirname $0` - -if [ ! -d $dname/../.git ]; then - echo "not updating .git_version (no $dname/../.git)" - exit 0 -fi - -cur=`cd $dname && git rev-parse HEAD 2>/dev/null; git describe 2>/dev/null` -[ -e $1 ] && old=`cat $1` - -if [ "$cur" != "$old" ]; then - echo regenerating $1 with $cur - echo "$cur" > $1 -else - echo $1 is up to date. -fi - diff --git a/src/make_version b/src/make_version index 3ed2bac691d..db7a58bdaf6 100755 --- a/src/make_version +++ b/src/make_version @@ -1,23 +1,108 @@ #!/bin/sh -echo '$1: '$1 +GIT_VERSION_FILE= +CEPH_VER_HEADER= +NO_VERSION=0 -if [ "$1" = "-n" ] ; then - cur="no_version" - v="Development" -else - cur=`head -1 $1` - v=`tail -1 $1 | cut -c 2-` -fi - -print_all() { - echo "#ifndef CEPH_VERSION_H" - echo "#define CEPH_VERSION_H" - echo - echo "#define CEPH_GIT_VER $cur" - echo "#define CEPH_GIT_NICE_VER \"$v\"" - echo - echo "#endif" +is_git() { + type git > /dev/null 2>&1 || { echo "Could not find git command. Please install. Aborting."; exit 1; } + git status > /dev/zero 2>&1; + if [ $? -ne 0 ]; then + echo "This is no git repository, not updating .git_version" + return 1 + else + return 0 + fi } -print_all > $2 +check_gitversion() { + if is_git; then + current=`git rev-parse HEAD 2> /dev/null; git describe 2> /dev/null` + if [ -f $GIT_VERSION_FILE ] ; then + old=`cat $GIT_VERSION_FILE` + + if [ "$current" != "$old" ]; then + echo "$current" > $GIT_VERSION_FILE + fi + else + echo "$current" > $GIT_VERSION_FILE + fi + fi +} + +print_ceph_ver() { + # print the content of the ceph_ver.h file + if [ $NO_VERSION -eq 1 ]; then + ver="no_version" + ver_nice="Development" + else + ver=`head -1 $GIT_VERSION_FILE` + ver_nice=`tail -1 $GIT_VERSION_FILE | cut -c 2-` + fi + + echo "#ifndef CEPH_VERSION_H" + echo "#define CEPH_VERSION_H" + echo + echo "#define CEPH_GIT_VER $ver" + echo "#define CEPH_GIT_NICE_VER \"$ver_nice\"" + echo + echo "#endif" +} + +set_ceph_ver() { + # compare new and old CEPH_VER_HEADER + if [ -f $CEPH_VER_HEADER ]; then + tmpfile=$(mktemp -t "ceph_ver_h.XXXXXXXXXXXXX") + print_ceph_ver > $tmpfile + cur_ver=`cat $CEPH_VER_HEADER` + new_ver=`cat $tmpfile` + if [ "$cur_ver" != "$new_ver" ]; then + mv $tmpfile $CEPH_VER_HEADER + else + rm $tmpfile + fi + else + print_ceph_ver > $CEPH_VER_HEADER + fi +} + +usage() { + printf "usage: $0 -g FILEPATH [options]\n" + printf "\t-g|--git-version-file\tFILEPATH for git version file (e.g. ./src/.git_version)\n" + printf "\t-c|--ceph-ver-header\tFILEPATH for ceph version header (e.g. ./src/ceph_ver.h)\n" + printf "\t-n|--no-version\t\tdon't generate version from git\n" + printf "\t-h|--help\t\tprint this usage instructions\n" +} + +until [ -z "$1" ]; do +case $1 in + -n|--no-version) + NO_VERSION=1; + ;; + -g|--git-version-file) + GIT_VERSION_FILE=$2 + shift; + ;; + -c|--ceph-ver-header) + CEPH_VER_HEADER=$2 + shift; + ;; + -h|--help) + usage; + ;; + *) + ;; +esac +shift +done; + +if [ -n "$GIT_VERSION_FILE" ] ; then + if [ -z "$CEPH_VER_HEADER" ] ; then + check_gitversion + else + check_gitversion + set_ceph_ver + fi +else + usage +fi