updated build system

master
Marc Wäckerlin 6 years ago
parent 1f1ae4936d
commit 3b965156ad
  1. 2
      COPYING
  2. 5
      ChangeLog
  3. 2
      INSTALL
  4. 23
      ax_check_qt.m4
  5. 255
      ax_init_standard_project.m4
  6. 436
      bootstrap.sh
  7. 74
      build-in-docker.sh
  8. 171
      dependency-graph.sh
  9. 1
      mac-create-app-bundle.sh
  10. 4
      nodejs/safechat/client.js
  11. 53
      resolve-debbuilddeps.sh
  12. 66
      resolve-rpmbuilddeps.sh
  13. 160
      template.sh

@ -1 +1 @@
/usr/share/automake-1.14/COPYING /usr/share/automake-1.15/COPYING

@ -1,3 +1,8 @@
2017-05-12 13:51
* [r113] ChangeLog, nodejs/package.json.in:
newer OpenPGP.js has support for key signing
2017-05-11 14:59 2017-05-11 14:59
* [r112] nodejs/client/safechat.js, nodejs/makefile.am, * [r112] nodejs/client/safechat.js, nodejs/makefile.am,

@ -1 +1 @@
/usr/share/automake-1.14/INSTALL /usr/share/automake-1.15/INSTALL

@ -230,6 +230,7 @@ AC_DEFUN([AX_CHECK_QT], [
AC_SUBST(CXXFLAGS) AC_SUBST(CXXFLAGS)
AC_SUBST(PKG_REQUIREMENTS) AC_SUBST(PKG_REQUIREMENTS)
AX_ADDITIONAL_QT_RULES_HACK=' AX_ADDITIONAL_QT_RULES_HACK='
#### Begin: Appended by $0
LANGUAGE_FILE_BASE ?= translations LANGUAGE_FILE_BASE ?= translations
@ -241,7 +242,6 @@ moc_%.cxx: %.hxx
qrc_%.cxx: %.qrc qrc_%.cxx: %.qrc
$(RCC) -o [$][@] -name ${<:%.qrc=%} $< $(RCC) -o [$][@] -name ${<:%.qrc=%} $<
AC_SUBST(AX_ADDITIONAL_QT_RULES_HACK)
#%.qrc: % #%.qrc: %
# cwd=$$(pwd) && cd $< && $(RCC) -project -o $${cwd}/[$][@] # cwd=$$(pwd) && cd $< && $(RCC) -project -o $${cwd}/[$][@]
@ -249,12 +249,15 @@ qrc_%.cxx: %.qrc
%.qm: %.ts %.qm: %.ts
${LRELEASE} $< -qm [$][@] ${LRELEASE} $< -qm [$][@]
%.ts: ${LANGUAGE_FILES:%=%} %.ts: ${LANGUAGE_FILES}
${LUPDATE} -no-obsolete \ ${LUPDATE} -no-obsolete \
-target-language ${@:${LANGUAGE_FILE_BASE}_%.ts=%} \ -target-language [$]{@:${LANGUAGE_FILE_BASE}_%.ts=%} \
-ts [$][@] $< [$][^] \
-ts [$][@]
']) #### End: $0
'
])
AC_DEFUN([AX_REQUIRE_QT], [ AC_DEFUN([AX_REQUIRE_QT], [
AX_CHECK_QT([$1], [$2], [$3], [$4]) AX_CHECK_QT([$1], [$2], [$3], [$4])
@ -269,3 +272,13 @@ AC_DEFUN([AX_REQUIRE_QT], [
AC_DEFUN([AX_QT_NO_KEYWORDS], [ AC_DEFUN([AX_QT_NO_KEYWORDS], [
CPPFLAGS+=" -DQT_NO_KEYWORDS" CPPFLAGS+=" -DQT_NO_KEYWORDS"
]) ])
AC_DEFUN([AX_INIT_QT], [
if test -n "${AX_ADDITIONAL_QT_RULES_HACK}"; then
for f in $(find test examples src -name makefile.in); do
test -f "$f" && cat >> "$f" <<EOF
${AX_ADDITIONAL_QT_RULES_HACK}
EOF
done
fi
])

@ -90,7 +90,7 @@ dnl refers to ${prefix}. Thus we have to use `eval' twice.
# $3 = filename of makefile.in # $3 = filename of makefile.in
AC_DEFUN([AX_ADD_MAKEFILE_TARGET_DEP], [ AC_DEFUN([AX_ADD_MAKEFILE_TARGET_DEP], [
sh_add_makefile_target_dep() { sh_add_makefile_target_dep() {
sed -i -e ':a;/^'${1}':.*\\$/{N;s/\\\n//;ta};s/^'${1}':.*$/& '${2}'/' "${srcdir}/${3}" sed -i -e ':a;/^'${1}':.*\\$/{N;s/\\\n//;ta};s/^'"${1}"':.*$/& '"${2}"'/' "${srcdir}/${3}"
if ! egrep -q "${1}:.* ${2}" "${srcdir}/${3}"; then if ! egrep -q "${1}:.* ${2}" "${srcdir}/${3}"; then
echo "${1}: ${2}" >> "${srcdir}/${3}" echo "${1}: ${2}" >> "${srcdir}/${3}"
fi fi
@ -171,7 +171,7 @@ AC_DEFUN([AX_INIT_STANDARD_PROJECT], [
AX_SUBST(HOME) AX_SUBST(HOME)
if test -f README.md; then if test -f README.md; then
README=$(tail -n +3 README.md) README=$(tail -n +3 README.md)
DESCRIPTION=$(head -1 README.md) DESCRIPTION=$(head -1 README.md | sed 's,^#\+ *,,;s, *#\+$,,')
else else
README=$(tail -n +3 README) README=$(tail -n +3 README)
DESCRIPTION=$(head -1 README) DESCRIPTION=$(head -1 README)
@ -225,6 +225,9 @@ AC_DEFUN([AX_INIT_STANDARD_PROJECT], [
VENDOR=$((lsb_release -is 2>/dev/null || echo unknown) | tr ' ' '_') VENDOR=$((lsb_release -is 2>/dev/null || echo unknown) | tr ' ' '_')
AX_SUBST(VENDOR) AX_SUBST(VENDOR)
DISTRO=$(lsb_release -sc 2>/dev/null || uname -s 2>/dev/null) DISTRO=$(lsb_release -sc 2>/dev/null || uname -s 2>/dev/null)
if test "${DISTRO}" = "n/a"; then
DISTRO="${VENDOR}_$(lsb_release -sr 2>/dev/null | tr ' ' '_')"
fi
AX_SUBST(DISTRO) AX_SUBST(DISTRO)
ARCH=$((@<:@@<:@ $(uname -sm) =~ 64 @:>@@:>@ && echo amd64) || (@<:@@<:@ $(uname -sm) =~ 'i?86' @:>@@:>@ && echo i386 || uname -sm)) ARCH=$((@<:@@<:@ $(uname -sm) =~ 64 @:>@@:>@ && echo amd64) || (@<:@@<:@ $(uname -sm) =~ 'i?86' @:>@@:>@ && echo i386 || uname -sm))
AX_SUBST(ARCH) AX_SUBST(ARCH)
@ -453,6 +456,12 @@ AC_DEFUN([AX_USE_NODEJS], [
[${PATH}${PATH_SEPARATOR}${ANDROID_HOME}/tools]) [${PATH}${PATH_SEPARATOR}${ANDROID_HOME}/tools])
AC_CONFIG_FILES([nodejs/package.json]) AC_CONFIG_FILES([nodejs/package.json])
AC_CONFIG_FILES([nodejs/makefile]) AC_CONFIG_FILES([nodejs/makefile])
if test -z "${DEB_SECTION}"; then
AX_DEB_SECTION([web])
fi
if test -z "${RPM_GROUP}"; then
AX_RPM_GROUP([Applications/Internet])
fi
AX_ADD_MAKEFILE_TARGET_DEP([maintainer-clean-am], [maintainer-clean-nodejs-targets], [nodejs/makefile.in]) AX_ADD_MAKEFILE_TARGET_DEP([maintainer-clean-am], [maintainer-clean-nodejs-targets], [nodejs/makefile.in])
test -f nodejs/makefile.in && cat >> nodejs/makefile.in <<EOF test -f nodejs/makefile.in && cat >> nodejs/makefile.in <<EOF
#### Begin: Appended by $0 #### Begin: Appended by $0
@ -491,6 +500,12 @@ EOF
# use this in configure.ac to support HTML data for webservers # use this in configure.ac to support HTML data for webservers
AC_DEFUN([AX_BUILD_HTML], [ AC_DEFUN([AX_BUILD_HTML], [
AC_CONFIG_FILES([html/makefile]) AC_CONFIG_FILES([html/makefile])
if test -z "${DEB_SECTION}"; then
AX_DEB_SECTION([web])
fi
if test -z "${RPM_GROUP}"; then
AX_RPM_GROUP([Applications/Internet])
fi
AX_ADD_MAKEFILE_TARGET_DEP([maintainer-clean-am], [maintainer-clean-html-targets], [html/makefile.in]) AX_ADD_MAKEFILE_TARGET_DEP([maintainer-clean-am], [maintainer-clean-html-targets], [html/makefile.in])
test -f html/makefile.in && cat >> html/makefile.in <<EOF test -f html/makefile.in && cat >> html/makefile.in <<EOF
#### Begin: Appended by $0 #### Begin: Appended by $0
@ -518,6 +533,12 @@ AC_DEFUN([AX_USE_LIBTOOL], [
AC_SUBST(LIB_VERSION) AC_SUBST(LIB_VERSION)
AC_PROG_LIBTOOL AC_PROG_LIBTOOL
AC_CONFIG_FILES([src/${PACKAGE_NAME}.pc]) AC_CONFIG_FILES([src/${PACKAGE_NAME}.pc])
if test -z "${DEB_SECTION}"; then
AX_DEB_SECTION([devel])
fi
if test -z "${RPM_GROUP}"; then
AX_RPM_GROUP([Development/Libraries])
fi
AX_ADD_MAKEFILE_TARGET_DEP([install-data-am], [install-data-libtool-pkg], [src/makefile.in]) AX_ADD_MAKEFILE_TARGET_DEP([install-data-am], [install-data-libtool-pkg], [src/makefile.in])
AX_ADD_MAKEFILE_TARGET_DEP([uninstall-am], [uninstall-data-am], [src/makefile.in]) AX_ADD_MAKEFILE_TARGET_DEP([uninstall-am], [uninstall-data-am], [src/makefile.in])
AX_ADD_MAKEFILE_TARGET_DEP([uninstall-data-am], [uninstall-data-libtool-pkg], [src/makefile.in]) AX_ADD_MAKEFILE_TARGET_DEP([uninstall-data-am], [uninstall-data-libtool-pkg], [src/makefile.in])
@ -535,7 +556,11 @@ EOF
]) ])
# use this in configure.ac to support debian packages # use this in configure.ac to support debian packages
# - $1: optional debian package section
AC_DEFUN([AX_USE_DEBIAN_PACKAGING], [ AC_DEFUN([AX_USE_DEBIAN_PACKAGING], [
if test -n "$1"; then
AX_DEB_SECTION([$1])
fi
if test -f README.md; then if test -f README.md; then
README_DEB=$(tail -n +3 README.md | sed -e 's/^ *$/./g' -e 's/^/ /g') README_DEB=$(tail -n +3 README.md | sed -e 's/^ *$/./g' -e 's/^/ /g')
else else
@ -553,6 +578,7 @@ clean-debian-targets:
-rm -rf \${PACKAGE_NAME}_\${PACKAGE_VERSION}~\${DISTRO}.\${BUILD_NUMBER}.{dsc,tar.gz} \${PACKAGE_NAME}_\${PACKAGE_VERSION}~\${DISTRO}.\${BUILD_NUMBER}*.changes \$\$(sed -n 's,Package: \(.*\),\1_${PACKAGE_VERSION}~${DISTRO}.${BUILD_NUMBER}*.deb,p;' debian/control) -rm -rf \${PACKAGE_NAME}_\${PACKAGE_VERSION}~\${DISTRO}.\${BUILD_NUMBER}.{dsc,tar.gz} \${PACKAGE_NAME}_\${PACKAGE_VERSION}~\${DISTRO}.\${BUILD_NUMBER}*.changes \$\$(sed -n 's,Package: \(.*\),\1_${PACKAGE_VERSION}~${DISTRO}.${BUILD_NUMBER}*.deb,p;' debian/control)
deb: distdir deb: distdir
cd \${PACKAGE_NAME}-\${PACKAGE_VERSION} && ( export CFLAGS="\${CFLAGS}"; export CPPFLAGS="\${CPPFLAGS}"; export CXXFLAGS="\${CXXFLAGS}"; export LDFLAGS="\${LDFLAGS}"; export DEB_CFLAGS_APPEND="\${CFLAGS}"; export DEB_CPPFLAGS_APPEND="\${CPPFLAGS}"; export DEB_CXXFLAGS_APPEND="\${CXXFLAGS}"; export DEB_LDFLAGS_APPEND="\${LDFLAGS}"; dpkg-buildpackage ) cd \${PACKAGE_NAME}-\${PACKAGE_VERSION} && ( export CFLAGS="\${CFLAGS}"; export CPPFLAGS="\${CPPFLAGS}"; export CXXFLAGS="\${CXXFLAGS}"; export LDFLAGS="\${LDFLAGS}"; export DEB_CFLAGS_APPEND="\${CFLAGS}"; export DEB_CPPFLAGS_APPEND="\${CPPFLAGS}"; export DEB_CXXFLAGS_APPEND="\${CXXFLAGS}"; export DEB_LDFLAGS_APPEND="\${LDFLAGS}"; dpkg-buildpackage )
gpg --verify \${PACKAGE_NAME}_\${PACKAGE_VERSION}~\${DISTRO}.\${BUILD_NUMBER}.dsc
distclean-debian-targets: distclean-debian-targets:
-rm debian/changelog debian/control -rm debian/changelog debian/control
#### End: $0 #### End: $0
@ -560,7 +586,11 @@ EOF
]) ])
# use this in configure.ac to support RPM packages # use this in configure.ac to support RPM packages
# - $1: optional rpm package group
AC_DEFUN([AX_USE_RPM_PACKAGING], [ AC_DEFUN([AX_USE_RPM_PACKAGING], [
if test -n "$1"; then
AX_RPM_GROUP([$1])
fi
AC_CONFIG_FILES([${PACKAGE_NAME}.spec]) AC_CONFIG_FILES([${PACKAGE_NAME}.spec])
#AX_ADD_MAKEFILE_TARGET_DEP([clean-am], [clean-rpm-targets], [makefile.in]) #AX_ADD_MAKEFILE_TARGET_DEP([clean-am], [clean-rpm-targets], [makefile.in])
AX_ADD_MAKEFILE_TARGET_DEP([clean-am], [clean-rpm-targets], [makefile.in]) AX_ADD_MAKEFILE_TARGET_DEP([clean-am], [clean-rpm-targets], [makefile.in])
@ -594,7 +624,7 @@ AC_DEFUN([AX_USE_DOXYGEN], [
AC_CHECK_PROG(have_doxygen, doxygen, yes, no) AC_CHECK_PROG(have_doxygen, doxygen, yes, no)
AC_CHECK_PROG(have_dot, dot, yes, no) AC_CHECK_PROG(have_dot, dot, yes, no)
AC_CHECK_PROG(have_mscgen, mscgen, yes, no) AC_CHECK_PROG(have_mscgen, mscgen, yes, no)
AM_CONDITIONAL(NEED_PLANTUML, test "$have_doxygen" = "yes" -a "1.8.11" != $((echo "1.8.11"; doxygen -v) | sort -V | head -1)) AM_CONDITIONAL(NEED_PLANTUML, test "$have_doxygen" = "yes" -a "1.8.11" != $((echo "1.8.11"; doxygen -v 2>/dev/null) | sort -V | head -1))
PDF_DOC=${PACKAGE_NAME}-${PACKAGE_VERSION}.pdf PDF_DOC=${PACKAGE_NAME}-${PACKAGE_VERSION}.pdf
AC_SUBST(PDF_DOC) AC_SUBST(PDF_DOC)
if test "$have_doxygen" = "no"; then if test "$have_doxygen" = "no"; then
@ -714,6 +744,13 @@ EOF
# $4 = alternative module names (space separated, optional) # $4 = alternative module names (space separated, optional)
# $5 = optional flags: # $5 = optional flags:
# manualflags if CXXFLAGS, CPPFLAGS, LIBS should remain unchanged # manualflags if CXXFLAGS, CPPFLAGS, LIBS should remain unchanged
# $6 = optional parameters, allowed are (evaluated in this order):
# - DEV_RPM_DIST_PKG=<name>
# special name for the RPM development package
# - DEV_DEB_DIST_PKG=<name>
# special name for the debian development package
# - DEV_DIST_PKG=<name>
# if the name of the development package is different
# #
# uses PKG_CHECK_MODULES to test for a module # uses PKG_CHECK_MODULES to test for a module
# then, if given, looks for the header file # then, if given, looks for the header file
@ -802,8 +839,6 @@ AC_DEFUN([AX_PKG_REQUIRE], [
AC_MSG_ERROR([Feature $1 not found please install module $secondpar]) AC_MSG_ERROR([Feature $1 not found please install module $secondpar])
fi fi
fi fi
AX_DEB_DEPEND([${$1_found}])
AX_RPM_DEPEND([${$1_found}])
[$1]_CPPFLAGS="${$1_CFLAGS}" [$1]_CPPFLAGS="${$1_CFLAGS}"
[$1]_CXXFLAGS="${$1_CFLAGS}" [$1]_CXXFLAGS="${$1_CFLAGS}"
AC_SUBST([$1]_CPPFLAGS) AC_SUBST([$1]_CPPFLAGS)
@ -816,118 +851,33 @@ AC_DEFUN([AX_PKG_REQUIRE], [
else else
AC_MSG_NOTICE([To enable $1, add $1_CPPFLAGS, $1_CXXFLAGS and $1_LIBS]) AC_MSG_NOTICE([To enable $1, add $1_CPPFLAGS, $1_CXXFLAGS and $1_LIBS])
fi fi
])
DEV_DEB_DIST_PKG=
# require a specific development package, with fallback: test for a header DEV_RPM_DIST_PKG=
# - parameter: DEV_DIST_PKG=
# $1 = unique id (no special characters) pkg=m4_default([$2], [$1])
# $2 = module name (optional, if different from id) $6
# $3 = a header file to find (optional) dep_pkg=${DEV_DEB_DIST_PKG:-${DEV_DIST_PKG:-${pkg}}-dev}
# $4 = alternative module names (space separated, optional) rpm_pkg=${DEV_RPM_DIST_PKG:-${DEV_DIST_PKG:-${pkg}}-devel}
# $5 = optional flags: if test -n "$4"; then
# manualflags if CXXFLAGS, CPPFLAGS, LIBS should remain unchanged for f in $pkg $4; do
# if test -n "$(apt-cache policy -q ${f}-dev 2> /dev/null)"; then
# uses PKG_CHECK_MODULES to test for a module deb_pkg=${f}-dev
# then, if given, looks for the header file break
# if header file is not found, searches in alternative modules
# sets all flags, so that the module can be used everywhere
# fails if not found
AC_DEFUN([AX_PKG_REQUIRE_DEV], [
PKG_PROG_PKG_CONFIG
optional_flags="$5"
$1_found=no
secondpar="m4_default([$2], [$1])"
PKG_CHECK_MODULES([$1], [m4_default([$2], [$1])], [
$1_found=$secondpar
PKG_REQUIREMENTS+=" $secondpar"
], [
if test -n "$4"; then
AC_MSG_WARN([Recommended package $secondpar for feature $1 not installed, trying $4])
for pkg in $4; do
PKG_CHECK_MODULES([$1], [$pkg], [
PKG_REQUIREMENTS+=" $pkg"
$1_found=$pkg
break;
], [
AC_MSG_WARN([Recommended package $pkg for feature $1 not installed])
])
done
fi
])
AC_SUBST(CPPFLAGS)
AC_SUBST(CXXFLAGS)
AC_SUBST(PKG_REQUIREMENTS)
if test -n "$3"; then
if test "${$1_found}" = "no"; then
tmp_package="yes"
else
tmp_package=${$1_found}
fi
$1_found=no
old_CPPFLAGS=${CPPFLAGS}
CPPFLAGS=" ${$1_CFLAGS} ${CPPFLAGS}"
AC_CHECK_HEADER([$3], [
$1_found=${tmp_package}
], [
for x in ${$1_CFLAGS}; do
AC_MSG_NOTICE([search for $3 in ${x[#]-I}])
for f in $(find ${x[#]-I} -name "$3" 2> /dev/null); do
if test -f "$f"; then
$1_found=${tmp_package}
$1_CFLAGS+=" -I${f%/*}"
AC_MSG_NOTICE([added path ${f%/*}])
break;
fi
done
if test "${$1_found}" != "no"; then
break;
fi
done
if test "${$1_found}" = "no"; then
tmp_includedir=$(${PKG_CONFIG} --variable=includedir $tmp_package)
for x in ${tmp_includedir}; do
AC_MSG_NOTICE([search for $3 in $x])
for f in $(find ${x} -name "$3" 2> /dev/null); do
if test -f "$f"; then
$1_found=${tmp_package}
$1_CFLAGS+=" -I${f%/*}"
AC_MSG_NOTICE([added path ${f%/*}])
break;
fi
done
if test "${$1_found}" != "no"; then
break;
fi
done
fi fi
]) done
CPPFLAGS=${old_CPPFLAGS} for f in $pkg $4; do
fi if (test -x /usr/bin/zypper && zypper search -x "${f}-devel" 1>&2 > /dev/null) || \
if test "${$1_found}" = "no"; then (test -x /usr/bin/dnf && dnf list -q "${f}-devel" 1>&2 > /dev/null) || \
if test -n "$3"; then (test -x /usr/bin/yum && yum list -q "${f}-devel" 1>&2 > /dev/null) || \
if test -n "$4"; then (test -x /usr/sbin/urpmq && urpmq "${f}-devel" 1>&2 > /dev/null); then
AC_MSG_ERROR([Feature $1 not found, need header $3 in modules $secondpar or $4]) rpm_pkg=${f}-devel
else break
AC_MSG_ERROR([Feature $1 not found, need header $3 in module $secondpar])
fi fi
else done
AC_MSG_ERROR([Feature $1 not found please install module $secondpar])
fi
fi
AX_DEB_BUILD_DEPEND([${$1_found}-dev])
AX_RPM_BUILD_DEPEND([${$1_found}-devel])
[$1]_CPPFLAGS="${$1_CFLAGS}"
[$1]_CXXFLAGS="${$1_CFLAGS}"
AC_SUBST([$1]_CPPFLAGS)
AC_SUBST([$1]_CXXFLAGS)
if test "${optional_flags/manualflags/}" = "${optional_flags}"; then
CPPFLAGS+=" ${$1_CPPFLAGS}"
CXXFLAGS+=" ${$1_CXXFLAGS}"
LIBS+=" ${$1_LIBS}"
AC_MSG_NOTICE([Adding flags for $1])
else
AC_MSG_NOTICE([To enable $1, add $1_CPPFLAGS, $1_CXXFLAGS and $1_LIBS])
fi fi
AX_DEB_BUILD_DEPEND([$deb_pkg])
AX_RPM_BUILD_DEPEND([$rpm_pkg])
]) ])
# check if a specific package exists # check if a specific package exists
@ -936,6 +886,13 @@ AC_DEFUN([AX_PKG_REQUIRE_DEV], [
# $2 = module name (optional, if different from id) # $2 = module name (optional, if different from id)
# $3 = optional flags: # $3 = optional flags:
# manualflags if CXXFLAGS, CPPFLAGS, LIBS should remain unchanged # manualflags if CXXFLAGS, CPPFLAGS, LIBS should remain unchanged
# $4 = optional parameters, allowed are (evaluated in this order):
# - DEV_RPM_DIST_PKG=<name>
# special name for the RPM development package
# - DEV_DEB_DIST_PKG=<name>
# special name for the debian development package
# - DEV_DIST_PKG=<name>
# if the name of the development package is different
# #
# uses PKG_CHECK_MODULES to test for a module # uses PKG_CHECK_MODULES to test for a module
# sets automake conditional HAVE_$1 to 0 (not found) or 1 (found) # sets automake conditional HAVE_$1 to 0 (not found) or 1 (found)
@ -965,57 +922,28 @@ AC_DEFUN([AX_PKG_CHECK], [
], [ ], [
HAVE_$1=0 HAVE_$1=0
]) ])
AX_DEB_BUILD_DEPEND(m4_default([$2], [$1]))
AX_RPM_BUILD_DEPEND(m4_default([$2], [$1]))
AM_CONDITIONAL(HAVE_$1, test $HAVE_[$1] -eq 1)
AC_SUBST(HAVE_$1)
AC_SUBST(CPPFLAGS)
AC_SUBST(CXXFLAGS)
AC_SUBST(PKG_REQUIREMENTS)
])
# check if a specific development package exists
# - parameter:
# $1 = unique id (no special characters)
# $2 = module name (optional, if different from id)
# $3 = optional flags:
# manualflags if CXXFLAGS, CPPFLAGS, LIBS should remain unchanged
#
# uses PKG_CHECK_MODULES to test for a module
# sets automake conditional HAVE_$1 to 0 (not found) or 1 (found)
# sets all flags, so that the module can be used everywhere
AC_DEFUN([AX_PKG_CHECK_DEV], [
optional_flags="$3"
PKG_PROG_PKG_CONFIG
PKG_CHECK_MODULES([$1], [m4_default([$2], [$1])], [
HAVE_$1=1
[$1]_CPPFLAGS="${$1_CFLAGS}"
[$1]_CXXFLAGS="${$1_CFLAGS}"
AC_SUBST([$1]_CPPFLAGS)
AC_SUBST([$1]_CXXFLAGS)
if test "${optional_flags/manualflags/}" = "${optional_flags}"; then
CPPFLAGS+=" ${$1_CPPFLAGS}"
CXXFLAGS+=" ${$1_CXXFLAGS}"
LIBS+=" ${$1_LIBS}"
AC_MSG_NOTICE([Adding flags for $1])
else
AC_MSG_NOTICE([To enable $1, add $1_CPPFLAGS, $1_CXXFLAGS and $1_LIBS])
fi
if test -z "$PKG_REQUIREMENTS"; then
PKG_REQUIREMENTS="m4_default([$2], [$1])"
else
PKG_REQUIREMENTS="${PKG_REQUIREMENTS}, m4_default([$2], [$1])"
fi
], [
HAVE_$1=0
])
AX_DEB_BUILD_DEPEND(m4_default([$2], [$1])-dev)
AX_RPM_BUILD_DEPEND(m4_default([$2], [$1])-devel)
AM_CONDITIONAL(HAVE_$1, test $HAVE_[$1] -eq 1) AM_CONDITIONAL(HAVE_$1, test $HAVE_[$1] -eq 1)
AC_SUBST(HAVE_$1) AC_SUBST(HAVE_$1)
AC_SUBST(CPPFLAGS) AC_SUBST(CPPFLAGS)
AC_SUBST(CXXFLAGS) AC_SUBST(CXXFLAGS)
AC_SUBST(PKG_REQUIREMENTS) AC_SUBST(PKG_REQUIREMENTS)
DEV_DEB_DIST_PKG=
DEV_RPM_DIST_PKG=
DEV_DIST_PKG=
pkg=m4_default([$2], [$1])
$4
dep_pkg=${DEV_DEB_DIST_PKG:-${DEV_DIST_PKG:-${pkg}}-dev}
rpm_pkg=${DEV_RPM_DIST_PKG:-${DEV_DIST_PKG:-${pkg}}-devel}
if test -n "$(apt-cache policy -q ${deb_pkg} 2> /dev/null)"; then
AX_DEB_BUILD_DEPEND([$deb_pkg])
fi
if (test -x /usr/bin/zypper && zypper search -x "$rpm_pkg" 1>&2 > /dev/null) || \
(test -x /usr/bin/dnf && dnf list -q "$rpm_pkg" 1>&2 > /dev/null) || \
(test -x /usr/bin/yum && yum list -q "$rpm_pkg" 1>&2 > /dev/null) || \
(test -x /usr/sbin/urpmq && urpmq "$rpm_pkg" 1>&2 > /dev/null); then
AX_RPM_BUILD_DEPEND([$rpm_pkg])
fi
]) ])
# make sure, a specific header exists # make sure, a specific header exists
@ -1278,8 +1206,8 @@ AC_DEFUN([AX_ALL_BUILD_DEPEND], [
# $1 = package name # $1 = package name
AC_DEFUN([AX_ALL_BUILD_DEPEND_DEV], [ AC_DEFUN([AX_ALL_BUILD_DEPEND_DEV], [
pkg="$1" pkg="$1"
DEB_BUILD_DEPEND="${DEB_BUILD_DEPEND}, ${pkg}-dev" DEB_BUILD_DEPEND="${DEB_BUILD_DEPEND}, ${pkg// /-dev}-dev"
RPM_BUILD_DEPEND="${RPM_BUILD_DEPEND}, ${pkg}-devel" RPM_BUILD_DEPEND="${RPM_BUILD_DEPEND}, ${pkg// /-devel}-devel"
]) ])
# require package in .spec.in append @ALL_DEPEND@ to Depends # require package in .spec.in append @ALL_DEPEND@ to Depends
@ -1295,8 +1223,11 @@ AC_DEFUN([AX_ALL_DEPEND], [
fi fi
]) ])
# finish configuration - to be called instead of AC_OUTPUT
AC_DEFUN([AX_OUTPUT], [ AC_DEFUN([AX_OUTPUT], [
AX_INIT_QT
AX_DEB_RESOLVE AX_DEB_RESOLVE
AX_RPM_RESOLVE AX_RPM_RESOLVE
AC_OUTPUT AC_OUTPUT
AC_MSG_NOTICE([configured for ${PACKAGE_NAME}-${VERSION}])
]) ])

@ -31,8 +31,9 @@ while test $# -gt 0; do
(--configure|-c) configure=1;; (--configure|-c) configure=1;;
(--docker|-d) docker=1;; (--docker|-d) docker=1;;
(--build|-b) configure=1; build=1; buildtarget+=" distcheck";; (--build|-b) configure=1; build=1; buildtarget+=" distcheck";;
(--all|-a) shift; configure=1; build=1; buildtarget+=" all";; (--all|-a) configure=1; build=1; buildtarget+=" all";;
(--clean) shift; configure=1; build=1; buildtarget+=" maintainer-clean";; (--install|-i) configure=1; build=1; buildtarget+=" all install";;
(--clean) configure=1; build=1; buildtarget+=" maintainer-clean";;
(--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;;
(--rebuild|-r) rebuild=1;; (--rebuild|-r) rebuild=1;;
@ -53,6 +54,7 @@ OPTIONS
--docker, -d build and run tests in a docker instance --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
--all, -a same as -b, but make target all --all, -a same as -b, but make target all
--install, -i same as -a, but add make install
--clean same as -b, but make target maintainer-clean --clean same as -b, but make target maintainer-clean
--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)
@ -86,7 +88,7 @@ DESCRIPTION
${DEFAULT_PROJECT_NAME} as the project name for your project in ${DEFAULT_PROJECT_NAME} as the project name for your project in
${PROJECT_PATH}. In the first run, you should call ${MY_NAME} from a ${PROJECT_PATH}. In the first run, you should call ${MY_NAME} from a
checked out the bootstrap-build-environment from checked out the bootstrap-build-environment from
https://dev.marc.waeckerlin.org/, and the path from where you call https://mrw.sh/, 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 or git repository, since this build checked out subversion or git repository, since this build
@ -96,7 +98,7 @@ DESCRIPTION
subversion on https:/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://svn.mrw.sh/bootstrap-build-environment/trunk \\
bootstrap-build-environment bootstrap-build-environment
svn co https:/path/to/your/new-project/trunk new-project svn co https:/path/to/your/new-project/trunk new-project
cd new-project cd new-project
@ -106,7 +108,7 @@ DESCRIPTION
git on https:/path/to/your/new-project: git 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://svn.mrw.sh/bootstrap-build-environment/trunk \\
bootstrap-build-environment bootstrap-build-environment
cd ~/git cd ~/git
git clone https:/path/to/your/new-project git clone https:/path/to/your/new-project
@ -138,10 +140,12 @@ GENERATED FILES
* build-resource-file.sh - build resource.qrc file from a resource directory * build-resource-file.sh - build resource.qrc file from a resource directory
* sql-to-dot.sed - script to convert SQL schema files to graphviz dot in doxygen * sql-to-dot.sed - script to convert SQL schema files to graphviz dot in doxygen
* 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
* dependency-graph.sh - script to draw project dependencies
* template.sh - generic template for bash scripts
* test/runtests.sh - template file to run test scripts, i.e. docker based * test/runtests.sh - template file to run test scripts, i.e. docker based
* AUTHORS - replace your name in AUTHORS before first run * AUTHORS - replace your name in AUTHORS before first run
* NEWS - empty file add your project's news * NEWS - empty file add your project's news
* README - add project description (first line is header, followed by an empty line) * README (or README.md) - add project description (first line: header, followed by empty line)
* configure.ac - global configuration file template * configure.ac - global configuration file template
* makefile.am - global makefile template * makefile.am - global makefile template
* ${DEFAULT_PROJECT_NAME}.desktop.in - linux desktop file * ${DEFAULT_PROJECT_NAME}.desktop.in - linux desktop file
@ -300,26 +304,110 @@ EOF
shift; shift;
done done
echo -en "\e[1m-> checking:\e[0m for version control system ..." # check if stdout is a terminal...
if test -t 1; then
# see if it supports colors...
ncolors=$(tput colors)
if test -n "$ncolors" && test $ncolors -ge 8; then
bold="$(tput bold)"
underline="$(tput smul)"
standout="$(tput smso)"
normal="$(tput sgr0)"
black="$(tput setaf 0)"
red="$(tput setaf 1)"
green="$(tput setaf 2)"
yellow="$(tput setaf 3)"
blue="$(tput setaf 4)"
magenta="$(tput setaf 5)"
cyan="$(tput setaf 6)"
white="$(tput setaf 7)"
fi
fi
notice() {
echo "${yellow}→ notice: ${bold}$*${normal}"
}
running() {
echo -n "${bold}${blue}→ running: ${bold}${white}$*${normal}"
}
checking() {
echo -n "${bold}${blue}→ checking: ${bold}${white}$*${normal}"
}
generating() {
echo -n "${bold}${blue}→ generating: ${bold}${white}$*${normal}"
}
configuring() {
echo -n "${bold}${blue}→ configuring ${bold}${white}$1${normal}:"
shift
echo -n "${white}$*${normal}"
}
ignored() {
echo "${bold}${yellow}ignored $*${normal}"
}
success() {
echo "${bold}${green}success $*${normal}"
}
error() {
echo "${bold}${red}→ error: $1${normal}"
shift
if test -n "$*"; then
echo "${bold}$*${normal}"
fi
exit 1
}
run() {
check=1
while test $# -gt 0; do
case "$1" in
(--no-check) check=0;;
(*) break;;
esac
shift;
done
running $*
result=$($* 2>&1)
res=$?
if test $res -ne 0; then
if test $check -eq 1; then
error "Failed with return code: $res" "$result"
else
ignored
fi
else
success
fi
}
checking for version control system
VCS="" VCS=""
VCSDEPENDS="" VCSDEPENDS=""
for path in . .. ../.. ../../..; do for path in . .. ../.. ../../..; do
if test -d ${path}/.svn; then if test -d ${path}/.svn; then
VCS="svn" VCS="svn"
VCSDEPENDS_DEB="svn2cl, subversion, subversion-tools," VCSDEPENDS_DEB="svn2cl, subversion, subversion-tools,"
VCSDEPENDS_RPM="subversion," VCSDEPENDS_RPM="subversion, "
echo -e " \e[32msuccess\e[0m detected ${VCS}" success detected ${VCS}
break break
elif test -d ${path}/.git; then elif test -d ${path}/.git; then
VCS="git" VCS="git"
VCSDEPENDS_DEB="git2cl, git," VCSDEPENDS_DEB="git2cl, git,"
VCSDEPENDS_RPM="git," VCSDEPENDS_RPM="git, "
echo -e " \e[32msuccess\e[0m detected ${VCS}" success detected ${VCS}
break break
fi fi
done done
if test -z "$VCS"; then if test -z "$VCS"; then
echo -e " \e[33mignored\e[0m" ignored
fi fi
HEADER='## @id '"\$Id\$"' HEADER='## @id '"\$Id\$"'
@ -347,38 +435,6 @@ CHEADER='/** @id '"\$Id\$"'
' '
notice() {
echo -e "\e[1;33m$*\e[0m"
}
run() {
check=1
while test $# -gt 0; do
case "$1" in
(--no-check) check=0;;
(*) break;;
esac
shift;
done
echo -en "\e[1m-> running:\e[0m $* ..."
result=$($* 2>&1)
res=$?
if test $res -ne 0; then
if test $check -eq 1; then
echo -e " \e[31merror\e[0m"
echo -e "\e[1m*** Failed with return code: $res\e[0m"
if test -n "$result"; then
echo "$result"
fi
exit 1
else
echo -e " \e[33mignored\e[0m"
fi
else
echo -e " \e[32msuccess\e[0m"
fi
}
testtag() { testtag() {
local IFS="|" local IFS="|"
egrep -q '^ *'"($*)"' *(\(.*)? *$' configure.ac egrep -q '^ *'"($*)"' *(\(.*)? *$' configure.ac
@ -431,18 +487,13 @@ to() {
return 1 return 1
fi fi
checkdir "$(dirname ${1})" checkdir "$(dirname ${1})"
echo -en "\e[1m-> generating:\e[0m $1 ..." generating $1
result=$(cat > "$1" 2>&1) result=$(cat > "$1" 2>&1)
res=$? res=$?
if test $res -ne 0; then if test $res -ne 0; then
echo -e " \e[31merror\e[0m" error "Failed with return code: $res" "$result"
echo -e "\e[1m*** Failed with return code: $res\e[0m"
if test -n "$result"; then
echo "$result"
fi
exit 1
else else
echo -e " \e[32msuccess\e[0m" success
fi fi
run chmod $mode $1 run chmod $mode $1
if test $exists -eq 0; then if test $exists -eq 0; then
@ -484,24 +535,20 @@ copy() {
} }
doxyreplace() { doxyreplace() {
echo -en "\e[1m-> doxyfile:\e[0m configure $1 ..." configuring doxyfile $1
if sed -i 's|\(^'"$1"' *=\) *.*|\1'" $2"'|g' doc/doxyfile.in; then if sed -i 's|\(^'"$1"' *=\) *.*|\1'" $2"'|g' doc/doxyfile.in; then
echo -e " \e[32msuccess\e[0m" success
else else
echo -e " \e[31merror\e[0m" error $0 $*
echo -e "\e[1m**** command: $0 $*\e[0m"
exit 1
fi fi
} }
doxyadd() { doxyadd() {
echo -en "\e[1m-> doxyfile:\e[0m configure $1 ..." configuring doxyfile $1
if sed -i '/^'"$1"' *=/a'"$1"' += '"$2" doc/doxyfile.in; then if sed -i '/^'"$1"' *=/a'"$1"' += '"$2" doc/doxyfile.in; then
echo -e " \e[32msuccess\e[0m" success
else else
echo -e " \e[31merror\e[0m" error $0 $*
echo -e "\e[1m**** command: $0 $*\e[0m"
exit 1
fi fi
} }
@ -512,13 +559,18 @@ vcs2cl() {
else else
touch "ChangeLog" touch "ChangeLog"
fi fi
if test -x $(which timeout); then
local TIMEOUT="timeout 10"
else
local TIMEOUT=
fi
if test -x $(which ${VCS}2cl); then if test -x $(which ${VCS}2cl); then
if test "${VCS}" = "git"; then if test "${VCS}" = "git"; then
${VCS}2cl > ChangeLog $TIMEOUT ${VCS}2cl || true > ChangeLog
elif test "${VCS}" = "svn"; then elif test "${VCS}" = "svn"; then
${VCS}2cl --break-before-msg -a -i $TIMEOUT ${VCS}2cl --break-before-msg -a -i || true
elif test -n "${VCS}"; then elif test -n "${VCS}"; then
${VCS}2cl $TIMEOUT ${VCS}2cl || true
fi fi
fi fi
if test $exists -eq 0; then if test $exists -eq 0; then
@ -549,6 +601,8 @@ copy rpmsign.exp
copy build-resource-file.sh copy build-resource-file.sh
copy sql-to-dot.sed copy sql-to-dot.sed
copy mac-create-app-bundle.sh copy mac-create-app-bundle.sh
copy dependency-graph.sh
copy template.sh
AUTHOR=$(gpg -K 2>/dev/null | sed -n 's,uid *\(\[ultimate\] *\)\?,,p' | head -1) AUTHOR=$(gpg -K 2>/dev/null | sed -n 's,uid *\(\[ultimate\] *\)\?,,p' | head -1)
if test -z "${AUTHOR}"; then if test -z "${AUTHOR}"; then
AUTHOR="FIRSTNAME LASTNAME (URL) <EMAIL>" AUTHOR="FIRSTNAME LASTNAME (URL) <EMAIL>"
@ -559,11 +613,18 @@ EOF
to NEWS <<EOF && notice "please edit NEWS" to NEWS <<EOF && notice "please edit NEWS"
$(date) created ${DEFAULT_PROJECT_NAME} $(date) created ${DEFAULT_PROJECT_NAME}
EOF EOF
to README <<EOF && notice "please edit README" if test -e README.md; then
README=README.md
else
README=README
to README <<EOF && notice "please edit README"
${DEFAULT_PROJECT_NAME} ${DEFAULT_PROJECT_NAME}
add description for ${DEFAULT_PROJECT_NAME} add description for ${DEFAULT_PROJECT_NAME}
EOF EOF
fi
DESCRIPTION=$(head -1 $README | sed 's,^#\+ *,,;s, *#\+$,,')
to configure.ac <<EOF && notice "please edit configure.ac, then rerun $0" && exit 0 to configure.ac <<EOF && notice "please edit configure.ac, then rerun $0" && exit 0
${HEADER}# default is generated from AUTHORS and project name ${HEADER}# default is generated from AUTHORS and project name
PROJECT_URL= PROJECT_URL=
@ -1031,24 +1092,25 @@ to --condition AX_USE_NODEJS nodejs/etc/${PACKAGE_NAME}.json <<EOF
"foo": ["sha256", "fcde2b2edxx56bf408601fb721fe9b5c338d10ee429ea04fae5511b68fbf8fb9"] "foo": ["sha256", "fcde2b2edxx56bf408601fb721fe9b5c338d10ee429ea04fae5511b68fbf8fb9"]
}, },
"ldap": { "ldap": {
"url": "ldap://dev.marc.waeckerlin.org", "url": "ldap://your.ldap.host",
"adminDn": "cn=tmp,ou=system,ou=people,dc=dev,dc=marc,dc=waeckerlin,dc=org", "adminDn": "cn=tmp,ou=system,ou=people,dc=your,dc=ldap,dc=host",
"adminPassword": "secret", "adminPassword": "secret",
"searchBase": "ou=person,ou=people,dc=dev,dc=marc,dc=waeckerlin,dc=org", "searchBase": "ou=person,ou=people,dc=your,dc=ldap,dc=host",
"searchFilter": "(uid={{username}})" "searchFilter": "(uid={{username}})"
} }
} }
} }
EOF EOF
PACKAGE_NAME_UPPER=$(echo ${PACKAGE_NAME} | tr '+[:lower:]' 'X[:upper:]' | tr -cd '[[:alnum:]]._-')
to --condition AX_USE_NODEJS nodejs/etc/default/${PACKAGE_NAME} <<EOF to --condition AX_USE_NODEJS nodejs/etc/default/${PACKAGE_NAME} <<EOF
#EXEC_${PACKAGE_NAME^^}="/usr/bin/nodejs /usr/share/${PACKAGE_NAME}/nodejs/${PACKAGE_NAME}" #EXEC_${PACKAGE_NAME_UPPER}="/usr/bin/nodejs /usr/share/${PACKAGE_NAME}/nodejs/${PACKAGE_NAME}"
#${PACKAGE_NAME^^}_LOG="/var/log/${PACKAGE_NAME^^}.log" #${PACKAGE_NAME_UPPER}_LOG="/var/log/${PACKAGE_NAME}.log"
#${PACKAGE_NAME^^}="${PACKAGE_NAME}" #${PACKAGE_NAME_UPPER}="${PACKAGE_NAME}"
#${PACKAGE_NAME^^}_PORT="8888" #${PACKAGE_NAME_UPPER}_PORT="8888"
EOF EOF
to --condition AX_USE_NODEJS nodejs/etc/init/${PACKAGE_NAME}.conf <<EOF to --condition AX_USE_NODEJS nodejs/etc/init/${PACKAGE_NAME}.conf <<EOF
#!upstart #!upstart
description "$(head -1 README)" description "$DESCRIPTION"
author "$(head -1 AUTHORS)" author "$(head -1 AUTHORS)"
start on (local-filesystems and net-device-up) start on (local-filesystems and net-device-up)
@ -1060,35 +1122,35 @@ script
echo \$\$ > /var/run/${PACKAGE_NAME}.pid echo \$\$ > /var/run/${PACKAGE_NAME}.pid
# there are some useful defaults # there are some useful defaults
# do not edit this file, overwrite values in /etc/default/${PACKAGE_NAME} # do not edit this file, overwrite values in /etc/default/${PACKAGE_NAME}
EXEC_${PACKAGE_NAME^^}="/usr/bin/nodejs /usr/share/${PACKAGE_NAME}/nodejs/${PACKAGE_NAME}" EXEC_${PACKAGE_NAME_UPPER}="/usr/bin/nodejs /usr/share/${PACKAGE_NAME}/nodejs/${PACKAGE_NAME}"
${PACKAGE_NAME^^}_LOG="/var/log/${PACKAGE_NAME}.log" ${PACKAGE_NAME_UPPER}_LOG="/var/log/${PACKAGE_NAME}.log"
${PACKAGE_NAME^^}_USER="${PACKAGE_NAME}" ${PACKAGE_NAME_UPPER}_USER="${PACKAGE_NAME}"
${PACKAGE_NAME^^}_PORT="" ${PACKAGE_NAME_UPPER}_PORT=""
[ -r /etc/default/${PACKAGE_NAME} ] && . /etc/default/${PACKAGE_NAME} [ -r /etc/default/${PACKAGE_NAME} ] && . /etc/default/${PACKAGE_NAME}
if test -n "\${${PACKAGE_NAME^^}_USER}"; then if test -n "\${${PACKAGE_NAME_UPPER}_USER}"; then
exec sudo -u "\${${PACKAGE_NAME^^}_USER}" \${EXEC_${PACKAGE_NAME^^}} \${${PACKAGE_NAME^^}_PORT} >> \${${PACKAGE_NAME^^}_LOG} 2>&1 exec sudo -u "\${${PACKAGE_NAME_UPPER}_USER}" \${EXEC_${PACKAGE_NAME_UPPER}} \${${PACKAGE_NAME_UPPER}_PORT} >> \${${PACKAGE_NAME_UPPER}_LOG} 2>&1
else else
exec \${EXEC_${PACKAGE_NAME^^}} \${${PACKAGE_NAME^^}_PORT} >> \${${PACKAGE_NAME^^}_LOG} 2>&1 exec \${EXEC_${PACKAGE_NAME_UPPER}} \${${PACKAGE_NAME_UPPER}_PORT} >> \${${PACKAGE_NAME_UPPER}_LOG} 2>&1
fi fi
end script end script
pre-start script pre-start script
${PACKAGE_NAME^^}_LOG="/var/log/${PACKAGE_NAME}.log" ${PACKAGE_NAME_UPPER}_LOG="/var/log/${PACKAGE_NAME}.log"
[ -r /etc/default/${PACKAGE_NAME} ] && . /etc/default/${PACKAGE_NAME} [ -r /etc/default/${PACKAGE_NAME} ] && . /etc/default/${PACKAGE_NAME}
# Date format same as (new Date()).toISOString() for consistency # Date format same as (new Date()).toISOString() for consistency
echo "[`date -u +%Y-%m-%dT%T.%3NZ`] (sys) Starting" >> \${${PACKAGE_NAME^^}_LOG} echo "[`date -u +%Y-%m-%dT%T.%3NZ`] (sys) Starting" >> \${${PACKAGE_NAME_UPPER}_LOG}
end script end script
pre-stop script pre-stop script
${PACKAGE_NAME^^}_LOG="/var/log/${PACKAGE_NAME}.log" ${PACKAGE_NAME_UPPER}_LOG="/var/log/${PACKAGE_NAME}.log"
[ -r /etc/default/${PACKAGE_NAME} ] && . /etc/default/${PACKAGE_NAME} [ -r /etc/default/${PACKAGE_NAME} ] && . /etc/default/${PACKAGE_NAME}
rm /var/run/${PACKAGE_NAME}.pid rm /var/run/${PACKAGE_NAME}.pid
echo "[`date -u +%Y-%m-%dT%T.%3NZ`] (sys) Stopping" >> \${${PACKAGE_NAME^^}_LOG} echo "[`date -u +%Y-%m-%dT%T.%3NZ`] (sys) Stopping" >> \${${PACKAGE_NAME_UPPER}_LOG}
end script end script
EOF EOF
to --condition AX_USE_NODEJS nodejs/etc/systemd/system/${PACKAGE_NAME}.service <<EOF to --condition AX_USE_NODEJS nodejs/etc/systemd/system/${PACKAGE_NAME}.service <<EOF
[Unit] [Unit]
Description=$(head -1 README) Description=$DESCRIPTION
[Service] [Service]
ExecStart=/usr/bin/nodejs /usr/share/${PACKAGE_NAME}/nodejs/${PACKAGE_NAME} ExecStart=/usr/bin/nodejs /usr/share/${PACKAGE_NAME}/nodejs/${PACKAGE_NAME}
@ -1216,11 +1278,11 @@ to --condition AX_USE_NODEJS nodejs/views/index.ejs <<EOF
<link href="stylesheets/style.css" rel="stylesheet" type="text/css" /> <link href="stylesheets/style.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="/socket.io/socket.io.js"></script> <script type="text/javascript" src="/socket.io/socket.io.js"></script>
<script type="text/javascript" src="javascripts/${PACKAGE_NAME}.js"></script> <script type="text/javascript" src="javascripts/${PACKAGE_NAME}.js"></script>
<title>$(head -1 README)</title> <title>$DESCRIPTION</title>
</head> </head>
<body> <body>
<h1>$(head -1 README)</h1> <h1>$DESCRIPTION</h1>
<p>generated by bootstrap, please edit</p> <p>generated by bootstrap, please edit</p>
</body> </body>
</html> </html>
@ -1290,6 +1352,9 @@ ${HEADER}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
LDADD = -l${PACKAGE_NAME#lib} LDADD = -l${PACKAGE_NAME#lib}
exampledir = ${docdir}/examples
example_DATA =
MAINTAINERCLEANFILES = makefile.in MAINTAINERCLEANFILES = makefile.in
EOF EOF
to --condition AX_BUILD_HTML_NPM html/package.json.in <<EOF to --condition AX_BUILD_HTML_NPM html/package.json.in <<EOF
@ -1568,7 +1633,7 @@ EOF2
EOF EOF
to debian/docs <<EOF to debian/docs <<EOF
NEWS NEWS
README $README
EOF EOF
to --condition AX_USE_LIBTOOL debian/${PACKAGE_NAME}.install <<EOF to --condition AX_USE_LIBTOOL debian/${PACKAGE_NAME}.install <<EOF
usr/lib/lib*.so.* usr/lib/lib*.so.*
@ -1603,7 +1668,7 @@ to --condition AX_USE_RPM_PACKAGING ${PACKAGE_NAME}.spec.in <<EOF
Summary: @DESCRIPTION@ Summary: @DESCRIPTION@
Name: @PACKAGE_NAME@ Name: @PACKAGE_NAME@
Version: @VERSION@ Version: @VERSION@
Release: @BUILD_NUMBER@%{?dist} Release: @BUILD_NUMBER@.@DISTRO@
License: LGPL License: LGPL
Group: $(if testtag AX_USE_LIBTOOL; then Group: $(if testtag AX_USE_LIBTOOL; then
echo Development/Libraries/C++; echo Development/Libraries/C++;
@ -1613,62 +1678,54 @@ fi)
$(if testtag AX_RPM_DEPEND; then echo "Requires: @RPM_DEPEND@"; fi) $(if testtag AX_RPM_DEPEND; then echo "Requires: @RPM_DEPEND@"; 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, expect, ${VCSDEPENDS_RPM} make, automake, autoconf, rpm-build$( BuildRequires: which, pkgconfig, pandoc, gnupg, expect, ${VCSDEPENDS_RPM}make, automake, autoconf, rpm-build$(
if testtag AX_USE_CXX; then if testtag AX_USE_CXX; then
echo -n ", binutils-devel, gcc-c++" echo -n ", binutils-devel, gcc-c++"
fi fi
if testtag AX_USE_LIBTOOL; then if testtag AX_USE_CPPUNIT; then
echo -n ", libtool"; echo -n ", cppunit-devel"
fi fi
if testtag AX_USE_DOXYGEN; then if testtag AX_USE_DOXYGEN; then
echo -n ", doxygen, java-openjdk"; echo -n ", doxygen, graphviz, java-openjdk";
fi fi
if testtag AX_USE_PERLDOC; then if testtag AX_USE_PERLDOC; then
echo -n ", libpod-tree-perl"; echo -n ", libpod-tree-perl";
fi fi
) @RPM_BUILD_DEPEND@ @RPM_DEPEND_IFEXISTS@ ) @RPM_BUILD_DEPEND@ @RPM_DEPEND_IFEXISTS@
%if 0%{?fedora} != 20
$(if testtag AX_USE_DOXYGEN; then echo -n "BuildRequires: graphviz"; fi) #### os dependent definitions ####
%if 0%{?suse_version} || 0%{?sles_version}
BuildRequires: lsb-release$(
if testtag AX_REQUIRE_QT || testtag AX_CHECK_QT; then
echo -n ", libqt5-qtbase-devel, libqt5-qttools, libqt5-linguist-devel, libQt5WebKit5-devel libqt5-qtwebengine-devel libQt5WebKitWidgets-devel";
fi)
%else
$(
if testtag AX_REQUIRE_QT || testtag AX_CHECK_QT; then
echo -n "BuildRequires: qt5-qtbase-devel, qt5-qttools-devel, qt5-qtwebkit-devel";
fi)
%if 0%{?mageia}
BuildRequires: rpm-sign, lsb-release
%else
BuildRequires: rpm-sign, redhat-lsb
%global debug_package %{nil}
%endif %endif
%if 0%{?fedora} || 0%{?rhel} || 0%{?rhl} || 0%{?centos} || 0%{?centos_ver} || 0%{?centos_version} || 0%{?mageia}
BuildRequires: which, pkgconfig$(
if testtag AX_USE_LIBTOOL; then
echo -n ", cppunit-devel"
fi
)
%if 0%{?rhel} > 6 || 0%{?rhl} > 6 || 0%{?centos} > 6 || 0%{?fedora} || 0%{?mageia}
BuildRequires: rpm-sign
%endif %endif
%if 0%{?mageia} $(
BuildRequires: gnupg, lsb-release$( if testtag AX_USE_DOXYGEN; then cat <<EOS
if testtag AX_USE_LIBTOOL; then %if ! 0%{?centos}
echo -n ", libltdl-devel" BuildRequires: mscgen
fi
)
%else
BuildRequires: gpg, redhat-lsb$(
if testtag AX_USE_LIBTOOL; then
echo -n ", libtool-ltdl-devel"
fi
)
%endif %endif
%if ! ( 0%{?centos} || 0%{?centos_ver} || 0%{?centos_version} ) EOS
$(if testtag AX_USE_DOXYGEN; then echo -n "BuildRequires: mscgen"; fi) fi
$(if testtag AX_REQUIRE_QT || testtag AX_CHECK_QT AX_REQUIRE_QT; then echo -n "BuildRequires: qt5-qtbase-devel, qt5-qttools, qt5-qtwebkit-devel"; fi) if testtag AX_USE_LIBTOOL; then cat <<EOS
%if 0%{?mageia}
BuildRequires: libtool, libltdl-devel
%else %else
$(if testtag AX_REQUIRE_QT || testtag AX_CHECK_QT AX_REQUIRE_QT; then echo -n "BuildRequires: qt-devel"; fi) BuildRequires: libtool, libtool-ltdl-devel
%endif %endif
%else%if 0%{?suse_version} || 0%{?sles_version} EOS
BuildRequires: pkg-config, lsb-release$(
if testtag AX_USE_CPPUNIT; then
echo -n ", libcppunit-devel";
fi) fi)
%if 0%{?suse_version} < 1200 || 0%{?sles_version} < 1200
$(if testtag AX_REQUIRE_QT || testtag AX_CHECK_QT AX_REQUIRE_QT; then echo -n "BuildRequires: libqt4-devel, qt4-x11-tools, libQtWebKit-devel"; fi)
%else
$(if testtag AX_REQUIRE_QT || testtag AX_CHECK_QT AX_REQUIRE_QT; then echo -n "BuildRequires: libqt5-qtbase-devel, libqt5-qttools, libQt5WebKit5-devel"; fi)
%endif
%endif%endif
%description %description
@README@ @README@
@ -1701,25 +1758,20 @@ rm -rf \$RPM_BUILD_ROOT
$(if testtag AX_USE_LIBTOOL; then $(if testtag AX_USE_LIBTOOL; then
echo '/usr/%_lib/*.so.*' echo '/usr/%_lib/*.so.*'
else else
echo '/usr/bin/*' echo '/usr/bin'
echo '/usr/share/applications/*' echo '/usr/share/applications'
fi)
$(if testtag AX_USE_NODEJS AX_BUILD_HTML AX_BUILD_HTML_NPM; then
echo '/usr/share/@PACKAGE_NAME@'
fi) fi)
%doc /usr/share/@PACKAGE_NAME@
$(if testtag AX_USE_LIBTOOL; then $(if testtag AX_USE_ETC; then
cat <<EOF2
/usr/share/doc/packages/@PACKAGE_NAME@/AUTHORS cat <<EOF2
/usr/share/doc/packages/@PACKAGE_NAME@/COPYING %config
/usr/share/doc/packages/@PACKAGE_NAME@/ChangeLog /etc/*
/usr/share/doc/packages/@PACKAGE_NAME@/INSTALL
/usr/share/doc/packages/@PACKAGE_NAME@/NEWS
/usr/share/doc/packages/@PACKAGE_NAME@/README
EOF2 EOF2
else
echo '/usr/share'
fi) fi)
%doc
/usr/share/doc
$(if testtag AX_USE_LIBTOOL; then $(if testtag AX_USE_LIBTOOL; then
cat <<EOF2 cat <<EOF2
@ -1789,7 +1841,18 @@ $(case "$VCS" in
esac) esac)
fi fi
aclocal aclocal
$(if testtag AX_USE_LIBTOOL; then echo libtoolize --force; fi) $(if testtag AX_USE_LIBTOOL; then
cat <<EOF1
if which libtoolize > /dev/null; then
run libtoolize --force;
elif which glibtoolize > /dev/null; then
run glibtoolize --force;
else
echo "error: libtoolize not found" 1>&2
exit 1
fi
EOF1
fi)
automake -a automake -a
autoconf autoconf
EOF EOF
@ -1798,15 +1861,24 @@ ${HEADER}SUBDIRS =${SUBDIRS}
desktopdir = \${datadir}/applications desktopdir = \${datadir}/applications
desktop_DATA = @PACKAGE_DESKTOP@ desktop_DATA = @PACKAGE_DESKTOP@
dist_pkgdata_DATA = @PACKAGE_ICON@ ax_check_qt.m4 bootstrap.sh \\ dist_pkgdata_DATA = @PACKAGE_ICON@
resolve-rpmbuilddeps.sh autogen.sh \\ dist_noinst_DATA = ax_check_qt.m4 bootstrap.sh \\
resolve-rpmbuilddeps.sh autogen.sh \\
ax_cxx_compile_stdcxx_11.m4 build-in-docker.sh \\ ax_cxx_compile_stdcxx_11.m4 build-in-docker.sh \\
build-resource-file.sh \\ build-resource-file.sh \\
ax_init_standard_project.m4 \\ ax_init_standard_project.m4 \\
mac-create-app-bundle.sh resolve-debbuilddeps.sh \\ mac-create-app-bundle.sh resolve-debbuilddeps.sh \\
dependency-graph.sh template.sh \\
sql-to-dot.sed sql-to-dot.sed
dist_doc_DATA = AUTHORS NEWS README COPYING INSTALL ChangeLog dist_doc_DATA = AUTHORS NEWS $README COPYING INSTALL ChangeLog
$(if test -e README.md -a ! -e README; then
cat <<EOF2
README: README.md
CLEANFILES = README
EOF2
fi)
MAINTAINERCLEANFILES = makefile.in MAINTAINERCLEANFILES = makefile.in
EOF EOF
to --condition AX_USE_LIBTOOL src/${PACKAGE_NAME}.pc.in <<EOF to --condition AX_USE_LIBTOOL src/${PACKAGE_NAME}.pc.in <<EOF
@ -1825,39 +1897,49 @@ Requires: @PKG_REQUIREMENTS@
EOF EOF
to build-in-docker.conf <<EOF to build-in-docker.conf <<EOF
${HEADER}# Use Ubuntu Universe Repository ${HEADER}# Use Ubuntu Universe Repository
repos+=("Ubuntu:::universe") repos+=("ubuntu:::universe")
# Use Marc Wäckerlin's Repository, see https://dev.marc.waeckerlin.org # Use Marc Wäckerlin's Repository, see https://repository.mrw.sh
repos+=("Debian|Ubuntu:::https://dev.marc.waeckerlin.org/repository") repos+=("debian|ubuntu:::https://repository.mrw.sh:::https://repository.mrw.sh/@DISTRIBUTOR@/marc-waeckerlin.repo")
repos+=("openSUSE:::https://dev.marc.waeckerlin.org/repository/opensuse/marc-waeckerlin.repo") keys+=("https://repository.mrw.sh/PublicKey")
repos+=("Fedora:::https://dev.marc.waeckerlin.org/repository/fedora/marc-waeckerlin.repo")
repos+=("CentOS:::https://dev.marc.waeckerlin.org/repository/centos/marc-waeckerlin.repo") # centos requires epel-release for some packages, such as Qt WebKit
keys+=("https://dev.marc.waeckerlin.org/repository/PublicKey") packages+=("centos:::epel-release")
EOF EOF
#### Cleanup If Makefile Exists #### #### Cleanup If Makefile Exists ####
if test -f makefile; then if test -f makefile; then
run --no-check make distclean run --no-check make maintainer-clean
fi
#### Bootstrap Before Configure ####
run --no-check vcs2cl
run aclocal
if testtag AX_USE_LIBTOOL; then run libtoolize --force; fi
run automake -a
run autoconf
#### Run Configure If User Requires ####
if test "$configure" -eq 1; then
./configure $* || exit 1
fi
#### Run Make If User Requires ####
if test "$build" -eq 1; then
make $buildtarget || exit 1
fi fi
#### Build In Docker If User Requires #### #### Build In Docker If User Requires ####
if test "$docker" -eq 1; then if test "$docker" -eq 1; then
./build-in-docker.sh || exit 1 ./build-in-docker.sh $buildtarget $* || exit 1
else
#### Bootstrap Before Configure ####
run --no-check vcs2cl
run aclocal
if testtag AX_USE_LIBTOOL; then
if which libtoolize > /dev/null; then
run libtoolize --force;
elif which glibtoolize > /dev/null; then
run glibtoolize --force;
else
error libtoolize not found
fi
fi
run automake -a
run autoconf
#### Run Configure If User Requires ####
if test "$configure" -eq 1; then
./configure $* || exit 1
fi
#### Run Make If User Requires ####
if test "$build" -eq 1; then
make $buildtarget || exit 1
fi
fi fi

@ -7,9 +7,10 @@ if test "${arch}" = "amd64"; then
myarch="amd64|i386" myarch="amd64|i386"
fi fi
mode="deb" mode="deb"
img="ubuntu:latest" img="mwaeckerlin/ubuntu:latest"
repos=() repos=()
keys=() keys=()
dns=()
envs=("-e LANG=${LANG}" "-e HOME=${HOME}" "-e TERM=xterm" "-e DEBIAN_FRONTEND=noninteractive" "-e DEBCONF_NONINTERACTIVE_SEEN=true") envs=("-e LANG=${LANG}" "-e HOME=${HOME}" "-e TERM=xterm" "-e DEBIAN_FRONTEND=noninteractive" "-e DEBCONF_NONINTERACTIVE_SEEN=true")
dirs=("-v $(pwd):/workdir" "-v ${HOME}/.gnupg:${HOME}/.gnupg") dirs=("-v $(pwd):/workdir" "-v ${HOME}/.gnupg:${HOME}/.gnupg")
packages=() packages=()
@ -41,6 +42,7 @@ while test $# -gt 0; do
echo " -f, --flag <flag> add flag to ./bootstrap.sh or ./configure" echo " -f, --flag <flag> add flag to ./bootstrap.sh or ./configure"
echo " -r, --repo <url> add given apt repository" echo " -r, --repo <url> add given apt repository"
echo " -k, --key <url> add public key from url" echo " -k, --key <url> add public key from url"
echo " -n, --dns <ip> add ip as dns server"
echo " -e, --env <var>=<val> set environment variable in docker" echo " -e, --env <var>=<val> set environment variable in docker"
echo " -d, --dir <dir> access given directory read only" echo " -d, --dir <dir> access given directory read only"
echo " -p, --package <pkg> install extra debian packages" echo " -p, --package <pkg> install extra debian packages"
@ -73,8 +75,8 @@ while test $# -gt 0; do
echo " -e ANDROID_HOME=/opt/local/android \\" echo " -e ANDROID_HOME=/opt/local/android \\"
echo " -d /opt/local/android \\" echo " -d /opt/local/android \\"
echo " -r universe \\" echo " -r universe \\"
echo " -r https://dev.marc.waeckerlin.org/repository \\" echo " -r https://repository.mrw.sh \\"
echo " -k https://dev.marc.waeckerlin.org/repository/PublicKey \\" echo " -k https://repository.mrw.sh/PublicKey \\"
echo " -p mrw-c++" echo " -p mrw-c++"
echo echo
exit 0 exit 0
@ -82,15 +84,15 @@ while test $# -gt 0; do
(-m|--mode) shift; (-m|--mode) shift;
mode="$1" mode="$1"
case "$mode" in case "$mode" in
(deb|apt) img="ubuntu:latest";; (deb|apt) img="mwaeckerlin/ubuntu:latest";;
(rpm|zypper) img="opensuse:latest";; (rpm|zypper) img="opensuse:latest";;
(yum) img="centos:latest";; (yum) img="centos:latest";;
(dnf) img="fedora:latest";; (dnf) img="fedora:latest";;
(win) (win)
img="ubuntu:latest"; host="${host:---host=i686-w64-mingw32}" img="mwaeckerlin/ubuntu:latest"; host="${host:---host=i686-w64-mingw32}"
targets="all install" targets="all install"
flags+=("--prefix=/workdir/usr") flags+=("--prefix=/workdir/usr")
packages1=("mingw-w64") packages+=("mingw-w64")
;; ;;
(*) (*)
echo "**** ERROR: unknown mode '$1', try --help" 1>&2 echo "**** ERROR: unknown mode '$1', try --help" 1>&2
@ -128,6 +130,9 @@ while test $# -gt 0; do
(-e|--env) shift; (-e|--env) shift;
envs+=("-e $1") envs+=("-e $1")
;; ;;
(-n|--dns) shift;
dns+=("--dns $1")
;;
(-d|--dirs) shift; (-d|--dirs) shift;
dirs+=("-v $1:$1:ro") dirs+=("-v $1:$1:ro")
;; ;;
@ -172,7 +177,8 @@ function traperror() {
echo echo
fi fi
if [ "$wait" -eq 1 ]; then if [ "$wait" -eq 1 ]; then
echo " ... now you can access the docker container:" echo " ... now you can access the docker container as root or user:"
echo " docker exec -it ${DOCKER_ID} bash"
echo " docker exec -u $(id -u) -it ${DOCKER_ID} bash" echo " docker exec -u $(id -u) -it ${DOCKER_ID} bash"
echo -n " ... press enter to cleanup: " echo -n " ... press enter to cleanup: "
read read
@ -185,13 +191,7 @@ function traperror() {
exit $e exit $e
fi fi
done done
if [ "$wait" -eq 1 ]; then echo -n "SUCCESS ... cleanup docker: "
echo " ... now you can access the docker container:"
echo " docker exec -u $(id -u) -it ${DOCKER_ID} bash"
echo -n " ... press enter to cleanup: "
read
fi
echo -n " SUCCESS ... cleanup docker: "
docker rm -f "${DOCKER_ID}" docker rm -f "${DOCKER_ID}"
exit 0 exit 0
} }
@ -200,21 +200,27 @@ function ifthenelse() {
arg="$1" arg="$1"
shift shift
cmd="$*" cmd="$*"
DISTRIBUTOR=$(docker exec ${DOCKER_ID} lsb_release -si | sed 's, .*,,' | tr [:upper:] [:lower:])
CODENAME=$(docker exec ${DOCKER_ID} lsb_release -cs)
ARCH=$((docker exec ${DOCKER_ID} which dpkg > /dev/null 2> /dev/null && docker exec ${DOCKER_ID} dpkg --print-architecture) || echo amd64)
if test "${arg/:::/}" = "${arg}"; then if test "${arg/:::/}" = "${arg}"; then
docker exec ${DOCKER_ID} bash -c "${cmd//ARG/${arg}}" docker exec ${DOCKER_ID} bash -c "${cmd//ARG/${arg//@DISTRIBUTOR@/${DISTRIBUTOR}}}"
else else
os="${arg%%:::*}" os="${arg%%:::*}"
thenpart="${arg#*:::}" thenpart="${arg#*:::}"
if test "${thenpart/:::/}" = "${thenpart}"; then elsepart=
docker exec ${DOCKER_ID} bash -c 'os="'$os'"; if [[ "$(lsb_release -is)-$(lsb_release -cs)-$((which dpkg > /dev/null 2> /dev/null && dpkg --print-architecture) || echo amd64)" =~ ${os} ]]; then '"${cmd//ARG/${thenpart}}"'; fi' if test "${thenpart/:::/}" != "${thenpart}"; then
else
elsepart="${thenpart##*:::}" elsepart="${thenpart##*:::}"
thenpart="${thenpart%:::*}" thenpart="${thenpart%%:::*}"
fi
if [[ "${DISTRIBUTOR}-${CODENAME}-${ARCH}" =~ ${os} ]]; then
if test -n "${thenpart}"; then if test -n "${thenpart}"; then
docker exec ${DOCKER_ID} bash -c 'os="'$os'"; if [[ "$(lsb_release -is)-$(lsb_release -cs)-$((which dpkg > /dev/null 2> /dev/null && dpkg --print-architecture) || echo amd64)" =~ ${os} ]]; then '"${cmd//ARG/${thenpart}}"'; else '"${cmd//ARG/${elsepart}}"'; fi' docker exec ${DOCKER_ID} bash -c "${cmd//ARG/${thenpart//@DISTRIBUTOR@/${DISTRIBUTOR}}}"
else fi
docker exec ${DOCKER_ID} bash -c 'os="'$os'"; if [[ "$(lsb_release -is)-$(lsb_release -cs)-$((which dpkg > /dev/null 2> /dev/null && dpkg --print-architecture) || echo amd64)" =~ ${os} ]]; then true; else '"${cmd//ARG/${elsepart}}"'; fi' else
fi if test -n "${elsepart}"; then
docker exec ${DOCKER_ID} bash -c "${cmd//ARG/${elsepart//@DISTRIBUTOR@/${DISTRIBUTOR}}}"
fi
fi fi
fi fi
} }
@ -222,7 +228,7 @@ function ifthenelse() {
set -x set -x
docker pull $img docker pull $img
DOCKER_ID=$(docker create ${dirs[@]} ${envs[@]} -w /workdir $img sleep infinity) DOCKER_ID=$(docker create ${dns[@]} ${dirs[@]} ${envs[@]} -w /workdir $img sleep infinity)
trap 'traperror '"${DOCKER_ID}"' "$? ${PIPESTATUS[@]}" $LINENO $BASH_LINENO "$BASH_COMMAND" "${FUNCNAME[@]}" "${FUNCTION}"' SIGINT INT TERM EXIT trap 'traperror '"${DOCKER_ID}"' "$? ${PIPESTATUS[@]}" $LINENO $BASH_LINENO "$BASH_COMMAND" "${FUNCNAME[@]}" "${FUNCTION}"' SIGINT INT TERM EXIT
if ! [[ $arch =~ $myarch ]]; then if ! [[ $arch =~ $myarch ]]; then
docker cp "/usr/bin/qemu-${arch}-static" "${DOCKER_ID}:/usr/bin/qemu-${arch}-static" docker cp "/usr/bin/qemu-${arch}-static" "${DOCKER_ID}:/usr/bin/qemu-${arch}-static"
@ -249,16 +255,16 @@ case $mode in
done done
docker exec ${DOCKER_ID} apt-get update ${OPTIONS} docker exec ${DOCKER_ID} apt-get update ${OPTIONS}
docker exec ${DOCKER_ID} apt-get upgrade ${OPTIONS} docker exec ${DOCKER_ID} apt-get upgrade ${OPTIONS}
docker exec ${DOCKER_ID} apt-get install ${OPTIONS} python-software-properties software-properties-common apt-transport-https dpkg-dev lsb-release || \ docker exec ${DOCKER_ID} apt-get install ${OPTIONS} python-software-properties software-properties-common apt-transport-https dpkg-dev lsb-release wget || \
docker exec ${DOCKER_ID} apt-get install ${OPTIONS} software-properties-common apt-transport-https dpkg-dev lsb-release || \ docker exec ${DOCKER_ID} apt-get install ${OPTIONS} software-properties-common apt-transport-https dpkg-dev lsb-release wget || \
docker exec ${DOCKER_ID} apt-get install ${OPTIONS} python-software-properties apt-transport-https dpkg-dev lsb-release; docker exec ${DOCKER_ID} apt-get install ${OPTIONS} python-software-properties apt-transport-https dpkg-dev lsb-release wget;
for repo in "${repos[@]}"; do
ifthenelse "${repo}" "apt-add-repository 'ARG'"
done
for key in "${keys[@]}"; do for key in "${keys[@]}"; do
wget -O- "$key" \ wget -O- "$key" \
| docker exec -i ${DOCKER_ID} apt-key add - | docker exec -i ${DOCKER_ID} apt-key add -
done done
for repo in "${repos[@]}"; do
ifthenelse "${repo}" "apt-add-repository 'ARG'"
done
docker exec ${DOCKER_ID} apt-get update ${OPTIONS} docker exec ${DOCKER_ID} apt-get update ${OPTIONS}
for package in "${packages[@]}"; do for package in "${packages[@]}"; do
ifthenelse "${package}" "apt-get install ${OPTIONS} ARG" ifthenelse "${package}" "apt-get install ${OPTIONS} ARG"
@ -295,10 +301,16 @@ EOF
rm rpm-key rm rpm-key
done done
for repo in "${repos[@]}"; do for repo in "${repos[@]}"; do
INSTALL_REPO=$((docker exec ${DOCKER_ID} test -x /usr/bin/zypper && echo zypper ar) || (docker exec ${DOCKER_ID} test -x /usr/bin/dnf && echo dnf config-manager --add-repo) || (docker exec ${DOCKER_ID} test -x /usr/bin/yum && echo wget -O/etc/yum.repos.d/additional$i.repo) || (docker exec ${DOCKER_ID} test -x /usr/sbin/urpmi && echo true)) INSTALL_REPO=$((docker exec ${DOCKER_ID} test -x /usr/bin/zypper && echo zypper ar) || (docker exec ${DOCKER_ID} test -x /usr/bin/dnf && echo dnf config-manager --add-repo) || (docker exec ${DOCKER_ID} test -x /usr/bin/yum && echo wget -O/etc/yum.repos.d/additional$i.repo) || (docker exec ${DOCKER_ID} test -x /usr/sbin/urpmi && echo false))
ifthenelse "${repo}" "${INSTALL_REPO} 'ARG'" ifthenelse "${repo}" "${INSTALL_REPO} 'ARG'"
((++i)) ((++i))
done done
for package in "${packages[@]}"; do
ifthenelse "${package}" "${INSTALL_TOOL} ARG"
done
for command in "${commands[@]}"; do
ifthenelse "${command}" "ARG"
done
docker exec ${DOCKER_ID} ./resolve-rpmbuilddeps.sh docker exec ${DOCKER_ID} ./resolve-rpmbuilddeps.sh
;; ;;
esac esac

@ -0,0 +1,171 @@
#!/bin/bash -e
# template for bash scripts
# internal use only
append_msg() {
if test $# -ne 0; then
echo -en ":\e[0m \e[1m$*"
fi
echo -e "\e[0m"
}
# write a notice
notice() {
if test $# -eq 0; then
return
fi
echo -e "\e[1m$*\e[0m" 1>&3
}
# write error message
error() {
echo -en "\e[1;31merror" 1>&2
append_msg $* 1>&2
}
# write a warning message
warning() {
echo -en "\e[1;33mwarning" 1>&2
append_msg $* 1>&2
}
# write a success message
success() {
echo -en "\e[1;32msuccess" 1>&2
append_msg $* 1>&2
}
# commandline parameter evaluation
files=${0%/*}/configure.ac
short=0
while test $# -gt 0; do
case "$1" in
(--short|-s) short=1;;
(--help|-h) less <<EOF
SYNOPSIS
$0 [OPTIONS] <files>
OPTIONS
--help, -h show this help
--short, -s short graph with no external dependencies
<files> list of zero or more configure.ac files
(default: ${files})
DESCRIPTION
Evaluates dependencies of all the given configure.ac file. By
default takes the local configure.ac. Outputs a graphwiz dot file
with the dependencies. Solid lines are required dependencies, dotted
lines are optional dependencies.
EXAMPLE
Evaluate all dependencies between all local subversion and git
projects, if they are in the path ~/svn and ~/git:
$0 ~/svn/*/configure.ac ~/git/*/configure.ac
EOF
exit;;
(*) files=$*; break;;
esac
if test $# -eq 0; then
error "missing parameter, try $0 --help"; exit 1
fi
shift;
done
# run a command, print the result and abort in case of error
# option: --no-check: ignore the result, continue in case of error
run() {
check=1
while test $# -gt 0; do
case "$1" in
(--no-check) check=0;;
(*) break;;
esac
shift;
done
echo -en "\e[1m-> running:\e[0m $* ..."
result=$($* 2>&1)
res=$?
if test $res -ne 0; then
if test $check -eq 1; then
error "failed with return code: $res"
if test -n "$result"; then
echo "$result"
fi
exit 1
else
warning "ignored return code: $res"
fi
else
success
fi
}
# error handler
function traperror() {
set +x
local err=($1) # error status
local line="$2" # LINENO
local linecallfunc="$3"
local command="$4"
local funcstack="$5"
for e in ${err[@]}; do
if test -n "$e" -a "$e" != "0"; then
error "line $line - command '$command' exited with status: $e (${err[@]})"
if [ "${funcstack}" != "main" -o "$linecallfunc" != "0" ]; then
echo -n " ... error at ${funcstack} "
if [ "$linecallfunc" != "" ]; then
echo -n "called at line $linecallfunc"
fi
echo
fi
exit $e
fi
done
success
exit 0
}
# catch errors
trap 'traperror "$? ${PIPESTATUS[@]}" $LINENO $BASH_LINENO "$BASH_COMMAND" "${FUNCNAME[@]}" "${FUNCTION}"' ERR SIGINT INT TERM EXIT
##########################################################################################
filter() {
if test $short -eq 1; then
all=$(cat)
allowed=$(sed -n '/"\(.*\)" \[style=solid\];/{s//\1/;H};${x;s/\n//;s/\n/\\|/gp}' <<<"${all}")
sed -n '/"\('"${allowed}"'\)" -> "\('"${allowed}"'\)"/p' <<<"${all}"
else
cat
fi
}
echo "digraph G {"
if test $short -eq 0; then
echo "node [style=dashed];"
fi
(
for file in $files; do
if ! test -e $file; then
error "file $file not found"; exit 1
fi
sed -n '
/^ *m4_define(x_package_name, */ {s//"/;s/ *).*/"/;h;s/.*/& [style=solid];/p}
/^ *AX_REQUIRE_QT/ {s/.*/"qt" -> /;G;s/\n//;s/.*/&;/p}
/^ *AX_PKG_REQUIRE(\[\?\([^],)]\+\)\]\?, \[\?\([^],)]\+\)\]\?.*/ {s//"\2" -> /;G;s/\n//;s/.*/&;/p}
/^ *AX_PKG_REQUIRE(\[\?\([^],)]\+\)\]\?.*/ {s//"\1" -> /;G;s/\n//;s/.*/&;/p}
/^ *AX_CHECK_QT/ {s/.*/"qt" -> /;G;s/\n//;s/.*/& [style=dashed];/p}
/^ *AX_PKG_CHECK(\[\?\([^],)]\+\)\]\?, \[\?\([^],)]\+\)\]\?.*/ {s//"\2" -> /;G;s/\n//;s/.*/& [style=dotted];/p}
/^ *AX_PKG_CHECK(\[\?\([^],)]\+\)\]\?.*/ {s//"\1" -> /;G;s/\n//;s/.*/& [style=dotted];/p}
' $file
done
) | filter
echo "}"

@ -38,6 +38,7 @@ executablefile=$(ls -1 ${1}/Contents/MacOS/ | head -1)
! test -d ${3}/share || rmdir ${3}/share ! test -d ${3}/share || rmdir ${3}/share
! test -d ${3} || \ ! test -d ${3} || \
find ${3} -mindepth 1 -maxdepth 1 -exec mv {} ${1}/Contents/Resources/ \; find ${3} -mindepth 1 -maxdepth 1 -exec mv {} ${1}/Contents/Resources/ \;
! test -d ${3}/include || rm -r ${3}/include
! test -d ${3} || rmdir ${3} ! test -d ${3} || rmdir ${3}
! test -d ${1}/tmp || rm -r ${1}/tmp ! test -d ${1}/tmp || rm -r ${1}/tmp

@ -26,11 +26,11 @@ module.exports = function(chatserver, keyserver) {
privateKeys: privkey privateKeys: privkey
}).then(function(ciphertext) { }).then(function(ciphertext) {
openpgp.decrypt({ openpgp.decrypt({
message: ciphertext, message: openpgp.message.readArmored(ciphertext.data),
publicKeys: openpgp.key.readArmored(_user.key.pub).keys[0], publicKeys: openpgp.key.readArmored(_user.key.pub).keys[0],
privateKey: privkey privateKey: privkey
}).then(function(plaintext) { }).then(function(plaintext) {
if (data==plaintext) { if (data==plaintext.data) {
success(_user) success(_user)
} else { } else {
fail('local key does not match key on server') fail('local key does not match key on server')

@ -35,13 +35,53 @@ TO_INSTALL=
DEPS= DEPS=
if test -e debian/control.in -a ! -e debian/control; then if test -e debian/control.in -a ! -e debian/control; then
function pkg_exists() {
test -n "$(${DO} apt-cache policy -q ${1})"
}
function AX_PKG_CHECK() {
local DEV_DEB_DIST_PKG=
local DEV_DIST_PKG=
local pkg=
eval $4
if test -z "$2"; then
pkg=$1
else
pkg=$2
fi
pkg=${DEV_DEB_DIST_PKG:-${DEV_DIST_PKG:-${pkg}}-dev}
if pkg_exists "${pkg}"; then
echo $pkg
fi
}
function AX_PKG_REQUIRE() {
local DEV_DEB_DIST_PKG=
local DEV_DIST_PKG=
local pkg=
eval $6
if test -z "$2"; then
pkg=$1
else
pkg=$2
fi
if test -n "$4"; then
for f in $pkg $4; do
if pkg_exists "${f}-dev"; then
pkg=$f
break
fi
done
fi
echo ${DEV_DEB_DIST_PKG:-${DEV_DIST_PKG:-${pkg}}-dev}
}
DEPS+=" $(eval $(sed -n '/^ *AX_PKG_REQUIRE/{s,^ *\(AX_PKG_REQUIRE\) *(\(.*\)).*,\1 \2,;s.\[\([^]]*\)\],\?."\1".g;s,$,;,g;p}' configure.ac))"
DEPS+=" $(eval $(sed -n '/^ *AX_PKG_CHECK/{s,^ *\(AX_PKG_CHECK\) *(\(.*\)).*,\1 \2,;s.\[\([^]]*\)\],\?."\1".g;s,$,;,g;p}' configure.ac))"
for f in $(sed -n 's, *AX_\(DEB\|ALL\)_DEPEND_IFEXISTS(\([^)]*\)).*,\2,p' configure.ac); do for f in $(sed -n 's, *AX_\(DEB\|ALL\)_DEPEND_IFEXISTS(\([^)]*\)).*,\2,p' configure.ac); do
if test -n "$(${DO} apt-cache policy -q ${f})" && ((! $(${DO} apt-cache policy ${f} 2>&1 | grep -q 'N: Unable to locate package')) && (! ${DO} dpkg -l "${f}")); then if pkg_exists "${f}"; then
DEPS+=" ${f}" DEPS+=" ${f}"
fi fi
done done
for f in $(sed -n 's, *AX_\(DEB\|ALL\)_DEPEND_IFEXISTS_DEV(\([^)]*\)).*,\2,p' configure.ac); do for f in $(sed -n 's, *AX_\(DEB\|ALL\)_DEPEND_IFEXISTS_DEV(\([^)]*\)).*,\2,p' configure.ac); do
if test -n "$(${DO} apt-cache policy -q ${f}-dev)" && ((! $(${DO} apt-cache policy ${f}-dev 2>&1 | grep -q 'N: Unable to locate package')) && (! ${DO} dpkg -l "${f}-dev")); then if pkg_exists "${f}-dev"; then
DEPS+=" ${f}-dev" DEPS+=" ${f}-dev"
fi fi
done done
@ -57,10 +97,11 @@ if test -e debian/control.in -a ! -e debian/control; then
fi fi
install dpkg-dev install dpkg-dev
DEPS+=" $(LANG= ${DO} dpkg-checkbuilddeps 2>&1 | sed -n '/Unmet build dependencies/ { s,.*Unmet build dependencies: ,,g; s, ([^)]*),,g; s, *| *,|,g; p}')" DEPS+=" $(LANG= ${DO} dpkg-checkbuilddeps 2>&1 | sed -n '/Unmet build dependencies/ { s,.*Unmet build dependencies: ,,g; s, ([^)]*),,g; s, *| *,|,g; p}')"
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}"
continue; continue;
fi fi
@ -83,4 +124,10 @@ if test -n "${TO_INSTALL}" && ! install ${TO_INSTALL}; then
exit 1 exit 1
fi fi
FILES="$(LANG= ${DO} dpkg-checkbuilddeps 2>&1 | sed -n '/Unmet build dependencies/ { s,.*Unmet build dependencies: ,,g; s, ([^)]*),,g; s, *| *,|,g; p}')"
if test -n "${FILES}"; then
echo "**** ERROR: Cannot install: " $FILES
exit 1
fi
echo "**** Success: All Dependencies Resolved" echo "**** Success: All Dependencies Resolved"

@ -14,7 +14,7 @@ INSTALL_TOOL=${INSTALL_TOOL:-$((test -x /usr/bin/zypper && echo zypper install -
SCHROOTNAME="$1" SCHROOTNAME="$1"
PACKAGE_NAME=$(sed -n 's/^ *m4_define(x_package_name, \(.*\)).*/\1/p' configure.ac) PACKAGE_NAME=$(sed -n 's/^ *m4_define(x_package_name, \(.*\)).*/\1/p' configure.ac)
TRAP_CMD= TRAP_CMD="sleep ${SLEEP:-0};"
DEPS= DEPS=
for f in BUILD BUILDROOT RPMS SPECS SRPMS; do for f in BUILD BUILDROOT RPMS SPECS SRPMS; do
if ! test -d $f; then if ! test -d $f; then
@ -23,19 +23,56 @@ for f in BUILD BUILDROOT RPMS SPECS SRPMS; do
fi fi
done done
if test -e ${PACKAGE_NAME}.spec.in -a ! -e ${PACKAGE_NAME}.spec; then if test -e ${PACKAGE_NAME}.spec.in -a ! -e ${PACKAGE_NAME}.spec; then
function pkg_exists() {
(test -x /usr/bin/zypper && zypper search -x "$1" 1>&2 > /dev/null) || \
(test -x /usr/bin/dnf && dnf list -q "$1" 1>&2 > /dev/null) || \
(test -x /usr/bin/yum && yum list -q "$1" 1>&2 > /dev/null) || \
(test -x /usr/sbin/urpmq && urpmq "$1" 1>&2 > /dev/null)
}
function AX_PKG_CHECK() {
local DEV_RPM_DIST_PKG=
local DEV_DIST_PKG=
local pkg=
eval $4
if test -z "$2"; then
pkg=$1
else
pkg=$2
fi
pkg=${DEV_RPM_DIST_PKG:-${DEV_DIST_PKG:-${pkg}}-devel}
if pkg_exists "${pkg}"; then
echo ${pkg}
fi
}
function AX_PKG_REQUIRE() {
local DEV_RPM_DIST_PKG=
local DEV_DIST_PKG=
local pkg=
eval $6
if test -z "$2"; then
pkg=$1
else
pkg=$2
fi
if test -n "$4"; then
for f in $pkg $4; do
if pkg_exists "${f}-devel"; then
pkg=$f
break
fi
done
fi
echo ${DEV_RPM_DIST_PKG:-${DEV_DIST_PKG:-${pkg}}-devel}
}
DEPS+=" $(eval $(sed -n '/^ *AX_PKG_REQUIRE/{s,^ *\(AX_PKG_REQUIRE\) *(\(.*\)).*,\1 \2,;s.\[\([^]]*\)\],\?."\1".g;s,$,;,g;p}' configure.ac))"
DEPS+=" $(eval $(sed -n '/^ *AX_PKG_CHECK/{s,^ *\(AX_PKG_CHECK\) *(\(.*\)).*,\1 \2,;s.\[\([^]]*\)\],\?."\1".g;s,$,;,g;p}' configure.ac))"
for f in $(sed -n 's, *AX_\(RPM\|ALL\)_DEPEND_IFEXISTS(\([^)]*\)).*,\2,p' configure.ac); do for f in $(sed -n 's, *AX_\(RPM\|ALL\)_DEPEND_IFEXISTS(\([^)]*\)).*,\2,p' configure.ac); do
if (test -x /usr/bin/zypper && zypper search -x "$f" 1>&2 > /dev/null) || \ if pkg_exists "${f}"; then
(test -x /usr/bin/dnf && dnf list -q "$f" 1>&2 > /dev/null) || \
(test -x /usr/bin/yum && yum list -q "$f" 1>&2 > /dev/null) || \
(test -x /usr/sbin/urpmq && urpmq "$f" 1>&2 > /dev/null); then
DEPS+=" ${f}" DEPS+=" ${f}"
fi fi
done done
for f in $(sed -n 's, *AX_\(RPM\|ALL\)_DEPEND_IFEXISTS_DEV(\([^)]*\)).*,\2,p' configure.ac); do for f in $(sed -n 's, *AX_\(RPM\|ALL\)_DEPEND_IFEXISTS_DEV(\([^)]*\)).*,\2,p' configure.ac); do
if (test -x /usr/bin/zypper && zypper search -x "$f"-devel 1>&2 > /dev/null) || \ if pkg_exists "${f}-devel"; then
(test -x /usr/bin/dnf && dnf list -q "$f"-devel 1>&2 > /dev/null) || \
(test -x /usr/bin/yum && yum list -q "$f"-devel 1>&2 > /dev/null) || \
(test -x /usr/sbin/urpmq && urpmq "$f"-devel 1>&2 > /dev/null); then
DEPS+=" ${f}-devel" DEPS+=" ${f}-devel"
fi fi
done done
@ -48,7 +85,7 @@ if test -e ${PACKAGE_NAME}.spec.in -a ! -e ${PACKAGE_NAME}.spec; then
TRAP_CMD+="rm ${PACKAGE_NAME}.spec;" TRAP_CMD+="rm ${PACKAGE_NAME}.spec;"
trap "${TRAP_CMD}" INT TERM EXIT trap "${TRAP_CMD}" INT TERM EXIT
sed 's,@\(\(ALL\|RPM\)_DEPEND_IFEXISTS\|\(ALL\|RPM\)_BUILD_DEPEND\|\(ALL\|RPM\)_DEPEND\)@,,g' ${PACKAGE_NAME}.spec.in | \ sed 's,@\(\(ALL\|RPM\)_DEPEND_IFEXISTS\|\(ALL\|RPM\)_BUILD_DEPEND\|\(ALL\|RPM\)_DEPEND\)@,,g' ${PACKAGE_NAME}.spec.in | \
sed 's,@[^@]*@, dummytext,g' > ${PACKAGE_NAME}.spec sed 's,@[^@]*@,dummytext,g' > ${PACKAGE_NAME}.spec
fi fi
TGZFILE=$(sed -n '/^Name: */{s///;h};/^Version: */{s///;H;x;s/\n/-/;s/$/.tar.gz/;p}' ${PACKAGE_NAME}.spec) TGZFILE=$(sed -n '/^Name: */{s///;h};/^Version: */{s///;H;x;s/\n/-/;s/$/.tar.gz/;p}' ${PACKAGE_NAME}.spec)
@ -70,5 +107,14 @@ else
fi fi
fi fi
if test -n "${SCHROOTNAME}"; then
FILES=$(LANG= schroot -c ${SCHROOTNAME} -- rpmbuild -bb --clean --nobuild --define "_topdir ." --define "_sourcedir ." ${PACKAGE_NAME}.spec 2>&1 | sed -n 's, is needed by.*,,p')
else
FILES=$(LANG= rpmbuild -bb --clean --nobuild --define "_topdir ." --define "_sourcedir ." ${PACKAGE_NAME}.spec 2>&1 | sed -n 's, is needed by.*,,p')
fi
if test -n "${FILES}"; then
echo "**** ERROR: Cannot install: " $FILES
exit 1
fi
echo "**** Success: All Dependencies Resolved" echo "**** Success: All Dependencies Resolved"

@ -0,0 +1,160 @@
#!/bin/bash -e
##########################################################################################
#### template for bash scripts #### START BELOW ##########################################
##########################################################################################
############################################################################ begin logging
# check if stdout is a terminal...
if test -t 1; then
# see if it supports colors...
ncolors=$(tput colors)
if test -n "$ncolors" && test $ncolors -ge 8; then
bold="$(tput bold)"
underline="$(tput smul)"
standout="$(tput smso)"
normal="$(tput sgr0)"
black="$(tput setaf 0)"
red="$(tput setaf 1)"
green="$(tput setaf 2)"
yellow="$(tput setaf 3)"
blue="$(tput setaf 4)"
magenta="$(tput setaf 5)"
cyan="$(tput setaf 6)"
white="$(tput setaf 7)"
fi
fi
append_msg() {
if test $# -ne 0; then
echo -n ": ${bold}$*"
fi
echo "${normal}"
}
# write a message
message() {
if test $# -eq 0; then
return
fi
echo "${bold}${white}$*${normal}" 1>&2
}
# write a success message
success() {
echo -n "${bold}${green}success" 1>&2
append_msg $* 1>&2
}
# write a notice
notice() {
echo -n "${bold}${yellow}notice" 1>&2
append_msg $* 1>&2
}
# write a warning message
warning() {
echo -en "${bold}${red}warning" 1>&2
append_msg $* 1>&2
}
# write error message
error() {
echo -en "${bold}${red}error" 1>&2
append_msg $* 1>&2
}
# run a command, print the result and abort in case of error
# option: --ignore: ignore the result, continue in case of error
run() {
ignore=1
while test $# -gt 0; do
case "$1" in
(--ignore) ignore=0;;
(*) break;;
esac
shift;
done
echo -n "${bold}${yellow}running:${white} $*${normal}"
set +e
result=$($* 2>&1)
res=$?
set -e
if test $res -ne 0; then
if test $ignore -eq 1; then
error "failed with return code: $res"
if test -n "$result"; then
echo "$result"
fi
exit 1
else
warning "ignored return code: $res"
fi
else
success
fi
}
############################################################################ error handler
function traperror() {
set +x
local err=($1) # error status
local line="$2" # LINENO
local linecallfunc="$3"
local command="$4"
local funcstack="$5"
IFS=" "
for e in ${err[@]}; do
if test -n "$e" -a "$e" != "0"; then
error "line $line - command '$command' exited with status: $e (${err[@]})"
if [ "${funcstack}" != "main" -o "$linecallfunc" != "0" ]; then
echo -n " ... error at ${funcstack} " 1>&2
if [ "$linecallfunc" != "" ]; then
echo -n "called at line $linecallfunc" 1>&2
fi
echo
fi
exit $e
fi
done
success
exit 0
}
# catch errors
trap 'traperror "$? ${PIPESTATUS[@]}" $LINENO $BASH_LINENO "$BASH_COMMAND" "${FUNCNAME[@]}" "${FUNCTION}"' ERR SIGINT INT TERM EXIT
##########################################################################################
#### START HERE ##########################################################################
##########################################################################################
######################################################### commandline parameter evaluation
while test $# -gt 0; do
case "$1" in
(--help|-h) less <<EOF
SYNOPSIS
$0 [OPTIONS]
OPTIONS
--help, -h show this help
DESCRIPTION
EOF
exit;;
(*) error "unknow option $1, try $0 --help"; exit 1;;
esac
if test $# -eq 0; then
error "missing parameter, try $0 --help"; exit 1
fi
shift;
done
##################################################################################### Main
Loading…
Cancel
Save