updated build system

master
Marc Wäckerlin 9 years ago
parent 92598b949a
commit ff42f801b7
  1. 9
      ChangeLog
  2. 33
      ax_init_standard_project.m4
  3. 41
      bootstrap.sh
  4. 15
      build-in-docker.sh
  5. 12
      resolve-debbuilddeps.sh

@ -1,3 +1,12 @@
2015-11-03 21:48 marc
* debian/control.in: updated dependencies
2015-11-03 11:45 marc
* ChangeLog, ax_check_qt.m4, bootstrap.sh, resolve-debbuilddeps.sh:
prepared for build in a docker instance on jenkins
2015-11-01 23:53 marc 2015-11-01 23:53 marc
* AUTHORS, ChangeLog, ax_init_standard_project.m4, bootstrap.sh, * AUTHORS, ChangeLog, ax_init_standard_project.m4, bootstrap.sh,

@ -265,14 +265,8 @@ maintainer-clean-cxx-targets:
EOF EOF
]) ])
# use this in configure.ac to support CppUnit for C++ unit tests # use this in configure.ac to support tests without CppUnit
AC_DEFUN([AX_USE_CPPUNIT], [ AC_DEFUN([AX_BUILD_TEST], [
AM_PATH_CPPUNIT([1.0.0], [have_cppunit="yes"], [have_cppunit="no"])
# infos and warnings
if test "$have_cppunit" = "no"; then
AC_MSG_WARN([Missing cppunit development library!
- you cannot check the library using "make check"
- everything else works perfectly]); fi
AC_CONFIG_FILES([test/makefile]) AC_CONFIG_FILES([test/makefile])
AX_ADD_MAKEFILE_TARGET_DEP([maintainer-clean-am], [maintainer-clean-test-targets], [test/makefile.in]) AX_ADD_MAKEFILE_TARGET_DEP([maintainer-clean-am], [maintainer-clean-test-targets], [test/makefile.in])
test -f test/makefile.in && cat >> test/makefile.in <<EOF test -f test/makefile.in && cat >> test/makefile.in <<EOF
@ -283,6 +277,17 @@ maintainer-clean-test-targets:
EOF EOF
]) ])
# use this in configure.ac to support CppUnit for C++ unit tests
AC_DEFUN([AX_USE_CPPUNIT], [
AM_PATH_CPPUNIT([1.0.0], [have_cppunit="yes"], [have_cppunit="no"])
# infos and warnings
if test "$have_cppunit" = "no"; then
AC_MSG_WARN([Missing cppunit development library!
- you cannot check the project using "make check"
- everything else works perfectly]); fi
AX_BUILD_TEST
])
# use this in configure.ac to support C++ examples # use this in configure.ac to support C++ examples
AC_DEFUN([AX_BUILD_EXAMPLES], [ AC_DEFUN([AX_BUILD_EXAMPLES], [
AC_CONFIG_FILES([examples/makefile]) AC_CONFIG_FILES([examples/makefile])
@ -696,3 +701,15 @@ AC_DEFUN([AX_CHECK_VALID_LD_FLAG], [
AC_SUBST(LDFLAGS) AC_SUBST(LDFLAGS)
AC_MSG_RESULT([$newflag in $LDFLAGS]) AC_MSG_RESULT([$newflag in $LDFLAGS])
]) ])
# Check if a package exists in the current distribution, if yes, require it
# in debian/control.in append @DEB_DEPEND_IFEXISTS@ to Build-Depends
# - parameter:
# $1 = package name
AC_DEFUN([AX_DEB_DEPEND_IFEXISTS], [
pkg=$1
if test -n "$(apt-cache policy -q ${pkg} 2> /dev/null)"; then
DEB_DEPEND_IFEXISTS+=", ${pkg}"
fi
AC_SUBST(DEB_DEPEND_IFEXISTS)
])

@ -19,6 +19,7 @@ PROJECT_PATH=$(pwd)
DEFAULT_PROJECT_NAME=${PROJECT_PATH##*/} DEFAULT_PROJECT_NAME=${PROJECT_PATH##*/}
configure=0 configure=0
build=0 build=0
docker=0
buildtarget="distcheck" buildtarget="distcheck"
overwrite=0 overwrite=0
rebuild=0 rebuild=0
@ -26,6 +27,7 @@ rebuildfiles=()
while test $# -gt 0; do while test $# -gt 0; do
case "$1" in case "$1" in
(--configure|-c) configure=1;; (--configure|-c) configure=1;;
(--docker|-d) docker=1;;
(--build|-b) configure=1; build=1;; (--build|-b) configure=1; build=1;;
(--target|-t) shift; configure=1; build=1; buildtarget="$1";; (--target|-t) shift; configure=1; build=1; buildtarget="$1";;
(--overwrite|-o) overwrite=1;; (--overwrite|-o) overwrite=1;;
@ -42,6 +44,7 @@ SYNOPSIS
OPTIONS OPTIONS
--configure, -c call ./configure after initialization --configure, -c call ./configure after initialization
--docker, -d build and run tests in a docker instance
--build, -b build, also call ./configure && make distcheck --build, -b build, also call ./configure && make distcheck
--target, -t <target> same as -b, but specify target instead of distcheck --target, -t <target> same as -b, but specify target instead of distcheck
--overwrite, -o overwrite all basic files (bootstrap.sh, m4-macros) --overwrite, -o overwrite all basic files (bootstrap.sh, m4-macros)
@ -105,6 +108,7 @@ GENERATED FILES
* ax_check_qt.m4 - auxiliary macro definition file * ax_check_qt.m4 - auxiliary macro definition file
* resolve-debbuilddeps.sh - script to install debian package dependencies * resolve-debbuilddeps.sh - script to install debian package dependencies
* resolve-rpmbuilddeps.sh - script to install RPM package dependencies * resolve-rpmbuilddeps.sh - script to install RPM package dependencies
* build-in-docker.sh - script to build the project encapsulated in a docker container
* build-resource-file.sh - build resource.qrc file from a resource directory * build-resource-file.sh - build resource.qrc file from a resource directory
* mac-create-app-bundle.sh - script to create apple mac os-x app-bundle * mac-create-app-bundle.sh - script to create apple mac os-x app-bundle
* AUTHORS - replace your name in AUTHORS before first run * AUTHORS - replace your name in AUTHORS before first run
@ -119,7 +123,7 @@ GENERATED FILES
* scripts/makefile.in - if you enabled AX_USE_SCRIPTS * scripts/makefile.in - if you enabled AX_USE_SCRIPTS
* doc/makefile.am - if you enabled AX_USE_DOXYGEN * doc/makefile.am - if you enabled AX_USE_DOXYGEN
* doc/doxyfile.in - if you enabled AX_USE_DOXYGEN * doc/doxyfile.in - if you enabled AX_USE_DOXYGEN
* test/makefile.am - if you enabled AX_USE_CPPUNIT * test/makefile.am - if you enabled AX_BUILD_TEST or AX_USE_CPPUNIT
* examples/makefile.am - if you enabled AX_BUILD_EXAMPLES * examples/makefile.am - if you enabled AX_BUILD_EXAMPLES
* debian/changelog.in - if you enabled AX_USE_DEBIAN_PACKAGING * debian/changelog.in - if you enabled AX_USE_DEBIAN_PACKAGING
* debian/control.in - if you enabled AX_USE_DEBIAN_PACKAGING * debian/control.in - if you enabled AX_USE_DEBIAN_PACKAGING
@ -170,7 +174,7 @@ FILE DEPENDENCIES
* test/makefile.am depends on AX_USE_LIBTOOL * test/makefile.am depends on AX_USE_LIBTOOL
* html/makefile.am depends on AX_BUILD_HTML * html/makefile.am depends on AX_BUILD_HTML
* doc/doxyfile.in depends on AX_BUILD_EXAMPLES * doc/doxyfile.in depends on AX_BUILD_EXAMPLES
* debian/control.in depends on AX_USE_DOXYGEN, AX_USE_CPPUNIT, * debian/control.in depends on AX_USE_DOXYGEN, AX_USE_CPPUNIT
AX_CXX_QT, AX_CHECK_QT, AX_REQUIRE_QT, AX_USE_LIBTOOL AX_CXX_QT, AX_CHECK_QT, AX_REQUIRE_QT, AX_USE_LIBTOOL
* debian/${DEFAULT_PROJECT_NAME}.install depends on AX_USE_LIBTOOL * debian/${DEFAULT_PROJECT_NAME}.install depends on AX_USE_LIBTOOL
* debian/${DEFAULT_PROJECT_NAME}.dirs depends on AX_USE_LIBTOOL * debian/${DEFAULT_PROJECT_NAME}.dirs depends on AX_USE_LIBTOOL
@ -207,6 +211,7 @@ FILES
* Enable Debian packaging by calling "make deb": AX_USE_DEBIAN_PACKAGING * Enable Debian packaging by calling "make deb": AX_USE_DEBIAN_PACKAGING
* Enable RPM packaging by calling "make rpm": AX_USE_RPM_PACKAGING * Enable RPM packaging by calling "make rpm": AX_USE_RPM_PACKAGING
* Enable C++ testing using CppUnit: AX_USE_CPPUNIT * Enable C++ testing using CppUnit: AX_USE_CPPUNIT
* Enable other tests: AX_BUILD_TEST
* Enable C++ examples, i.e. for libraries: AX_BUILD_EXAMPLES * Enable C++ examples, i.e. for libraries: AX_BUILD_EXAMPLES
* Check for C++11 support: AX_CXX_COMPILE_STDCXX_11 (see ax_cxx_compile_stdcxx_11.m4) * Check for C++11 support: AX_CXX_COMPILE_STDCXX_11 (see ax_cxx_compile_stdcxx_11.m4)
* Require a QT module: AX_REQUIRE_QT (see ax_check_qt.m4) * Require a QT module: AX_REQUIRE_QT (see ax_check_qt.m4)
@ -404,6 +409,7 @@ copy ax_cxx_compile_stdcxx_11.m4
copy ax_check_qt.m4 copy ax_check_qt.m4
copy resolve-debbuilddeps.sh copy resolve-debbuilddeps.sh
copy resolve-rpmbuilddeps.sh copy resolve-rpmbuilddeps.sh
copy build-in-docker.sh
copy build-resource-file.sh copy build-resource-file.sh
copy mac-create-app-bundle.sh copy mac-create-app-bundle.sh
AUTHOR=$(gpg -K | sed -n 's,uid *,,p' | sort | head -1) AUTHOR=$(gpg -K | sed -n 's,uid *,,p' | sort | head -1)
@ -439,6 +445,7 @@ AX_INIT_STANDARD_PROJECT
#AX_USE_DEBIAN_PACKAGING #AX_USE_DEBIAN_PACKAGING
#AX_USE_RPM_PACKAGING #AX_USE_RPM_PACKAGING
#AX_USE_CPPUNIT #AX_USE_CPPUNIT
#AX_BUILD_TEST
#AX_BUILD_EXAMPLES #AX_BUILD_EXAMPLES
#AX_BUILD_HTML #AX_BUILD_HTML
@ -458,8 +465,8 @@ IFS="$SAVEIFS"
PackageName=${PackageName[*]^} PackageName=${PackageName[*]^}
PackageName=${PackageName// /} PackageName=${PackageName// /}
if ! testtag "AX_CHECK_QT" configure.ac && \ if ! testtag AX_CHECK_QT && \
! testtag "AX_REQUIRE_QT" configure.ac; then ! testtag AX_REQUIRE_QT; then
echo "${HEADER}MAINTAINERCLEANFILES = makefile.in" | \ echo "${HEADER}MAINTAINERCLEANFILES = makefile.in" | \
to --condition AX_USE_CXX src/makefile.am to --condition AX_USE_CXX src/makefile.am
elif ! test -e src/makefile.am; then elif ! test -e src/makefile.am; then
@ -695,10 +702,20 @@ namespace NAMESPACE {
EOF EOF
echo "${HEADER}MAINTAINERCLEANFILES = makefile.in" | to --condition AX_USE_SCRIPTS scripts/makefile.am echo "${HEADER}MAINTAINERCLEANFILES = makefile.in" | to --condition AX_USE_SCRIPTS scripts/makefile.am
echo "${HEADER}MAINTAINERCLEANFILES = makefile.in" | to --condition AX_USE_DOXYGEN doc/makefile.am echo "${HEADER}MAINTAINERCLEANFILES = makefile.in" | to --condition AX_USE_DOXYGEN doc/makefile.am
to --condition AX_USE_CPPUNIT test/makefile.am <<EOF to --condition 'AX_BUILD_TEST|AX_USE_CPPUNIT' test/makefile.am <<EOF
${HEADER}AM_CPPFLAGS = -I\${top_srcdir}/src -I\${top_builddir}/src ${HEADER}$(if testtag AX_USE_CXX; then
cat <<EOF2
AM_CPPFLAGS = -I\${top_srcdir}/src -I\${top_builddir}/src
AM_LDFLAGS = -L\${abs_top_builddir}/src/.libs AM_LDFLAGS = -L\${abs_top_builddir}/src/.libs
$(if testtag AX_USE_LIBTOOL; then
cat <<EOF3
LDADD = -l${PACKAGE_NAME#lib} LDADD = -l${PACKAGE_NAME#lib}
EOF3
fi)
EOF2
fi)
TESTS =
MAINTAINERCLEANFILES = makefile.in MAINTAINERCLEANFILES = makefile.in
EOF EOF
@ -761,7 +778,7 @@ if testtag AX_USE_DOXYGEN; then
if testtag AX_BUILD_HTML; then if testtag AX_BUILD_HTML; then
doxyadd INPUT "@top_srcdir@/html" doxyadd INPUT "@top_srcdir@/html"
fi fi
if testtag AX_USE_CPPUNIT; then if testtag AX_BUILD_TEST AX_USE_CPPUNIT; then
doxyadd INPUT "@top_srcdir@/test" doxyadd INPUT "@top_srcdir@/test"
fi fi
doxyreplace FILE_PATTERNS '*.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.idl *.ddl *.odl *.h *.hh *.hxx *.hpp *.h++ *.cs *.d *.php *.php4 *.php5 *.phtml *.inc *.m *.markdown *.md *.mm *.dox *.py *.f90 *.f *.for *.tcl *.vhd *.vhdl *.ucf *.qsf *.as *.js *.wt' doxyreplace FILE_PATTERNS '*.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.idl *.ddl *.odl *.h *.hh *.hxx *.hpp *.h++ *.cs *.d *.php *.php4 *.php5 *.phtml *.inc *.m *.markdown *.md *.mm *.dox *.py *.f90 *.f *.for *.tcl *.vhd *.vhdl *.ucf *.qsf *.as *.js *.wt'
@ -802,11 +819,12 @@ if testtag AX_USE_DEBIAN_PACKAGING; then
-- @AUTHOR@ @BUILD_DATE@ -- @AUTHOR@ @BUILD_DATE@
EOF EOF
BUILD_DEPENDS="debhelper, subversion, svn2cl, 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 | qt4-default | 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
Maintainer: @AUTHOR@ Maintainer: @AUTHOR@
Build-Depends: debhelper, subversion, pkg-config, 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 | qt4-default | 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: ${BUILD-DEPENDS}
Package: @PACKAGE_NAME@ Package: @PACKAGE_NAME@
Section: $(if testtag AX_USE_LIBTOOL; then echo "libs"; fi) Section: $(if testtag AX_USE_LIBTOOL; then echo "libs"; fi)
@ -820,7 +838,7 @@ $( if testtag AX_USE_LIBTOOL; then
Package: @PACKAGE_NAME@-dev Package: @PACKAGE_NAME@-dev
Section: libdevel Section: libdevel
Architecture: any Architecture: any
Depends: @PACKAGE_NAME@ (= \${binary:Version}) Depends: @PACKAGE_NAME@ (= \${binary:Version}), ${BUILD-DEPENDS}
Description: @DESCRIPTION@ - Development Package Description: @DESCRIPTION@ - Development Package
@README_DEB@ @README_DEB@
EOF2 EOF2
@ -1011,3 +1029,8 @@ fi
if test "$build" -eq 1; then if test "$build" -eq 1; then
make $buildtarget make $buildtarget
fi fi
#### Build In Docker If User Requires ####
if test "$docker" -eq 1; then
./build-in-docker.sh
fi

@ -0,0 +1,15 @@
#! /bin/bash -ex
# build and test everything in a fresh docker installation
DOCKER_ID=$(docker run -d -v $(pwd):/workdir -w /workdir ubuntu sleep infinity)
trap "docker rm -f ${DOCKER_ID}" INT TERM EXIT
docker exec ${DOCKER_ID} apt-get install -y software-properties-common apt-transport-https dpkg-dev
docker exec ${DOCKER_ID} apt-add-repository universe
docker exec ${DOCKER_ID} apt-add-repository https://dev.marc.waeckerlin.org/repository
wget -O- https://dev.marc.waeckerlin.org/repository/PublicKey \
| docker exec -i ${DOCKER_ID} apt-key add -
docker exec ${DOCKER_ID} apt-get update
docker exec ${DOCKER_ID} ./resolve-debbuilddeps.sh
docker exec -u $(id -u) ${DOCKER_ID} svn upgrade || true
docker exec -u $(id -u) ${DOCKER_ID} ./bootstrap.sh -t "all check distcheck"

@ -22,11 +22,20 @@ function install() {
return 0 return 0
fi fi
fi fi
return 1
} }
TO_INSTALL=
if test -e debian/control.in -a ! -e debian/control; then if test -e debian/control.in -a ! -e debian/control; then
sed 's,@[^@]*@, dummytext,g' debian/control.in > debian/control for f in $(sed -n 's, *AX_DEB_DEPEND_IFEXISTS(\([^)]*\)).*,\1,p' configure.ac); do
if test -n "$(apt-cache policy -q ${f})" && ! dpkg -l "${f}"; then
TO_INSTALL+=" ${f}"
fi
done
trap "rm debian/control" INT TERM EXIT trap "rm debian/control" INT TERM EXIT
sed 's,@DEB_DEPEND_IFEXISTS@,,g' debian/control.in | \
sed 's,@[^@]*@, dummytext,g' > debian/control
fi fi
if test -n "${SCHROOTNAME}"; then if test -n "${SCHROOTNAME}"; then
@ -38,7 +47,6 @@ else
fi fi
DEPS=$(echo "$DEPS" | sed -n '/Unmet build dependencies/ { s,.*Unmet build dependencies: ,,g; s, ([^)]*),,g; s, *| *,|,g; p}') DEPS=$(echo "$DEPS" | sed -n '/Unmet build dependencies/ { s,.*Unmet build dependencies: ,,g; s, ([^)]*),,g; s, *| *,|,g; p}')
TO_INSTALL=
for pa in ${DEPS}; do for pa in ${DEPS}; do
if test ${pa//|/} = ${pa}; then if test ${pa//|/} = ${pa}; then
TO_INSTALL+=" ${pa}" TO_INSTALL+=" ${pa}"

Loading…
Cancel
Save