From 9820b0b6e2988e24db798644df999c34e16ef9c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20W=C3=A4ckerlin?= Date: Thu, 7 May 2015 14:37:16 +0000 Subject: [PATCH] fixed mac issues --- ax_check_qt.m4 | 47 ++++- ax_init_standard_project.m4 | 91 +++++++-- bootstrap.sh | 384 ++++++++++++++++++++++++++++++++---- src/version.hxx | 33 ++++ 4 files changed, 506 insertions(+), 49 deletions(-) create mode 100644 src/version.hxx diff --git a/ax_check_qt.m4 b/ax_check_qt.m4 index 5422129..ce7628b 100644 --- a/ax_check_qt.m4 +++ b/ax_check_qt.m4 @@ -1,6 +1,10 @@ # 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 # @@ -25,6 +29,13 @@ # 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_CXX_QT_TOOL], [ if test -z "$HAVE_$1"; then @@ -140,6 +151,40 @@ qrc_%.cxx: %.qrc 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], [ AX_CHECK_QT([$1], [$2], [$3]) if ! test "$HAVE_$1" -eq 1; then diff --git a/ax_init_standard_project.m4 b/ax_init_standard_project.m4 index 9fdc7dd..8dcfb24 100644 --- a/ax_init_standard_project.m4 +++ b/ax_init_standard_project.m4 @@ -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 ## 45678901234567890123456789012345678901234567890123456789012345678901234567890 -m4_define(x_least, m4_esyscmd_s( - LEAST="ERROR-UNDEFINED-REVISION-to-be-built-in-subdirectory-of-svn-checkout" +# define least version number from subversion's revision number: +# it is taken modulo 256 due to a bug on Apple's MacOSX +m4_define(x_version, m4_esyscmd_s( + SVN_REVISION="ERROR-UNDEFINED-REVISION-to-be-built-in-subdirectory-of-svn-checkout" for path in . .. ../..; do if svn info $path 2>&1 > /dev/null; then - 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) break; fi 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 in first line of AUTHORS m4_define(x_bugreport, m4_esyscmd_s( head -1 AUTHORS | \ 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 ]) +# 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], [ sh_add_makefile_target_dep() { 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 ]) +# Same as AC_SUBST, but adds -Dname="value" option to CPPFLAGS +# - parameters: +# $1 = variable name AC_DEFUN([AX_SUBST], [ AC_SUBST([$1]) - tmp_var="${$1//$'\n'/\n}" - AM_CPPFLAGS+=' -D$1='"'${tmp_var//#/\\#}'" + tmp_var=$(echo "${$1}" | awk 1 ORS='\\n') + tmp_var=${tmp_var//\"/\\\"} + tmp_var=${tmp_var//\'/\'\"\'\"\'} + tmp_var=${tmp_var//#/\\#} + AM_CPPFLAGS+=" '-D$1=\"${tmp_var}\"'" 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], [ - AM_CPPFLAGS+=" '-DMAKE_STRING(X)=\#X'" + AM_CPPFLAGS+=" '-DMAKE_STRING(X)=\#X' '-DNAMESPACE=${PACKAGE_NAME}'" AX_SUBST(NUMBERS) AX_SUBST(HOME) README=$(tail -n +3 README) @@ -74,7 +105,7 @@ AC_DEFUN([AX_INIT_STANDARD_PROJECT], [ AX_SUBST(DISTRO) BUILD_NUMBER=${BUILD_NUMBER:-1} AX_SUBST(BUILD_NUMBER) - BUILD_DATE=$(date -R) + BUILD_DATE=$(date +"%Y-%m-%d %H:%M %Z") AX_SUBST(BUILD_DATE) if test -f "${PROJECT_NAME}-logo.png"; then PROJECT_LOGO="${PROJECT_NAME}-logo.png" @@ -91,7 +122,7 @@ AC_DEFUN([AX_INIT_STANDARD_PROJECT], [ test -f makefile.in && cat >> makefile.in <" and "${MY_NAME}" to rebuild 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++ + 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: sed -i 's|\(^'"$1"' *=\) *|\1'" $2"'|g' doc/doxyfile.in;\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" + else + echo -e " \e[31merror\e[0m" + echo -e "\e[1m**** command: $0 $*\e[0m" exit 1 fi } @@ -147,12 +361,17 @@ AX_INIT_STANDARD_PROJECT # requirements, uncomment, what you need: #AX_USE_CXX #AX_USE_LIBTOOL +#AX_USE_SCRIPTS #AX_USE_DOXYGEN #AX_USE_DEBIAN_PACKAGING #AX_USE_RPM_PACKAGING #AX_USE_CPPUNIT #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 AC_OUTPUT EOF @@ -160,17 +379,99 @@ EOF exit 0 fi 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}" | to --condition AX_USE_DOXYGEN doc/makefile.am +echo "${HEADER}MAINTAINERCLEANFILES = makefile.in" | to --condition AX_USE_CXX src/makefile.am +to --condition AX_USE_CXX src/version.hxx < + +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 what filename + extern const std::string WHAT; + /// used for ident filename + extern const std::string IDENT; +} +EOF +to --condition AX_USE_CXX src/version.cxx < + +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 < + +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 what filename + extern const std::string WHAT; + /// used for ident filename + extern const std::string IDENT; +}