support git and subversion; new possibility to set x_least_fix to a fix value without automated increase

master
Marc Wäckerlin 9 years ago
parent 1341358d1c
commit 7fe96fe08e
  1. 75
      scripts/ax_init_standard_project.m4
  2. 90
      scripts/bootstrap.sh
  3. 2
      scripts/build-in-docker.sh
  4. 4
      scripts/mac-create-app-bundle.sh

@ -8,43 +8,60 @@ m4_define([mrw_esyscmd_s], [m4_normalize(m4_esyscmd([$1]))])
# define least version number from subversion's revision number: # define least version number from subversion's revision number:
# it is taken modulo 256 due to a bug on Apple's MacOSX # 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([ m4_define(x_least, m4_ifdef([x_least_fix], [x_least_fix],
SVN_REVISION="ERROR-UNDEFINED-REVISION-to-be-built-in-subdirectory-of-svn-checkout" m4_ifdef([x_least_diff],
for path in . .. ../..; do mrw_esyscmd_s([
if svn info $path 2>&1 > /dev/null; then VCS_REVISION="ERROR-UNDEFINED-REVISION-to-be-built-in-subdirectory-of-checkout"
SVN_REVISION=$(LANG= svn info $path | sed -n 's/Last Changed Rev: //p') for path in . .. ../..; do
if test -z "${SVN_REVISION}"; then SVN_REVISION=0; fi if test -d .svn; then
break; VCS_REVISION=$(LANG= svn info $path | sed -n 's/Last Changed Rev: //p')
fi if test -z "${VCS_REVISION}"; then VCS_REVISION=0; fi
done break;
echo $ECHO_N $(($SVN_REVISION)) elif test -d .git; then
]), mrw_esyscmd_s([ VCS_REVISION=$(git rev-list --all --count)
SVN_REVISION="ERROR-UNDEFINED-REVISION-to-be-built-in-subdirectory-of-svn-checkout" if test -z "${VCS_REVISION}"; then VCS_REVISION=0; fi
for path in . .. ../..; do break;
if svn info $path 2>&1 > /dev/null; then fi
SVN_REVISION=$(LANG= svn info $path | sed -n 's/Last Changed Rev: //p') done
if test -z "${SVN_REVISION}"; then SVN_REVISION=0; fi echo $ECHO_N $(($VCS_REVISION))
break; ]), mrw_esyscmd_s([
fi VCS_REVISION="ERROR-UNDEFINED-REVISION-to-be-built-in-subdirectory-of-checkout"
done for path in . .. ../..; do
# Mac does not support LEAST > 255 if test -d .svn; then
echo $ECHO_N $(($SVN_REVISION%256)) 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: # define version number from subversion's revision number:
# it is taken modulo 256 due to a bug on Apple's MacOSX # it is taken modulo 256 due to a bug on Apple's MacOSX
# add to x_minor if revision number is > 256 # add to x_minor if revision number is > 256
m4_define(x_minor_diff, mrw_esyscmd_s([ m4_define(x_minor_diff, m4_ifdef([x_least_fix], 0, mrw_esyscmd_s([
SVN_REVISION="ERROR-UNDEFINED-REVISION-to-be-built-in-subdirectory-of-svn-checkout" VCS_REVISION="ERROR-UNDEFINED-REVISION-to-be-built-in-subdirectory-of-checkout"
for path in . .. ../..; do for path in . .. ../..; do
if svn info $path 2>&1 > /dev/null; then if test -d .svn; then
SVN_REVISION=$(LANG= svn info $path | sed -n 's/Last Changed Rev: //p') VCS_REVISION=$(LANG= svn info $path | sed -n 's/Last Changed Rev: //p')
if test -z "${SVN_REVISION}"; then SVN_REVISION=0; fi 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; break;
fi; fi;
done done
# Mac does not support LEAST > 255 # Mac does not support LEAST > 255
echo $ECHO_N $(($SVN_REVISION/256)) echo $ECHO_N $(($VCS_REVISION/256))
])) ])))
# setup version number # 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]))]) 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]))])

@ -61,7 +61,7 @@ DESCRIPTION
configure.ac. Automatically copies or creates all required template configure.ac. Automatically copies or creates all required template
files. 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. initialize your build environment.
Before you call ${MY_NAME} the very first time, edit ${0#/*}/AUTHORS 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 https://dev.marc.waeckerlin.org/, and the path from where you call
${MY_NAME} (which is actually ${PROJECT_PATH}) should be the path to ${MY_NAME} (which is actually ${PROJECT_PATH}) should be the path to
your newly created project. Please note that your project must be a your newly created project. Please note that your project must be a
checked out subversion repository, since this build environment checked out subversion or git repository, since this build
relies on subversion. environment relies on subversion or git.
Example for an initial run, where your new projet is stored in 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 cd ~/svn
svn co https://dev.marc.waeckerlin.org/svn/bootstrap-build-environment/trunk \\ svn co https://dev.marc.waeckerlin.org/svn/bootstrap-build-environment/trunk \\
bootstrap-build-environment 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 cd new-project
../bootstrap-build-environment/bootstrap.sh ../bootstrap-build-environment/bootstrap.sh
@ -201,13 +212,14 @@ FILES
${DEFAULT_PROJECT_NAME}::description(). ${DEFAULT_PROJECT_NAME}::description().
* ChangeLog: Your changelog is automatically maintained from * ChangeLog: Your changelog is automatically maintained from
subversion history, using svn2cl. You don't need to 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 * configure.ac: This file becomes very short and simple. You provide
the project name, the major and minor version. The the project name, the major and minor version. The
least version number is automatically taken from least version number is automatically taken from
subversion's revision, so every checkin subversion's revision, so every checkin
automatically increments the least version 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 C++: AX_USE_CXX
* Enable LibTool library creation: AX_USE_LIBTOOL * Enable LibTool library creation: AX_USE_LIBTOOL
* Enable Scripts: AX_USE_SCRIPTS * Enable Scripts: AX_USE_SCRIPTS
@ -247,6 +259,20 @@ EOF
shift; shift;
done 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\$"' HEADER='## @id '"\$Id\$"'
## ##
@ -270,6 +296,7 @@ CHEADER='/** @id '"\$Id\$"'
// 1 2 3 4 5 6 7 8 // 1 2 3 4 5 6 7 8
// 45678901234567890123456789012345678901234567890123456789012345678901234567890 // 45678901234567890123456789012345678901234567890123456789012345678901234567890
' '
notice() { notice() {
@ -318,7 +345,7 @@ contains() {
checkdir() { checkdir() {
if ! test -d "$1"; then # create path if ! test -d "$1"; then # create path
run mkdir -p "$1" run mkdir -p "$1"
run svn add "$1" run ${VCS} add "$1"
fi fi
} }
@ -365,8 +392,10 @@ to() {
fi fi
chmod $mode $1 chmod $mode $1
if test $exists -eq 0; then if test $exists -eq 0; then
run svn add "$1" run ${VCS} add "$1"
run svn propset svn:keywords "Id" "$1" if test "${VCS}" = "svn"; then
run svn propset svn:keywords "Id" "$1"
fi
fi fi
return 0 return 0
} }
@ -386,8 +415,10 @@ copy() {
fi fi
run cp "${source}" "$1" run cp "${source}" "$1"
if test $exists -eq 0; then if test $exists -eq 0; then
run svn add "$1" run ${VCS} add "$1"
run svn propset svn:keywords "Id" "$1" if test "${VCS}" = "svn"; then
run svn propset svn:keywords "Id" "$1"
fi
fi fi
} }
@ -413,10 +444,27 @@ doxyadd() {
fi 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: # 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 if test "${VCS}" = "svn"; then
svn mkdir trunk branches tags if test "$(LANG= svn info | sed -n 's,Relative URL: *,,p')" = "^/"; then
cd trunk svn mkdir trunk branches tags
cd trunk
fi
fi fi
# Initialize the environment: # Initialize the environment:
@ -761,8 +809,10 @@ if testtag AX_USE_DOXYGEN; then
contains doc/doxyfile.in "${rebuildfiles[@]}"; then contains doc/doxyfile.in "${rebuildfiles[@]}"; then
run doxygen -g doc/doxyfile.in run doxygen -g doc/doxyfile.in
if test $exists -eq 0; then if test $exists -eq 0; then
run svn add doc/doxyfile.in run ${VCS} add doc/doxyfile.in
run svn propset svn:keywords "Id" doc/doxyfile.in if test "${VCS}" = "svn"; then
run svn propset svn:keywords "Id" doc/doxyfile.in
fi
fi fi
doxyreplace PROJECT_NAME "@PACKAGE_NAME@" doxyreplace PROJECT_NAME "@PACKAGE_NAME@"
doxyreplace PROJECT_NUMBER "@PACKAGE_VERSION@" doxyreplace PROJECT_NUMBER "@PACKAGE_VERSION@"
@ -842,7 +892,7 @@ if testtag AX_USE_DEBIAN_PACKAGING; then
-- @AUTHOR@ @BUILD_DATE@ -- @AUTHOR@ @BUILD_DATE@
EOF 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 to debian/control.in <<EOF
Source: @PACKAGE_NAME@ Source: @PACKAGE_NAME@
Priority: extra Priority: extra
@ -913,7 +963,7 @@ else
fi) fi)
Source0: %{name}-%{version}.tar.gz Source0: %{name}-%{version}.tar.gz
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
BuildRequires: gnupg, subversion, automake, autoconf$( BuildRequires: gnupg, ${VCSDEPENDS}, automake, autoconf$(
if testtag AX_USE_DOXYGEN; then if testtag AX_USE_DOXYGEN; then
echo -n ", doxygen"; echo -n ", doxygen";
fi) fi)
@ -1072,7 +1122,7 @@ if test -f makefile; then
fi fi
#### Bootstrap Before Configure #### #### Bootstrap Before Configure ####
run --no-check svn2cl run --no-check vcs2cl
run aclocal run aclocal
if testtag AX_USE_LIBTOOL; then run libtoolize --force; fi if testtag AX_USE_LIBTOOL; then run libtoolize --force; fi
run automake -a run automake -a

@ -196,5 +196,5 @@ for command in "${commands[@]}"; do
ifthenelse "${command}" "ARG" ifthenelse "${command}" "ARG"
done done
docker exec ${DOCKER_ID} ./resolve-debbuilddeps.sh docker exec ${DOCKER_ID} ./resolve-debbuilddeps.sh
docker exec -u $(id -u) ${DOCKER_ID} svn upgrade || true docker exec -u $(id -u) ${DOCKER_ID} test -d .svn && svn upgrade || true
docker exec -u $(id -u) ${DOCKER_ID} ./bootstrap.sh -t "${targets}" docker exec -u $(id -u) ${DOCKER_ID} ./bootstrap.sh -t "${targets}"

@ -75,7 +75,7 @@ cd ${oldpath}
# Step 4: if necessary, install qt_menu.nib # Step 4: if necessary, install qt_menu.nib
if test -n "${QTDIR}"; then if test -n "${QTDIR}"; then
MENU_NIB=$(find ${QTDIR} -name .svn -prune -o -name qt_menu.nib -print \ MENU_NIB=$(find ${QTDIR} -name .svn -o -name .git -prune -o -name qt_menu.nib -print \
| head -1) | head -1)
if test -e "${MENU_NIB}"; then if test -e "${MENU_NIB}"; then
rsync -r "${MENU_NIB}" ${1}/Contents/Resources/ rsync -r "${MENU_NIB}" ${1}/Contents/Resources/
@ -100,4 +100,4 @@ else
</dict> </dict>
</plist> </plist>
EOF EOF
fi fi

Loading…
Cancel
Save