fixed mac issues

master
Marc Wäckerlin 10 years ago
parent 63df846f6b
commit 9820b0b6e2
  1. 47
      ax_check_qt.m4
  2. 91
      ax_init_standard_project.m4
  3. 378
      bootstrap.sh
  4. 33
      src/version.hxx

@ -1,6 +1,10 @@
# SYNOPSIS # SYNOPSIS
# #
# AX_CXX_CHECK_QT([qt_prefix], [list-of-qt-modules]) # Check if a module exists:
# AX_CXX_CHECK_QT([qt_prefix], [list-of-qt-modules], [optional-modules])
#
# Abort if a module does not exist:
# AX_CXX_REQUIRE_QT([qt_prefix], [list-of-qt-modules], [optional-modules])
# #
# DESCRIPTIONS # DESCRIPTIONS
# #
@ -25,6 +29,13 @@
# feature. Each entry in the list can have a version comparison # feature. Each entry in the list can have a version comparison
# specifier, with the same syntax as the Requires keyword in the # specifier, with the same syntax as the Requires keyword in the
# data files themselves. # data files themselves.
#
# optional-modules
#
# Optional list of more, optional modules, e.g. modules that
# exist only in Qt5, but not in Qt4, such as QtWidgets or
# QtWebKitWidgets
AC_DEFUN([AX_CXX_QT_TOOL], [ AC_DEFUN([AX_CXX_QT_TOOL], [
if test -z "$HAVE_$1"; then if test -z "$HAVE_$1"; then
@ -140,6 +151,40 @@ qrc_%.cxx: %.qrc
AC_SUBST(AX_ADDITIONAL_QT_RULES_HACK) AC_SUBST(AX_ADDITIONAL_QT_RULES_HACK)
]) ])
# SYNOPSIS
#
# AX_CXX_CHECK_QT([qt_prefix], [list-of-qt-modules], [optional-modules])
#
# DESCRIPTIONS
#
# qt_prefix
#
# Each call to AX_CXX_CHECK_QT should have a different prefix
# value (with a few exceptions discussed later on). This value,
# usually provided in uppercase, is used as prefix to the
# variables holding the compiler flags and libraries reported by
# pkg-config.
#
# For instance, if your prefix was to be FOO you'll be provided
# two variables FOO_CFLAGS and FOO_LIBS.
#
# This will also be used as message during the configure checks:
# checking for FOO....
#
# list-of-modules
#
# A single call to the macro can check for the presence of one or
# more qt modules; you'll see later how to make good use of this
# feature. Each entry in the list can have a version comparison
# specifier, with the same syntax as the Requires keyword in the
# data files themselves.
#
# optional-modules
#
# Optional list of more, optional modules, e.g. modules that
# exist only in Qt5, but not in Qt4, such as QtWidgets or
# QtWebKitWidgets
AC_DEFUN([AX_REQUIRE_QT], [ AC_DEFUN([AX_REQUIRE_QT], [
AX_CHECK_QT([$1], [$2], [$3]) AX_CHECK_QT([$1], [$2], [$3])
if ! test "$HAVE_$1" -eq 1; then if ! test "$HAVE_$1" -eq 1; then

@ -1,19 +1,24 @@
## @id $Id$ ## @id $Id: ax_init_standard_project.m4 31 2015-05-05 15:06:08Z marc $
## 1 2 3 4 5 6 7 8 ## 1 2 3 4 5 6 7 8
## 45678901234567890123456789012345678901234567890123456789012345678901234567890 ## 45678901234567890123456789012345678901234567890123456789012345678901234567890
m4_define(x_least, m4_esyscmd_s( # define least version number from subversion's revision number:
LEAST="ERROR-UNDEFINED-REVISION-to-be-built-in-subdirectory-of-svn-checkout" # it is taken modulo 256 due to a bug on Apple's MacOSX
m4_define(x_version, m4_esyscmd_s(
SVN_REVISION="ERROR-UNDEFINED-REVISION-to-be-built-in-subdirectory-of-svn-checkout"
for path in . .. ../..; do for path in . .. ../..; do
if svn info $path 2>&1 > /dev/null; then if svn info $path 2>&1 > /dev/null; then
LEAST=$(LANG= svn info $path | sed -n 's/Last Changed Rev: //p') SVN_REVISION=$(LANG= svn info $path | sed -n 's/Last Changed Rev: //p')
(cd $path && svn2cl) (cd $path && svn2cl)
break; break;
fi fi
done done
echo -n $LEAST # Mac does not support LEAST > 255
echo $ECHO_N x_major.$((x_minor+$SVN_REVISION/256)).$(($SVN_REVISION%256))
)) ))
## bugreport mail address is taken from <user@host> in first line of AUTHORS
m4_define(x_bugreport, m4_esyscmd_s( m4_define(x_bugreport, m4_esyscmd_s(
head -1 AUTHORS | \ head -1 AUTHORS | \
sed -n 's,.*<\([-_.a-z0-9A-Z]*@[-_.a-z0-9A-Z]*\)>.*,\1,gp' sed -n 's,.*<\([-_.a-z0-9A-Z]*@[-_.a-z0-9A-Z]*\)>.*,\1,gp'
@ -37,6 +42,11 @@ dnl refers to ${prefix}. Thus we have to use `eval' twice.
test "$exec_prefix_NONE" && exec_prefix=NONE test "$exec_prefix_NONE" && exec_prefix=NONE
]) ])
# add target dependencies to an existing makefile.in
# - parameters:
# $1 = existing target
# $2 = new dependency for that target
# $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 ':a;/^'${1}':.*\\$/{N;s/\\\n//;ta};s/^'${1}':.*$/& '${2}'/' "${srcdir}/${3}" sed -i ':a;/^'${1}':.*\\$/{N;s/\\\n//;ta};s/^'${1}':.*$/& '${2}'/' "${srcdir}/${3}"
@ -50,15 +60,36 @@ AC_DEFUN([AX_ADD_MAKEFILE_TARGET_DEP], [
fi fi
]) ])
# Same as AC_SUBST, but adds -Dname="value" option to CPPFLAGS
# - parameters:
# $1 = variable name
AC_DEFUN([AX_SUBST], [ AC_DEFUN([AX_SUBST], [
AC_SUBST([$1]) AC_SUBST([$1])
tmp_var="${$1//$'\n'/\n}" tmp_var=$(echo "${$1}" | awk 1 ORS='\\n')
AM_CPPFLAGS+=' -D$1='"'${tmp_var//#/\\#}'" tmp_var=${tmp_var//\"/\\\"}
tmp_var=${tmp_var//\'/\'\"\'\"\'}
tmp_var=${tmp_var//#/\\#}
AM_CPPFLAGS+=" '-D$1=\"${tmp_var}\"'"
AC_SUBST(AM_CPPFLAGS) AC_SUBST(AM_CPPFLAGS)
]) ])
# must be called on the right position in configure.ac
#
# configure.ac must start with:
#
# m4_define(x_package_name, YOUR_PACKAGE_NAME) # project's name
# m4_define(x_major, MAJOR_NUMBER) # project's major version
# m4_define(x_minor, MINOR_NUMBER) # project's minor version
# m4_include(ax_init_standard_project.m4)
# AC_INIT(x_package_name, x_major.x_minor.x_least, x_bugreport, x_package_name)
# AM_INIT_AUTOMAKE([1.9 tar-pax])
# AX_INIT_STANDARD_PROJECT
#
# you change nothing but: YOUR_PACKAGE_NAME, MAJOR_NUMBER, MINOR_NUMBER
#
# configures the basic environment
AC_DEFUN([AX_INIT_STANDARD_PROJECT], [ AC_DEFUN([AX_INIT_STANDARD_PROJECT], [
AM_CPPFLAGS+=" '-DMAKE_STRING(X)=\#X'" AM_CPPFLAGS+=" '-DMAKE_STRING(X)=\#X' '-DNAMESPACE=${PACKAGE_NAME}'"
AX_SUBST(NUMBERS) AX_SUBST(NUMBERS)
AX_SUBST(HOME) AX_SUBST(HOME)
README=$(tail -n +3 README) README=$(tail -n +3 README)
@ -74,7 +105,7 @@ AC_DEFUN([AX_INIT_STANDARD_PROJECT], [
AX_SUBST(DISTRO) AX_SUBST(DISTRO)
BUILD_NUMBER=${BUILD_NUMBER:-1} BUILD_NUMBER=${BUILD_NUMBER:-1}
AX_SUBST(BUILD_NUMBER) AX_SUBST(BUILD_NUMBER)
BUILD_DATE=$(date -R) BUILD_DATE=$(date +"%Y-%m-%d %H:%M %Z")
AX_SUBST(BUILD_DATE) AX_SUBST(BUILD_DATE)
if test -f "${PROJECT_NAME}-logo.png"; then if test -f "${PROJECT_NAME}-logo.png"; then
PROJECT_LOGO="${PROJECT_NAME}-logo.png" PROJECT_LOGO="${PROJECT_NAME}-logo.png"
@ -91,7 +122,7 @@ AC_DEFUN([AX_INIT_STANDARD_PROJECT], [
test -f makefile.in && cat >> makefile.in <<EOF test -f makefile.in && cat >> makefile.in <<EOF
#### Begin: Appended by $0 #### Begin: Appended by $0
EXTRA_DIST = bootstrap.sh EXTRA_DIST = bootstrap.sh
doc_DATA = AUTHORS NEWS README COPYING INSTALL ChangeLog @PACKAGE_NAME@.spec doc_DATA = AUTHORS NEWS README COPYING INSTALL ChangeLog
clean-standard-project-targets: clean-standard-project-targets:
-rm -rf \${PACKAGE_NAME}-\${PACKAGE_VERSION} -rm -rf \${PACKAGE_NAME}-\${PACKAGE_VERSION}
-rm \${PACKAGE_TARNAME}-\${PACKAGE_VERSION}.tar.gz -rm \${PACKAGE_TARNAME}-\${PACKAGE_VERSION}.tar.gz
@ -104,6 +135,7 @@ maintainer-clean-standard-project-targets:
EOF EOF
]) ])
# use this in configure.ac to support C++
AC_DEFUN([AX_USE_CXX], [ AC_DEFUN([AX_USE_CXX], [
m4_include(ax_cxx_compile_stdcxx_11.m4) m4_include(ax_cxx_compile_stdcxx_11.m4)
AC_LANG(C++) AC_LANG(C++)
@ -158,6 +190,7 @@ maintainer-clean-cxx-targets:
EOF EOF
]) ])
# use this in configure.ac to support CppUnit for C++ unit tests
AC_DEFUN([AX_USE_CPPUNIT], [ AC_DEFUN([AX_USE_CPPUNIT], [
AM_PATH_CPPUNIT([1.0.0], [have_cppunit="yes"], [have_cppunit="no"]) AM_PATH_CPPUNIT([1.0.0], [have_cppunit="yes"], [have_cppunit="no"])
# infos and warnings # infos and warnings
@ -175,6 +208,7 @@ maintainer-clean-test-targets:
EOF EOF
]) ])
# 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])
AX_ADD_MAKEFILE_TARGET_DEP([maintainer-clean-am], [maintainer-clean-example-targets], [examples/makefile.in]) AX_ADD_MAKEFILE_TARGET_DEP([maintainer-clean-am], [maintainer-clean-example-targets], [examples/makefile.in])
@ -186,6 +220,7 @@ maintainer-clean-example-targets:
EOF EOF
]) ])
# use this in configure.ac to support C++ libraries
AC_DEFUN([AX_USE_LIBTOOL], [ AC_DEFUN([AX_USE_LIBTOOL], [
# libtool versioning # libtool versioning
LIB_MAJOR=m4_eval(x_major+x_minor) LIB_MAJOR=m4_eval(x_major+x_minor)
@ -213,6 +248,7 @@ uninstall-data-libtool-pkg:
EOF EOF
]) ])
# use this in configure.ac to support debian packages
AC_DEFUN([AX_USE_DEBIAN_PACKAGING], [ AC_DEFUN([AX_USE_DEBIAN_PACKAGING], [
README_DEB=$(tail -n +3 README | sed -e 's/^$/./g' -e 's/^/ /g') README_DEB=$(tail -n +3 README | sed -e 's/^$/./g' -e 's/^/ /g')
AC_SUBST(README_DEB) AC_SUBST(README_DEB)
@ -233,6 +269,7 @@ distclean-debian-targets:
EOF EOF
]) ])
# use this in configure.ac to support RPM packages
AC_DEFUN([AX_USE_RPM_PACKAGING], [ AC_DEFUN([AX_USE_RPM_PACKAGING], [
# m4_include(ax_rpm_rules.m4) # m4_include(ax_rpm_rules.m4)
AC_CONFIG_FILES([${PACKAGE_NAME}.spec]) AC_CONFIG_FILES([${PACKAGE_NAME}.spec])
@ -246,6 +283,12 @@ rpm: dist
EOF EOF
]) ])
# use this in configure.ac to support scripts, e.g. bash scripts
AC_DEFUN([AX_USE_SCRIPTS], [
AC_CONFIG_FILES([scripts/makefile])
])
# use this in configure.ac to support Doxygen documentation generation
AC_DEFUN([AX_USE_DOXYGEN], [ 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)
@ -296,6 +339,18 @@ uninstall-documentation:
EOF EOF
]) ])
# require a specific package, with fallback: test for a header
# - parameter:
# $1 = unique id (no special characters)
# $2 = module name
# $3 = a header file to find (optional)
# $4 = alternative module names (space separated, optional)
#
# uses PKG_CHECK_MODULES to test for a module
# then, if given, looks for the header file
# 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], [ AC_DEFUN([AX_PKG_REQUIRE], [
PKG_PROG_PKG_CONFIG PKG_PROG_PKG_CONFIG
PKG_CHECK_MODULES([$1], [$2], [ PKG_CHECK_MODULES([$1], [$2], [
@ -310,8 +365,9 @@ AC_DEFUN([AX_PKG_REQUIRE], [
if test ${$1_found} -eq 0; then if test ${$1_found} -eq 0; then
for p in /usr/include ${$1_CFLAGS}; do for p in /usr/include ${$1_CFLAGS}; do
$1_file=$(find ${p#-I} -name $3) $1_file=$(find ${p#-I} -name $3)
if test -e ${$1_file}; then if test -e "${$1_file}"; then
$1_CFLAGS="${$1_CFLAGS} -I${$1_file%/*}" AC_MSG_NOTICE([Header file $3 found in sub path as ${$1_file}])
$1_CFLAGS="${$1_CFLAGS} -I${$1_file%/$3}"
$1_found=1 $1_found=1
break break
fi fi
@ -341,7 +397,8 @@ AC_DEFUN([AX_PKG_REQUIRE], [
for p in /usr/include ${$1_CFLAGS}; do for p in /usr/include ${$1_CFLAGS}; do
$1_file=$(find ${p#-I} -name $3) $1_file=$(find ${p#-I} -name $3)
if test -e ${$1_file}; then if test -e ${$1_file}; then
$1_CFLAGS="${$1_CFLAGS} -I${$1_file%/*}" AC_MSG_NOTICE([Header file $3 found in sub path as ${$1_file}])
$1_CFLAGS="${$1_CFLAGS} -I${$1_file%/$3}"
$1_found=1 $1_found=1
break break
fi fi
@ -373,6 +430,14 @@ AC_DEFUN([AX_PKG_REQUIRE], [
fi fi
]) ])
# check if a specific package exists
# - parameter:
# $1 = unique id (no special characters)
# $2 = module name (optional, if different from id)
#
# 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], [ AC_DEFUN([AX_PKG_CHECK], [
PKG_PROG_PKG_CONFIG PKG_PROG_PKG_CONFIG
PKG_CHECK_MODULES([$1], [m4_default([$2], [$1])], [ PKG_CHECK_MODULES([$1], [m4_default([$2], [$1])], [

@ -14,23 +14,209 @@
## added file header ## added file header
## ##
MY_NAME=${0##*/}
PROJECT_PATH=$(pwd)
DEFAULT_PROJECT_NAME=${PROJECT_PATH##*/}
configure=0 configure=0
build=0
overwrite=0
rebuild=0
while test $# -gt 0; do while test $# -gt 0; do
case "$1" in case "$1" in
(--configure|-c) configure=1;; (--configure|-c) configure=1;;
(--build|-b) configure=1; build=1;;
(--overwrite|-o) overwrite=1;;
(--rebuild|-r) rebuild=1;;
(--version|-v)
echo "$Id$";
exit;;
(--help|-h) less <<EOF
SYNOPSIS
${MY_NAME} [--help|-h] [--configure|-c]
OPTIONS
--configure, -c call ./configure after initialization
--build, -c build, call ./configure && make after initialization
--overwrite, -o overwrite all basic files (bootstrap.sh, m4-macros)
--rebuild -r force rebuild of generated files, even if modified
--help, -h show this help
--version, -v show version and date of this file
DESCRIPTION
Initializes your build environment, as far as neccessary. Reads your
used features from configure.ac, if that file exists, or creates a
configure.ac. Automatically copies or creates all required template
files.
From your new and empty project's subversion path, call $0 to
initialize your build environment.
Before you call ${MY_NAME} the very first time, edit ${0#/*}/AUTHORS
and replace it with your name (or the authors of your project, one
name each line, main developper and copyright holder on the first
line).
The first call to ${MY_NAME} should be something like
../bootstrap-build-environment/${MY_NAME} and not
./${MY_NAME}. Actually, you called $0.
In the way you called ${MY_NAME}, it has detected
${DEFAULT_PROJECT_NAME} as the project name for your project in
${PROJECT_PATH}. In the first run, you should call ${MY_NAME} from a
checked out the bootstrap-build-environment from
https://dev.marc.waeckerlin.org/, and the path from where you call
${MY_NAME} (which is actually ${PROJECT_PATH}) should be the path to
your newly created project. Please note that your project must be a
checked out subversion repository, since this build environment
relies on subversion.
Example for an initial run, where your new projet is stored in
subversion on svn:/path/to/your/new-project:
cd ~/svn
svn co https://dev.marc.waeckerlin.org/svn/bootstrap-build-environment/trunk \\
bootstrap-build-environment
svn co svn:/path/to/your/new-project/trunk new-project
cd new-project
../bootstrap-build-environment/bootstrap.sh
RUNNING
If you run ${MY_NAME}, it first generates the necessary files (see
below), then first runs make distclean if a makefile exists. After
this it calles aclocal, libtoolize, automake, autoconf and
optionally ./configure.
GENERATED FILES
This script copies the following files into your project environment:
* ${MY_NAME}
* ax_init_standard_project.m4 - auxiliary macro definition file
* ax_cxx_compile_stdcxx_11.m4 - auxiliary macro definition file
* ax_check_qt.m4 - auxiliary macro definition file
* AUTHORS - replace your name in AUTHORS before first run
* configure.ac - global configuration file template
* makefile.am - global makefile template
* src/makefile.am - if you enabled AX_USE_CXX
* src/version.hxx - if you enabled AX_USE_CXX
* src/version.cxx - if you enabled AX_USE_CXX
* scripts/makefile.in - if you enabled AX_USE_SCRIPTS
* doc/makefile.am - if you enabled AX_USE_DOXYGEN
* doc/doxyfile.in - if you enabled AX_USE_DOXYGEN
* test/makefile.am - if you enabled AX_USE_CPPUNIT
* examples/makefile.am - if you enabled AX_BUILD_EXAMPLES
* debian/changelog.in - if you enabled AX_USE_DEBIAN_PACKAGING
* debian/control.in - if you enabled AX_USE_DEBIAN_PACKAGING
* debian/docs - if you enabled AX_USE_DEBIAN_PACKAGING
* debian/${DEFAULT_PROJECT_NAME}.install - if you enabled AX_USE_DEBIAN_PACKAGING
* debian/${DEFAULT_PROJECT_NAME}.dirs - if you enabled AX_USE_DEBIAN_PACKAGING
* debian/${DEFAULT_PROJECT_NAME}-dev.install - if you enabled AX_USE_DEBIAN_PACKAGING
* debian/${DEFAULT_PROJECT_NAME}-dev.dirs - if you enabled AX_USE_DEBIAN_PACKAGING
* debian/rules - if you enabled AX_USE_DEBIAN_PACKAGING
* debian/compat - if you enabled AX_USE_DEBIAN_PACKAGING
* src/${DEFAULT_PROJECT_NAME}.pc.in - if you enabled AX_USE_LIBTOOL
REBUILDING FILES
To rebuild all these files, just run "${MY_NAME} -o". You can also
remove and rebuild a single file by removing it from subversion,
just call "svn rm <file>" and "${MY_NAME}" to rebuild file "<file>".
FILES TO EDIT
After creation of the files, you can edit them according to your
needs. Please don't forget to redo your edits after rebuilding a
file. Most files don't even need to be edited, they work out of the
box.
The following files normally require editing:
* AUTHORS
* README
* configure.ac
* src/makefile.am
* test/makefile.am
* examples/makefile.am
FILE DEPENDENCIES
You should rebuild (see above) the files, whenever you change the
configuration a dependent, i.e.:
* test/makefile.am depends on AX_USE_LIBTOOL
* doc/doxyfile.in depends on AX_BUILD_EXAMPLES
* debian/control.in depends on AX_USE_DOXYGEN, AX_USE_CPPUNIT,
AX_CXX_QT, AX_CXX_CHECK_QT, 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}-dev.install depends on AX_USE_LIBTOOL
* debian/${DEFAULT_PROJECT_NAME}-dev.dirs depends on AX_USE_LIBTOOL
FILES
* AUTHORS: First line is the main author and used in Debian and RPM
packaging, so there must be a GPG key that matches
to this line.
* README: First line is a short description of your project, then an
empty line must follow. All remaining lines are a
long description of your project. this information
is copied, e.g. in Debian or RPM packages. In C++
<ou can access the readme by calling
${DEFAULT_PROJECT_NAME}::description().
* ChangeLog: Your changelog is automatically maintained from
subversion history, using svn2cl. You don't need to
care about.
* configure.ac: This file becomes very short and simple. You provide
the project name, the major and minor version. The
least version number is automatically taken from
subversion's revision, so every checkin
automatically increments the least version
number. The following macros are supported:
* Enable C++: AX_USE_CXX
* Enable LibTool library creation: AX_USE_LIBTOOL
* Enable Scripts: AX_USE_SCRIPTS
* Enable Doxygen documentation generation: AX_USE_DOXYGEN
* Enable Debian packaging by calling "make deb": AX_USE_DEBIAN_PACKAGING
* Not yet implemented: AX_USE_RPM_PACKAGING
* Enable C++ testing using CppUnit: AX_USE_CPPUNIT
* 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)
* Require a QT module: AX_REQUIRE_QT (see ax_check_qt.m4)
* Optionally use a QT module: AX_CHECK_QT (see ax_check_qt.m4)
* Require a module: AX_PKG_REQUIRE (see ax_init_standard_project.m4)
* Check for an optional module: AX_PKG_CHECK (see ax_init_standard_project.m4)
EXAMPLES: src/makefile.am in a QT project
In this example, you wrote the following files:
* ${DEFAULT_PROJECT_NAME}.hxx - Qt Header file, passed to moc
* ${DEFAULT_PROJECT_NAME}.cxx - C++ file containing main()
* ${DEFAULT_PROJECT_NAME}.ui - UI file
All rules are implicitely added, all you need to do is to add the
following definitions, most lines are generic:
bin_PROGRAMS = ${DEFAULT_PROJECT_NAME}
${DEFAULT_PROJECT_NAME}_MOCFILES = moc_${DEFAULT_PROJECT_NAME}.cxx
${DEFAULT_PROJECT_NAME}_UIFILES = ui_${DEFAULT_PROJECT_NAME}.hxx
${DEFAULT_PROJECT_NAME}_SOURCES = version.cxx version.hxx ${DEFAULT_PROJECT_NAME}.cxx ${DEFAULT_PROJECT_NAME}_MOCFILES ${DEFAULT_PROJECT_NAME}_UIFILES
BUILT_SOURCES = \${${DEFAULT_PROJECT_NAME}_MOCFILES} \${${DEFAULT_PROJECT_NAME}_UIFILES}
EXTRA_DIST = \${${DEFAULT_PROJECT_NAME}_MOCFILES:moc_%.cxx=%.hxx} \${${DEFAULT_PROJECT_NAME}_UIFILES:ui_%.hxx=%.ui}
MAINTAINERCLEANFILES = makefile.in
EOF
exit;;
(*) break;; (*) break;;
esac esac
shift; shift;
done done
MY_NAME=${0##*/} HEADER='## @id '"\$Id\$"'
PROJECT_PATH=$(pwd)
DEFAULT_PROJECT_NAME=${PROJECT_PATH##*/}
HEADER='## @id $Id$
# #
# This file has been added by '${MY_NAME}' on '$(date -R)' # This file has been added by '${MY_NAME}' on '$(date +"%Y-%m-%d %H:%M %Z")'
# Feel free to change it or even remove and rebuild it, up to your needs # Feel free to change it or even remove and rebuild it, up to your needs
# #
## 1 2 3 4 5 6 7 8 ## 1 2 3 4 5 6 7 8
@ -77,18 +263,29 @@ checkdir() {
fi fi
} }
checkfile() {
exists=0
if test -f "$1"; then
exists=1
fi
test $exists -eq 1
}
to() { to() {
while test $# -gt 0; do while test $# -gt 0; do
mode="u=rw,g=rw,o=r"
case "$1" in case "$1" in
(--condition) shift # test for a tag, abort if not set (--condition) shift # test for a tag, abort if not set
if ! testtag "$1" configure.ac; then if ! testtag "$1" configure.ac; then
return return
fi;; fi;;
(--mode) shift # test for a tag, abort if not set
mode="$1";;
(*) break;; (*) break;;
esac esac
shift; shift;
done done
if test -f "$1"; then # file already exists if checkfile "$1" && test $rebuild -eq 0; then # file already exists
return return
fi fi
checkdir "$(dirname ${1})" checkdir "$(dirname ${1})"
@ -105,13 +302,19 @@ to() {
else else
echo -e " \e[32msuccess\e[0m" echo -e " \e[32msuccess\e[0m"
fi fi
chmod $mode $1
if test $exists -eq 0; then
run svn add "$1" run svn add "$1"
run svn propset svn:keywords "Id" "$1" run svn propset svn:keywords "Id" "$1"
fi
} }
copy() { copy() {
if ! test -f "$1"; then if checkfile "$1" && test $overwrite -eq 0; then
return
fi
run cp "${0%/*}/$1" "$1" run cp "${0%/*}/$1" "$1"
if test $exists -eq 0; then
run svn add "$1" run svn add "$1"
run svn propset svn:keywords "Id" "$1" run svn propset svn:keywords "Id" "$1"
fi fi
@ -119,11 +322,22 @@ copy() {
doxyreplace() { doxyreplace() {
echo -en "\e[1m-> doxyfile:\e[0m configure $1 ..." echo -en "\e[1m-> doxyfile:\e[0m configure $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"
else
echo -e " \e[31merror\e[0m"
echo -e "\e[1m**** command: $0 $*\e[0m"
exit 1
fi
}
doxyadd() {
echo -en "\e[1m-> doxyfile:\e[0m configure $1 ..."
if sed -i '/^'"$1"' *=/a'"$1"' += '"$2" doc/doxyfile.in; then
echo -e " \e[32msuccess\e[0m" echo -e " \e[32msuccess\e[0m"
else else
echo -e " \e[31merror\e[0m" echo -e " \e[31merror\e[0m"
echo -e "\e[1m**** command: sed -i 's|\(^'"$1"' *=\) *|\1'" $2"'|g' doc/doxyfile.in;\e[0m" echo -e "\e[1m**** command: $0 $*\e[0m"
exit 1 exit 1
fi fi
} }
@ -147,12 +361,17 @@ AX_INIT_STANDARD_PROJECT
# requirements, uncomment, what you need: # requirements, uncomment, what you need:
#AX_USE_CXX #AX_USE_CXX
#AX_USE_LIBTOOL #AX_USE_LIBTOOL
#AX_USE_SCRIPTS
#AX_USE_DOXYGEN #AX_USE_DOXYGEN
#AX_USE_DEBIAN_PACKAGING #AX_USE_DEBIAN_PACKAGING
#AX_USE_RPM_PACKAGING #AX_USE_RPM_PACKAGING
#AX_USE_CPPUNIT #AX_USE_CPPUNIT
#AX_BUILD_EXAMPLES #AX_BUILD_EXAMPLES
# qt features, uncomment, what you need:
#AX_CHECK_QT([QT], [QtCore QtGui QtNetwork], [QtWidgets])
#AM_CPPFLAGS="${AM_CPPFLAGS} -DQT_NO_KEYWORDS"
# create output # create output
AC_OUTPUT AC_OUTPUT
EOF EOF
@ -160,17 +379,99 @@ EOF
exit 0 exit 0
fi fi
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)
echo "${HEADER}" | to --condition AX_USE_CXX src/makefile.am echo "${HEADER}MAINTAINERCLEANFILES = makefile.in" | to --condition AX_USE_CXX src/makefile.am
echo "${HEADER}" | to --condition AX_USE_DOXYGEN doc/makefile.am to --condition AX_USE_CXX src/version.hxx <<EOF
/*! @file
@id \$Id\$
*/
// 1 2 3 4 5 6 7 8
// 45678901234567890123456789012345678901234567890123456789012345678901234567890
#include <string>
namespace NAMESPACE {
/// get package string which consists of package name and package version
std::string package_string();
/// get package name
std::string package_name();
/// get package version
std::string version();
/// get code build date
std::string build_date();
/// get author, i.e. copyright holder
std::string author();
/// get short package description (1st line of README)
std::string description();
/// get long package description (starting at 3rd line in README)
std::string readme();
/// get package logo file name
std::string logo();
/// get package icon file name
std::string icon();
/// used for <code>what filename</code>
extern const std::string WHAT;
/// used for <code>ident filename</code>
extern const std::string IDENT;
}
EOF
to --condition AX_USE_CXX src/version.cxx <<EOF
/*! @file
@id $Id\$
*/
// 1 2 3 4 5 6 7 8
// 45678901234567890123456789012345678901234567890123456789012345678901234567890
#include <string>
namespace NAMESPACE {
std::string package_string() {
return PACKAGE_STRING;
}
std::string package_name() {
return PACKAGE_NAME;
}
std::string version() {
return PACKAGE_VERSION;
}
std::string build_date() {
return BUILD_DATE;
}
std::string author() {
return AUTHOR;
}
std::string description() {
return DESCRIPTION;
}
std::string readme() {
return README;
}
std::string logo() {
return PROJECT_LOGO;
}
std::string icon() {
return PROJECT_ICON;
}
const std::string WHAT("#(@) " PACKAGE_STRING);
const std::string IDENT("\$Id: " PACKAGE_STRING);
}
EOF
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
to --condition AX_USE_CPPUNIT test/makefile.am <<EOF to --condition AX_USE_CPPUNIT test/makefile.am <<EOF
${HEADER}AM_CPPFLAGS = -I${top_srcdir}/src -I${top_builddir}/src ${HEADER}AM_CPPFLAGS = -I${top_srcdir}/src -I${top_builddir}/src
AM_LDFLAGS = -L${top_builddir}/src/.libs AM_LDFLAGS = -L${top_builddir}/src/.libs
LDADD = -l${PACKAGE_NAME} LDADD = -l${PACKAGE_NAME}
MAINTAINERCLEANFILES = makefile.in
EOF EOF
to --condition AX_BUILD_EXAMPLES examples/makefile.am <<EOF to --condition AX_BUILD_EXAMPLES examples/makefile.am <<EOF
${HEADER}AM_CPPFLAGS = -I${top_srcdir}/src -I${top_builddir}/src ${HEADER}AM_CPPFLAGS = -I${top_srcdir}/src -I${top_builddir}/src
AM_LDFLAGS = -L${top_builddir}/src/.libs AM_LDFLAGS = -L${top_builddir}/src/.libs
LDADD = -l${PACKAGE_NAME} LDADD = -l${PACKAGE_NAME}
MAINTAINERCLEANFILES = makefile.in
EOF EOF
if testtag AX_USE_DOXYGEN && ! test -f doc/doxyfile.in; then if testtag AX_USE_DOXYGEN && ! test -f doc/doxyfile.in; then
run doxygen -g doc/doxyfile.in run doxygen -g doc/doxyfile.in
@ -183,27 +484,47 @@ if testtag AX_USE_DOXYGEN && ! test -f doc/doxyfile.in; then
doxyreplace INLINE_INHERITED_MEMB YES doxyreplace INLINE_INHERITED_MEMB YES
doxyreplace MULTILINE_CPP_IS_BRIEF YES doxyreplace MULTILINE_CPP_IS_BRIEF YES
doxyreplace TAB_SIZE 2 doxyreplace TAB_SIZE 2
doxyreplace ALIASES '"id=\par File-ID\n" "copy=\par Copyright\n" "license=\par License\n" "classmutex=\par Reentrant:\nAccess is locked with class static mutex @c " "instancemutex=\par Reentrant:\nAccess is locked with per instance mutex @c " "mutex=\par Reentrant:\nAccess is locked with mutex @c "' doxyreplace ALIASES '"id=\\par File-ID\\n"'
doxyadd ALIASES '"copy=\\par Copyright\\n"'
doxyadd ALIASES '"license=\\par License\\n"'
doxyadd ALIASES '"classmutex=\\par Reentrant:\\nAccess is locked with class static mutex @c "'
doxyadd ALIASES '"instancemutex=\\par Reentrant:\\nAccess is locked with per instance mutex @c "'
doxyadd ALIASES '"mutex=\\par Reentrant:\\nAccess is locked with mutex @c "'
doxyreplace ENABLE_PREPROCESSING YES
doxyreplace MACRO_EXPANSION YES
doxyadd PREDEFINED '"NAMESPACE=@PACKAGE_NAME@"'
doxyreplace BUILTIN_STL_SUPPORT YES doxyreplace BUILTIN_STL_SUPPORT YES
doxyreplace DISTRIBUTE_GROUP_DOC YES doxyreplace DISTRIBUTE_GROUP_DOC YES
doxyreplace EXTRACT_ALL YES doxyreplace EXTRACT_ALL YES
doxyreplace EXTRACT_PACKAGE YES
doxyreplace EXTRACT_PRIVATE YES doxyreplace EXTRACT_PRIVATE YES
doxyreplace EXTRACT_STATIC YES doxyreplace EXTRACT_STATIC YES
doxyreplace EXTRACT_LOCAL_CLASSES YES doxyreplace EXTRACT_LOCAL_CLASSES YES
doxyreplace EXTRACT_LOCAL_METHODS YES doxyreplace EXTRACT_LOCAL_METHODS YES
doxyreplace EXTRACT_ANON_NSPACES YES doxyreplace EXTRACT_ANON_NSPACES YES
doxyreplace SHOW_GROUPED_MEMB_INC YES
doxyreplace SORT_MEMBERS_CTORS_1ST YES doxyreplace SORT_MEMBERS_CTORS_1ST YES
doxyreplace WARN_IF_UNDOCUMENTED NO doxyreplace WARN_IF_UNDOCUMENTED NO
doxyreplace WARN_LOGFILE doxygen.errors doxyreplace WARN_LOGFILE doxygen.errors
doxyreplace INPUT "@top_srcdir@/src" doxyreplace INPUT "@top_srcdir@/src"
if testtag AX_USE_SCRIPTS; then
doxyadd INPUT "@top_srcdir@/scripts"
fi
if testtag AX_USE_CPPUNIT; then
doxyadd INPUT "@top_srcdir@/test"
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'
doxyadd FILE_PATTERNS *.wt
doxyreplace RECURSIVE YES doxyreplace RECURSIVE YES
doxyreplace EXCLUDE_PATTERNS "moc_* uic_* qrc_*" doxyreplace EXCLUDE_PATTERNS "moc_* uic_* qrc_*"
if testtag AX_BUILD_EXAMPLES; then if testtag AX_BUILD_EXAMPLES; then
doxyreplace EXAMPLE_PATH @top_srcdir@/examples doxyreplace EXAMPLE_PATH @top_srcdir@/examples
fi fi
doxyreplace EXAMPLE_RECURSIVE YES doxyreplace EXAMPLE_RECURSIVE YES
doxyreplace FILTER_PATTERNS '*.wt=doxygen-webtester.sed'
doxyreplace SOURCE_BROWSER YES doxyreplace SOURCE_BROWSER YES
doxyreplace INLINE_SOURCES YES doxyreplace INLINE_SOURCES YES
doxyreplace GENERATE_TESTLIST YES
doxyreplace GENERATE_TREEVIEW NO doxyreplace GENERATE_TREEVIEW NO
doxyreplace SEARCHENGINE YES doxyreplace SEARCHENGINE YES
doxyreplace GENERATE_HTML YES doxyreplace GENERATE_HTML YES
@ -237,8 +558,7 @@ Maintainer: @AUTHOR@
Build-Depends: debhelper, pkg-config, autotools-dev, lsb-release $(if testtag AX_USE_DOXYGEN; then echo -n ", doxygen, graphviz"; fi; if testtag AX_USE_CPPUNIT; then echo -n ", libcppunit-dev"; fi; if testtag AX_CXX_QT || testtag AX_CXX_CHECK_QT; then echo -n ", qtbase5-dev | libqt4-dev, qtbase5-dev-tools | qt4-dev-tools"; fi) Build-Depends: debhelper, pkg-config, autotools-dev, lsb-release $(if testtag AX_USE_DOXYGEN; then echo -n ", doxygen, graphviz"; fi; if testtag AX_USE_CPPUNIT; then echo -n ", libcppunit-dev"; fi; if testtag AX_CXX_QT || testtag AX_CXX_CHECK_QT; then echo -n ", qtbase5-dev | libqt4-dev, qtbase5-dev-tools | qt4-dev-tools"; fi)
Package: @PACKAGE_NAME@ Package: @PACKAGE_NAME@
$(if testtag AX_USE_LIBTOOL; then echo "Section: libs"; fi) $(if testtag AX_USE_LIBTOOL; then echo "Section: libs"; fi)Architecture: any
Architecture: any
Depends: \${shlibs:Depends}, \${misc:Depends} Depends: \${shlibs:Depends}, \${misc:Depends}
Description: @DESCRIPTION@ Description: @DESCRIPTION@
@README_DEB@ @README_DEB@
@ -258,29 +578,18 @@ EOF
NEWS NEWS
README README
EOF EOF
to debian/${PACKAGE_NAME}.install <<EOF to --condition AX_USE_LIBTOOL debian/${PACKAGE_NAME}.install <<EOF
usr/bin/*
usr/lib/lib*.so.* usr/lib/lib*.so.*
$(if ! testtag AX_USE_LIBTOOL; then echo "usr/share/doc/${PACKAGE_NAME}/html"; fi)
EOF
to debian/${PACKAGE_NAME}.dirs <<EOF
usr/lib
EOF EOF
if testtag AX_USE_LIBTOOL; then to --condition AX_USE_LIBTOOL debian/${PACKAGE_NAME}-dev.install <<EOF
to debian/${PACKAGE_NAME}-dev.install <<EOF
usr/include/* usr/include/*
usr/lib/lib*.a usr/lib/lib*.a
usr/lib/lib*.so usr/lib/lib*.so
usr/lib/pkgconfig/* usr/lib/pkgconfig/*
usr/lib/*.la usr/lib/*.la
$(if testtag AX_USE_LIBTOOL; then echo "usr/share/doc/${PACKAGE_NAME}/html"; fi) usr/share/doc/${PACKAGE_NAME}/html
EOF EOF
to debian/${PACKAGE_NAME}-dev.dirs <<EOF to --mode "u=rwx,g=rwx,o=rx" debian/rules <<EOF
usr/lib
usr/include
EOF
fi
to debian/rules <<EOF
${HEADER}%: ${HEADER}%:
dh \$@ dh \$@
EOF EOF
@ -288,10 +597,10 @@ EOF
fi fi
if ! test -f makefile.am; then if ! test -f makefile.am; then
SUBDIRS="" SUBDIRS=""
for d in src test doc examples; do for d in src test scripts doc examples; do
test -d $d && SUBDIRS="${SUBDIRS} $d" test -d $d && SUBDIRS="${SUBDIRS} $d"
done done
echo "${HEADER}SUBDIRS =${SUBDIRS}" | to makefile.am echo "${HEADER}SUBDIRS =${SUBDIRS}\n\nMAINTAINERCLEANFILES = makefile.in" | to makefile.am
fi fi
to --condition AX_USE_LIBTOOL src/${PACKAGE_NAME}.pc.in <<EOF to --condition AX_USE_LIBTOOL src/${PACKAGE_NAME}.pc.in <<EOF
${HEADER}prefix=@prefix@ ${HEADER}prefix=@prefix@
@ -321,3 +630,8 @@ run autoconf
if test "$configure" -eq 1; then if test "$configure" -eq 1; then
./configure $* ./configure $*
fi fi
#### Run Make If User Requires ####
if test "$build" -eq 1; then
make
fi

@ -0,0 +1,33 @@
/*! @file
@id $Id$
*/
// 1 2 3 4 5 6 7 8
// 45678901234567890123456789012345678901234567890123456789012345678901234567890
#include <string>
namespace NAMESPACE {
/// get package string which consists of package name and package version
std::string package_string();
/// get package name
std::string package_name();
/// get package version
std::string version();
/// get code build date
std::string build_date();
/// get author, i.e. copyright holder
std::string author();
/// get short package description (1st line of README)
std::string description();
/// get long package description (starting at 3rd line in README)
std::string readme();
/// get package logo file name
std::string logo();
/// get package icon file name
std::string icon();
/// used for <code>what filename</code>
extern const std::string WHAT;
/// used for <code>ident filename</code>
extern const std::string IDENT;
}
Loading…
Cancel
Save