From b5552a3ea76b3e229f40a06d32a5860b0e9e2217 Mon Sep 17 00:00:00 2001 From: Simon McVittie Date: Tue, 24 Apr 2007 13:05:17 +0100 Subject: [PATCH] Refactor build system: * Use autoreconf to simplify autogen.sh considerably * Use AC_CONFIG_MACRO_DIR and aclocal -I to pick up macros from m4/ * Drop acinclude.m4 in favour of putting our macros in m4/ --- Makefile.am | 4 +- acinclude.m4 | 109 ------------------------------- autogen.sh | 144 +++++++++++++++-------------------------- configure.ac | 7 +- m4/Makefile.am | 5 ++ m4/am-check-pymod.m4 | 37 +++++++++++ m4/am-check-python-headers.m4 | 24 +++++++ m4/dbus-py-add-rst2htmlflag.m4 | 20 ++++++ m4/jh-add-cflag.m4 | 23 +++++++ 9 files changed, 166 insertions(+), 207 deletions(-) delete mode 100644 acinclude.m4 rewrite autogen.sh (65%) create mode 100644 m4/Makefile.am create mode 100644 m4/am-check-pymod.m4 create mode 100644 m4/am-check-python-headers.m4 create mode 100644 m4/dbus-py-add-rst2htmlflag.m4 create mode 100644 m4/jh-add-cflag.m4 diff --git a/Makefile.am b/Makefile.am index f687c84..429a99e 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,5 +1,7 @@ +ACLOCAL_AMFLAGS = -I m4 + # the api, doc, include subdirs don't need their own Makefile.am -SUBDIRS = _dbus_bindings _dbus_glib_bindings dbus examples test +SUBDIRS = _dbus_bindings _dbus_glib_bindings dbus examples m4 test CLEANFILES = EXTRA_DIST = dbus-python.pc.in AUTHORS COPYING ChangeLog \ diff --git a/acinclude.m4 b/acinclude.m4 deleted file mode 100644 index af7e69a..0000000 --- a/acinclude.m4 +++ /dev/null @@ -1,109 +0,0 @@ -## this one is commonly used with AM_PATH_PYTHONDIR ... -dnl AM_CHECK_PYMOD(MODNAME [,SYMBOL [,ACTION-IF-FOUND [,ACTION-IF-NOT-FOUND]]]) -dnl Check if a module containing a given symbol is visible to python. -AC_DEFUN([AM_CHECK_PYMOD], -[AC_REQUIRE([AM_PATH_PYTHON]) -py_mod_var=`echo $1['_']$2 | sed 'y%./+-%__p_%'` -AC_MSG_CHECKING(for ifelse([$2],[],,[$2 in ])python module $1) -AC_CACHE_VAL(py_cv_mod_$py_mod_var, [ -ifelse([$2],[], [prog=" -import sys -try: - import $1 -except ImportError: - sys.exit(1) -except: - sys.exit(0) -sys.exit(0)"], [prog=" -import $1 -$1.$2"]) -if $PYTHON -c "$prog" 1>&AC_FD_CC 2>&AC_FD_CC - then - eval "py_cv_mod_$py_mod_var=yes" - else - eval "py_cv_mod_$py_mod_var=no" - fi -]) -py_val=`eval "echo \`echo '$py_cv_mod_'$py_mod_var\`"` -if test "x$py_val" != xno; then - AC_MSG_RESULT(yes) - ifelse([$3], [],, [$3 -])dnl -else - AC_MSG_RESULT(no) - ifelse([$4], [],, [$4 -])dnl -fi -]) - -dnl a macro to check for ability to create python extensions -dnl AM_CHECK_PYTHON_HEADERS([ACTION-IF-POSSIBLE], [ACTION-IF-NOT-POSSIBLE]) -dnl function also defines PYTHON_INCLUDES -AC_DEFUN([AM_CHECK_PYTHON_HEADERS], -[AC_REQUIRE([AM_PATH_PYTHON]) -AC_MSG_CHECKING(for headers required to compile python extensions) -dnl deduce PYTHON_INCLUDES -py_prefix=`$PYTHON -c "import sys; print sys.prefix"` -py_exec_prefix=`$PYTHON -c "import sys; print sys.exec_prefix"` -PYTHON_INCLUDES="-I${py_prefix}/include/python${PYTHON_VERSION}" -if test "$py_prefix" != "$py_exec_prefix"; then - PYTHON_INCLUDES="$PYTHON_INCLUDES -I${py_exec_prefix}/include/python${PYTHON_VERSION}" -fi -AC_SUBST(PYTHON_INCLUDES) -dnl check if the headers exist: -save_CPPFLAGS="$CPPFLAGS" -CPPFLAGS="$CPPFLAGS $PYTHON_INCLUDES" -AC_TRY_CPP([#include ],dnl -[AC_MSG_RESULT(found) -$1],dnl -[AC_MSG_RESULT(not found) -$2]) -CPPFLAGS="$save_CPPFLAGS" -]) - -dnl -dnl JH_ADD_CFLAG(FLAG) -dnl checks whether the C compiler supports the given flag, and if so, adds -dnl it to $CFLAGS. If the flag is already present in the list, then the -dnl check is not performed. -AC_DEFUN([JH_ADD_CFLAG], -[ -case " $CFLAGS " in -*@<:@\ \ @:>@$1@<:@\ \ @:>@*) - ;; -*) - save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $1" - AC_MSG_CHECKING([whether [$]CC understands $1]) - AC_TRY_COMPILE([], [], [jh_has_option=yes], [jh_has_option=no]) - AC_MSG_RESULT($jh_has_option) - if test $jh_has_option = no; then - CFLAGS="$save_CFLAGS" - fi - ;; -esac]) - -dnl -dnl DBUS_PY_ADD_RST2HTMLFLAG(FLAG) -dnl checks whether rst2html supports the given flag, and if so, adds -dnl it to $RST2HTMLFLAGS. Same as JH_ADD_CFLAG, really. -AC_DEFUN([DBUS_PY_ADD_RST2HTMLFLAG], -[ -case " $RST2HTMLFLAGS " in -*@<:@\ \ @:>@$1@<:@\ \ @:>@*) - ;; -*) - save_RST2HTMLFLAGS="$RST2HTMLFLAGS" - RST2HTMLFLAGS="$RST2HTMLFLAGS $1" - AC_MSG_CHECKING([whether [$]RST2HTML understands $1]) - if $RST2HTML --strict $RST2HTMLFLAGS /dev/null > /dev/null 2>/dev/null; then - dbuspy_has_option=yes - else - dbuspy_has_option=no - fi - AC_MSG_RESULT($dbuspy_has_option) - if test $dbuspy_has_option = no; then - RST2HTMLFLAGS="$save_RST2HTMLFLAGS" - fi - ;; -esac]) diff --git a/autogen.sh b/autogen.sh dissimilarity index 65% index 1d8a759..7e9e719 100755 --- a/autogen.sh +++ b/autogen.sh @@ -1,93 +1,51 @@ -#!/bin/sh -# Run this to generate all the initial makefiles, etc. - -srcdir=`dirname $0` -test -z "$srcdir" && srcdir=. - -ORIGDIR=`pwd` -cd $srcdir - -PROJECT=dbus-python -TEST_TYPE=-f -FILE=dbus-python.pc.in - -DIE=0 - -(autoconf --version) < /dev/null > /dev/null 2>&1 || { - echo - echo "You must have autoconf installed to compile $PROJECT." - echo "Download the appropriate package for your distribution," - echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/" - DIE=1 -} - -AUTOMAKE=automake-1.9 -ACLOCAL=aclocal-1.9 - -($AUTOMAKE --version) < /dev/null > /dev/null 2>&1 || { - AUTOMAKE=automake - ACLOCAL=aclocal -} - -($AUTOMAKE --version) < /dev/null > /dev/null 2>&1 || { - echo - echo "You must have automake installed to compile $PROJECT." - echo "Get ftp://ftp.cygnus.com/pub/home/tromey/automake-1.2d.tar.gz" - echo "(or a newer version if it is available)" - DIE=1 -} - -(libtoolize --version) < /dev/null > /dev/null 2>&1 || { - echo - echo "You must have libtoolize installed to compile $PROJECT." - echo "Install the libtool package from ftp.gnu.org or a mirror." - DIE=1 -} - -if test "$DIE" -eq 1; then - exit 1 -fi - -test $TEST_TYPE $FILE || { - echo "You must run this script in the top-level $PROJECT directory" - exit 1 -} - -if test -z "$*"; then - echo "I am going to run ./configure with no arguments - if you wish " - echo "to pass any to it, please specify them on the $0 command line." -fi - -libtoolize --copy --force - -echo $ACLOCAL $ACLOCAL_FLAGS -$ACLOCAL $ACLOCAL_FLAGS - -## optionally feature autoheader -(autoheader --version) < /dev/null > /dev/null 2>&1 && autoheader - -$AUTOMAKE -a $am_opt -autoconf || echo "autoconf failed - version 2.5x is probably required" - -cd $ORIGDIR - -run_configure=true -for arg in $*; do - case $arg in - --no-configure) - run_configure=false - ;; - *) - ;; - esac -done - -if $run_configure; then - $srcdir/configure --enable-maintainer-mode --config-cache "$@" - echo - echo "Now type 'make' to compile $PROJECT." -else - echo - echo "Now run 'configure' and 'make' to compile $PROJECT." -fi - +#!/bin/sh +# Run this to generate all the initial makefiles, etc. + +srcdir=`dirname $0` +test -z "$srcdir" && srcdir=. + +ORIGDIR=`pwd` +cd $srcdir + +PROJECT=dbus-python + +test -f dbus-python.pc.in || { + echo "You must run this script in the top-level $PROJECT directory">&2 + exit 1 +} + +(autoreconf --version) < /dev/null > /dev/null 2>&1 || { + echo + echo "You must have autoconf, automake and libtoolize installed">&2 + echo "to compile $PROJECT. Download the appropriate packages for">&2 + echo "your distribution, or get the source tarball at ">&2 + echo "ftp://ftp.gnu.org/pub/gnu/">&2 + exit 1 +} + +if test -z "$*"; then + echo "I am going to run ./configure with no arguments - if you wish " + echo "to pass any to it, please specify them on the $0 command line." +fi + +echo "Running autoreconf -f -i..." +autoreconf -f -i + +cd $ORIGDIR + +run_configure=true +for arg in $*; do + case $arg in + --no-configure) + run_configure=false + ;; + *) + ;; + esac +done + +if $run_configure; then + $srcdir/configure --enable-maintainer-mode --config-cache "$@" + echo + echo "Now run 'make' to compile $PROJECT." +fi diff --git a/configure.ac b/configure.ac index 8d8371a..275371f 100644 --- a/configure.ac +++ b/configure.ac @@ -17,7 +17,8 @@ dnl versions of packages we require ... dnl m4_define(glib_required_version, 2.8.0) AC_INIT(dbus-python, dbus_python_version, - [http://bugzilla.gnome.org/enter_bug.cgi?product=dbus&component=python]) + [http://bugs.freedesktop.org/enter_bug.cgi?product=dbus&component=python]) +AC_CONFIG_MACRO_DIR([m4]) AC_DEFINE(DBUS_PYTHON_MAJOR_VERSION, dbus_python_major_version, [dbus-python major version]) AC_SUBST(DBUS_PYTHON_MAJOR_VERSION, dbus_python_major_version) @@ -31,9 +32,6 @@ AM_CONFIG_HEADER(config.h) AM_INIT_AUTOMAKE -dnl put the ACLOCAL flags in the makefile -ACLOCAL="$ACLOCAL $ACLOCAL_FLAGS" - AC_CANONICAL_BUILD AC_CANONICAL_HOST @@ -151,6 +149,7 @@ AC_CONFIG_FILES( dbus/_version.py doc/tutorial.txt examples/Makefile + m4/Makefile test/Makefile test/tmp-session-bus.conf test/TestSuitePythonService.service) diff --git a/m4/Makefile.am b/m4/Makefile.am new file mode 100644 index 0000000..9cbf67c --- /dev/null +++ b/m4/Makefile.am @@ -0,0 +1,5 @@ +EXTRA_DIST = \ + am-check-pymod.m4 \ + am-check-python-headers.m4 \ + dbus-py-add-rst2htmlflag.m4 \ + jh-add-cflag.m4 diff --git a/m4/am-check-pymod.m4 b/m4/am-check-pymod.m4 new file mode 100644 index 0000000..22e1ae2 --- /dev/null +++ b/m4/am-check-pymod.m4 @@ -0,0 +1,37 @@ +## this one is commonly used with AM_PATH_PYTHONDIR ... +dnl AM_CHECK_PYMOD(MODNAME [,SYMBOL [,ACTION-IF-FOUND [,ACTION-IF-NOT-FOUND]]]) +dnl Check if a module containing a given symbol is visible to python. +AC_DEFUN([AM_CHECK_PYMOD], +[AC_REQUIRE([AM_PATH_PYTHON]) +py_mod_var=`echo $1['_']$2 | sed 'y%./+-%__p_%'` +AC_MSG_CHECKING(for ifelse([$2],[],,[$2 in ])python module $1) +AC_CACHE_VAL(py_cv_mod_$py_mod_var, [ +ifelse([$2],[], [prog=" +import sys +try: + import $1 +except ImportError: + sys.exit(1) +except: + sys.exit(0) +sys.exit(0)"], [prog=" +import $1 +$1.$2"]) +if $PYTHON -c "$prog" 1>&AC_FD_CC 2>&AC_FD_CC + then + eval "py_cv_mod_$py_mod_var=yes" + else + eval "py_cv_mod_$py_mod_var=no" + fi +]) +py_val=`eval "echo \`echo '$py_cv_mod_'$py_mod_var\`"` +if test "x$py_val" != xno; then + AC_MSG_RESULT(yes) + ifelse([$3], [],, [$3 +])dnl +else + AC_MSG_RESULT(no) + ifelse([$4], [],, [$4 +])dnl +fi +]) diff --git a/m4/am-check-python-headers.m4 b/m4/am-check-python-headers.m4 new file mode 100644 index 0000000..1e0f2b6 --- /dev/null +++ b/m4/am-check-python-headers.m4 @@ -0,0 +1,24 @@ +dnl a macro to check for ability to create python extensions +dnl AM_CHECK_PYTHON_HEADERS([ACTION-IF-POSSIBLE], [ACTION-IF-NOT-POSSIBLE]) +dnl function also defines PYTHON_INCLUDES +AC_DEFUN([AM_CHECK_PYTHON_HEADERS], +[AC_REQUIRE([AM_PATH_PYTHON]) +AC_MSG_CHECKING(for headers required to compile python extensions) +dnl deduce PYTHON_INCLUDES +py_prefix=`$PYTHON -c "import sys; print sys.prefix"` +py_exec_prefix=`$PYTHON -c "import sys; print sys.exec_prefix"` +PYTHON_INCLUDES="-I${py_prefix}/include/python${PYTHON_VERSION}" +if test "$py_prefix" != "$py_exec_prefix"; then + PYTHON_INCLUDES="$PYTHON_INCLUDES -I${py_exec_prefix}/include/python${PYTHON_VERSION}" +fi +AC_SUBST(PYTHON_INCLUDES) +dnl check if the headers exist: +save_CPPFLAGS="$CPPFLAGS" +CPPFLAGS="$CPPFLAGS $PYTHON_INCLUDES" +AC_TRY_CPP([#include ],dnl +[AC_MSG_RESULT(found) +$1],dnl +[AC_MSG_RESULT(not found) +$2]) +CPPFLAGS="$save_CPPFLAGS" +]) diff --git a/m4/dbus-py-add-rst2htmlflag.m4 b/m4/dbus-py-add-rst2htmlflag.m4 new file mode 100644 index 0000000..75fa78c --- /dev/null +++ b/m4/dbus-py-add-rst2htmlflag.m4 @@ -0,0 +1,20 @@ +dnl JH_ADD_CFLAG(FLAG) +dnl checks whether the C compiler supports the given flag, and if so, adds +dnl it to $CFLAGS. If the flag is already present in the list, then the +dnl check is not performed. +AC_DEFUN([JH_ADD_CFLAG], +[ +case " $CFLAGS " in +*@<:@\ \ @:>@$1@<:@\ \ @:>@*) + ;; +*) + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $1" + AC_MSG_CHECKING([whether [$]CC understands $1]) + AC_TRY_COMPILE([], [], [jh_has_option=yes], [jh_has_option=no]) + AC_MSG_RESULT($jh_has_option) + if test $jh_has_option = no; then + CFLAGS="$save_CFLAGS" + fi + ;; +esac]) diff --git a/m4/jh-add-cflag.m4 b/m4/jh-add-cflag.m4 new file mode 100644 index 0000000..88b4de0 --- /dev/null +++ b/m4/jh-add-cflag.m4 @@ -0,0 +1,23 @@ +dnl DBUS_PY_ADD_RST2HTMLFLAG(FLAG) +dnl checks whether rst2html supports the given flag, and if so, adds +dnl it to $RST2HTMLFLAGS. Same as JH_ADD_CFLAG, really. +AC_DEFUN([DBUS_PY_ADD_RST2HTMLFLAG], +[ +case " $RST2HTMLFLAGS " in +*@<:@\ \ @:>@$1@<:@\ \ @:>@*) + ;; +*) + save_RST2HTMLFLAGS="$RST2HTMLFLAGS" + RST2HTMLFLAGS="$RST2HTMLFLAGS $1" + AC_MSG_CHECKING([whether [$]RST2HTML understands $1]) + if $RST2HTML --strict $RST2HTMLFLAGS /dev/null > /dev/null 2>/dev/null; then + dbuspy_has_option=yes + else + dbuspy_has_option=no + fi + AC_MSG_RESULT($dbuspy_has_option) + if test $dbuspy_has_option = no; then + RST2HTMLFLAGS="$save_RST2HTMLFLAGS" + fi + ;; +esac]) -- 2.11.4.GIT