diff --git a/scripts/ax_init_standard_project.m4 b/scripts/ax_init_standard_project.m4 index a2b796f..e19bc03 100644 --- a/scripts/ax_init_standard_project.m4 +++ b/scripts/ax_init_standard_project.m4 @@ -8,43 +8,60 @@ m4_define([mrw_esyscmd_s], [m4_normalize(m4_esyscmd([$1]))]) # define least version number from subversion's revision number: # it is taken modulo 256 due to a bug on Apple's MacOSX -m4_define(x_least, m4_ifdef([x_least_diff], mrw_esyscmd_s([ - SVN_REVISION="ERROR-UNDEFINED-REVISION-to-be-built-in-subdirectory-of-svn-checkout" - for path in . .. ../..; do - if svn info $path 2>&1 > /dev/null; then - SVN_REVISION=$(LANG= svn info $path | sed -n 's/Last Changed Rev: //p') - if test -z "${SVN_REVISION}"; then SVN_REVISION=0; fi - break; - fi - done - echo $ECHO_N $(($SVN_REVISION)) -]), mrw_esyscmd_s([ - SVN_REVISION="ERROR-UNDEFINED-REVISION-to-be-built-in-subdirectory-of-svn-checkout" - for path in . .. ../..; do - if svn info $path 2>&1 > /dev/null; then - SVN_REVISION=$(LANG= svn info $path | sed -n 's/Last Changed Rev: //p') - if test -z "${SVN_REVISION}"; then SVN_REVISION=0; fi - break; - fi - done - # Mac does not support LEAST > 255 - echo $ECHO_N $(($SVN_REVISION%256)) -]))) +m4_define(x_least, m4_ifdef([x_least_fix], [x_least_fix], + m4_ifdef([x_least_diff], + mrw_esyscmd_s([ + VCS_REVISION="ERROR-UNDEFINED-REVISION-to-be-built-in-subdirectory-of-checkout" + for path in . .. ../..; do + if test -d .svn; then + VCS_REVISION=$(LANG= svn info $path | sed -n 's/Last Changed Rev: //p') + if test -z "${VCS_REVISION}"; then VCS_REVISION=0; fi + break; + elif test -d .git; then + VCS_REVISION=$(git rev-list --all --count) + if test -z "${VCS_REVISION}"; then VCS_REVISION=0; fi + break; + fi + done + echo $ECHO_N $(($VCS_REVISION)) + ]), mrw_esyscmd_s([ + VCS_REVISION="ERROR-UNDEFINED-REVISION-to-be-built-in-subdirectory-of-checkout" + for path in . .. ../..; do + if test -d .svn; then + VCS_REVISION=$(LANG= svn info $path | sed -n 's/Last Changed Rev: //p') + if test -z "${VCS_REVISION}"; then VCS_REVISION=0; fi + break; + elif test -d .git; then + VCS_REVISION=$(git rev-list --all --count) + if test -z "${VCS_REVISION}"; then VCS_REVISION=0; fi + break; + fi + done + # Mac does not support LEAST > 255 + echo $ECHO_N $(($VCS_REVISION%256)) + ]) + ) +)) + # define version number from subversion's revision number: # it is taken modulo 256 due to a bug on Apple's MacOSX # add to x_minor if revision number is > 256 -m4_define(x_minor_diff, mrw_esyscmd_s([ - SVN_REVISION="ERROR-UNDEFINED-REVISION-to-be-built-in-subdirectory-of-svn-checkout" +m4_define(x_minor_diff, m4_ifdef([x_least_fix], 0, mrw_esyscmd_s([ + VCS_REVISION="ERROR-UNDEFINED-REVISION-to-be-built-in-subdirectory-of-checkout" for path in . .. ../..; do - if svn info $path 2>&1 > /dev/null; then - SVN_REVISION=$(LANG= svn info $path | sed -n 's/Last Changed Rev: //p') - if test -z "${SVN_REVISION}"; then SVN_REVISION=0; fi + if test -d .svn; then + VCS_REVISION=$(LANG= svn info $path | sed -n 's/Last Changed Rev: //p') + if test -z "${VCS_REVISION}"; then VCS_REVISION=0; fi + break; + elif test -d .git; then + VCS_REVISION=$(git rev-list --all --count) + if test -z "${VCS_REVISION}"; then VCS_REVISION=0; fi break; fi; done # Mac does not support LEAST > 255 - echo $ECHO_N $(($SVN_REVISION/256)) -])) + echo $ECHO_N $(($VCS_REVISION/256)) +]))) # setup version number m4_define(x_version, [x_major.m4_ifdef([x_least_diff], x_minor, m4_eval(x_minor+x_minor_diff)).m4_eval(m4_ifdef([x_least_diff], [x_least-x_least_diff], [x_least]))]) diff --git a/scripts/bootstrap.sh b/scripts/bootstrap.sh index 8c37435..cb2389e 100755 --- a/scripts/bootstrap.sh +++ b/scripts/bootstrap.sh @@ -61,7 +61,7 @@ DESCRIPTION configure.ac. Automatically copies or creates all required template files. - From your new and empty project's subversion path, call $0 to + From your new and empty project's subversion or git path, call $0 to initialize your build environment. Before you call ${MY_NAME} the very first time, edit ${0#/*}/AUTHORS @@ -80,16 +80,27 @@ DESCRIPTION https://dev.marc.waeckerlin.org/, and the path from where you call ${MY_NAME} (which is actually ${PROJECT_PATH}) should be the path to your newly created project. Please note that your project must be a - checked out subversion repository, since this build environment - relies on subversion. + checked out subversion or git repository, since this build + environment relies on subversion or git. Example for an initial run, where your new projet is stored in - subversion on svn:/path/to/your/new-project: + subversion on https:/path/to/your/new-project: cd ~/svn svn co https://dev.marc.waeckerlin.org/svn/bootstrap-build-environment/trunk \\ bootstrap-build-environment - svn co svn:/path/to/your/new-project/trunk new-project + svn co https:/path/to/your/new-project/trunk new-project + cd new-project + ../bootstrap-build-environment/bootstrap.sh + + Example for an initial run, where your new projet is stored in + git on https:/path/to/your/new-project: + + cd ~/svn + svn co https://dev.marc.waeckerlin.org/svn/bootstrap-build-environment/trunk \\ + bootstrap-build-environment + cd ~/git + git clone https:/path/to/your/new-project cd new-project ../bootstrap-build-environment/bootstrap.sh @@ -201,13 +212,14 @@ FILES ${DEFAULT_PROJECT_NAME}::description(). * ChangeLog: Your changelog is automatically maintained from subversion history, using svn2cl. You don't need to - care about. + care about. It uses git2cl on git repositories. * configure.ac: This file becomes very short and simple. You provide the project name, the major and minor version. The least version number is automatically taken from subversion's revision, so every checkin automatically increments the least version - number. The following macros are supported: + number. In git, git rev-list --all --count is used. + The following macros are supported in configure.ac: * Enable C++: AX_USE_CXX * Enable LibTool library creation: AX_USE_LIBTOOL * Enable Scripts: AX_USE_SCRIPTS @@ -247,6 +259,20 @@ EOF shift; done +echo -en "\e[1m-> checking:\e[0m for version control system ..." +if test -d .svn; then + VCS="svn" + VCSDEPENDS="subversion" +elif test -d .git; then + VCS="git" + VCSDEPENDS="git" +else + echo -e " \e[31merror\e[0m" + echo -e "\e[1m*** must be started in root path of a subversion or git repositry\e[0m" + exit 1 +fi + +echo -e " \e[32msuccess\e[0m detected ${VCS}" HEADER='## @id '"\$Id\$"' ## @@ -270,6 +296,7 @@ CHEADER='/** @id '"\$Id\$"' // 1 2 3 4 5 6 7 8 // 45678901234567890123456789012345678901234567890123456789012345678901234567890 + ' notice() { @@ -318,7 +345,7 @@ contains() { checkdir() { if ! test -d "$1"; then # create path run mkdir -p "$1" - run svn add "$1" + run ${VCS} add "$1" fi } @@ -365,8 +392,10 @@ to() { fi chmod $mode $1 if test $exists -eq 0; then - run svn add "$1" - run svn propset svn:keywords "Id" "$1" + run ${VCS} add "$1" + if test "${VCS}" = "svn"; then + run svn propset svn:keywords "Id" "$1" + fi fi return 0 } @@ -386,8 +415,10 @@ copy() { fi run cp "${source}" "$1" if test $exists -eq 0; then - run svn add "$1" - run svn propset svn:keywords "Id" "$1" + run ${VCS} add "$1" + if test "${VCS}" = "svn"; then + run svn propset svn:keywords "Id" "$1" + fi fi } @@ -413,10 +444,27 @@ doxyadd() { fi } +vcs2cl() { + exists=0 + if test -f "Changelog"; then + exists=1 + fi + if test "${VCS}" = "git"; then + ${VCS}2cl > ChangeLog + else + ${VCS}2cl + fi + if test $exists -eq 0; then + run ${VCS} add ChangeLog + fi +} + # Check if we are in subversion root, if so, create trunk, branches, tags: -if test "$(LANG= svn info | sed -n 's,Relative URL: *,,p')" = "^/"; then - svn mkdir trunk branches tags - cd trunk +if test "${VCS}" = "svn"; then + if test "$(LANG= svn info | sed -n 's,Relative URL: *,,p')" = "^/"; then + svn mkdir trunk branches tags + cd trunk + fi fi # Initialize the environment: @@ -761,8 +809,10 @@ if testtag AX_USE_DOXYGEN; then contains doc/doxyfile.in "${rebuildfiles[@]}"; then run doxygen -g doc/doxyfile.in if test $exists -eq 0; then - run svn add doc/doxyfile.in - run svn propset svn:keywords "Id" doc/doxyfile.in + run ${VCS} add doc/doxyfile.in + if test "${VCS}" = "svn"; then + run svn propset svn:keywords "Id" doc/doxyfile.in + fi fi doxyreplace PROJECT_NAME "@PACKAGE_NAME@" doxyreplace PROJECT_NUMBER "@PACKAGE_VERSION@" @@ -842,7 +892,7 @@ if testtag AX_USE_DEBIAN_PACKAGING; then -- @AUTHOR@ @BUILD_DATE@ EOF - BUILD_DEPENDS="debhelper, subversion, pkg-config, automake, libtool, autotools-dev, lsb-release $(if testtag AX_USE_DOXYGEN; then echo -n ", doxygen, graphviz, mscgen"; fi; if testtag AX_USE_CPPUNIT; then echo -n ", libcppunit-dev"; fi; if testtag AX_CXX_QT || testtag AX_CHECK_QT AX_REQUIRE_QT; then echo -n ", qt5-default | libqt4-core | libqtcore4, qt5-qmake | qt4-qmake, qtbase5-dev | libqt4-dev, qtbase5-dev-tools | qt4-dev-tools, qttools5-dev-tools | qt4-dev-tools, qttools5-dev-tools | qt4-dev-tools"; fi)" + BUILD_DEPENDS="debhelper, ${VCSDEPENDS}, pkg-config, automake, libtool, autotools-dev, lsb-release $(if testtag AX_USE_DOXYGEN; then echo -n ", doxygen, graphviz, mscgen"; fi; if testtag AX_USE_CPPUNIT; then echo -n ", libcppunit-dev"; fi; if testtag AX_CXX_QT || testtag AX_CHECK_QT AX_REQUIRE_QT; then echo -n ", qt5-default | libqt4-core | libqtcore4, qt5-qmake | qt4-qmake, qtbase5-dev | libqt4-dev, qtbase5-dev-tools | qt4-dev-tools, qttools5-dev-tools | qt4-dev-tools, qttools5-dev-tools | qt4-dev-tools"; fi)" to debian/control.in < EOF -fi \ No newline at end of file +fi