From 9d6422708d553d1e892f0ad18053901578d9559f Mon Sep 17 00:00:00 2001 From: Daniel Elstner Date: Sat, 5 Sep 2015 23:12:09 +0200 Subject: [PATCH] Build: Adopt modernized Autotools build system --- Makefile.am | 10 ++- autogen.sh | 32 +------- configure.ac | 130 ++++++++++++++++---------------- contrib/sigrok-cli_cross.nsi.in | 4 +- show.c | 2 +- sigrok-cli.h | 2 +- 6 files changed, 83 insertions(+), 97 deletions(-) diff --git a/Makefile.am b/Makefile.am index c4b2b01..d685d77 100644 --- a/Makefile.am +++ b/Makefile.am @@ -17,7 +17,11 @@ ## along with this program. If not, see . ## -ACLOCAL_AMFLAGS = -I autostuff +ACLOCAL_AMFLAGS = -I m4 +GNUMAKEFLAGS = --no-print-directory + +AM_CPPFLAGS = -D_POSIX_C_SOURCE=200112L +AM_CFLAGS = $(SC_EXTRA_CFLAGS) $(SC_WFLAGS) $(SIGROK_CLI_CFLAGS) bin_PROGRAMS = sigrok-cli @@ -33,9 +37,11 @@ sigrok_cli_SOURCES = \ anykey.c \ options.c +sigrok_cli_LDADD = $(SIGROK_CLI_LIBS) + dist_man_MANS = doc/sigrok-cli.1 -EXTRA_DIST = contrib/sigrok-cli_cross.nsi contrib/sigrok-logo-notext.ico +EXTRA_DIST = contrib/sigrok-logo-notext.ico MAINTAINERCLEANFILES = ChangeLog diff --git a/autogen.sh b/autogen.sh index e7847a1..9901bcb 100755 --- a/autogen.sh +++ b/autogen.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/sh -e ## ## This file is part of the sigrok-cli project. ## @@ -18,31 +18,7 @@ ## along with this program. If not, see . ## -OS=`uname` - -LIBTOOLIZE=libtoolize - -if [ "x$OS" = "xDarwin" ]; then - LIBTOOLIZE=glibtoolize - if [ -d /sw/share/aclocal ]; then - # fink installs aclocal macros here - ACLOCAL_DIR="-I /sw/share/aclocal" - elif [ -d /opt/local/share/aclocal ]; then - # Macports installs aclocal macros here - ACLOCAL_DIR="-I /opt/local/share/aclocal" - elif [ -d /usr/local/share/aclocal ]; then - # Homebrew installs aclocal macros here - ACLOCAL_DIR="-I /usr/local/share/aclocal" - elif [ -d /usr/share/aclocal ]; then - # Xcode installs aclocal macros here - ACLOCAL_DIR="-I /usr/share/aclocal" - fi -fi - -echo "Generating build system..." -${LIBTOOLIZE} --install --copy --quiet || exit 1 -aclocal ${ACLOCAL_DIR} || exit 1 -autoheader || exit 1 -automake --add-missing --copy || exit 1 -autoconf || exit 1 +test -n "$srcdir" || srcdir=`dirname "$0"` +test -n "$srcdir" || srcdir=. +autoreconf --force --install --verbose "$srcdir" diff --git a/configure.ac b/configure.ac index 64f2aa7..1f925fa 100644 --- a/configure.ac +++ b/configure.ac @@ -20,97 +20,101 @@ # We require at least autoconf 2.63 (AC_INIT format changed there). AC_PREREQ([2.63]) -AC_INIT([sigrok-cli], [0.6.0-git], [sigrok-devel@lists.sourceforge.net], +AC_INIT([sigrok-cli], [0.6.0], [sigrok-devel@lists.sourceforge.net], [sigrok-cli], [http://www.sigrok.org]) - AC_CONFIG_SRCDIR([sigrok-cli.h]) - -AC_CONFIG_HEADERS([config.h]) -AC_CONFIG_MACRO_DIR([autostuff]) +AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_AUX_DIR([autostuff]) +AC_CONFIG_HEADERS([config.h]) # We require at least automake 1.11 (needed for 'silent rules'). -AM_INIT_AUTOMAKE([1.11 -Wall -Werror std-options check-news]) -m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) -m4_ifdef([AM_PROG_AR], [AM_PROG_AR]) +AM_INIT_AUTOMAKE([1.11 -Wall -Werror no-define std-options check-news]) +AM_SILENT_RULES([yes]) AH_TOP([#ifndef SIGROK_CLI_CONFIG_H #define SIGROK_CLI_CONFIG_H /* To stop multiple inclusions. */]) AH_BOTTOM([#endif /* SIGROK_CLI_CONFIG_H */]) -# Enable more compiler warnings via -Wall and -Wextra. -CFLAGS="$CFLAGS -Wall -Wextra" +AC_CANONICAL_HOST # Checks for programs. AC_PROG_CC -AC_PROG_CPP AC_PROG_INSTALL -AC_PROG_LN_S -# Initialize libtool. -LT_INIT +# Get compiler versions. +SR_PROG_VERSION([$CC], [sc_cc_version]) + +# Set up the sigrok-cli version defines. +SR_PKG_VERSION_SET([SC_PACKAGE_VERSION], [AC_PACKAGE_VERSION]) + +############################# +## Optional dependencies ## +############################# # Initialize pkg-config. # We require at least 0.22, as "Requires.private" behaviour changed there. PKG_PROG_PKG_CONFIG([0.22]) -# Checks for libraries. -AC_ARG_WITH([libsigrokdecode], - AS_HELP_STRING([--with-libsigrokdecode], - [compile with libsigrokdecode support]), - [WITH_SRD=$withval],[WITH_SRD=yes]) -AM_CONDITIONAL(WITH_SRD, test x$WITH_SRD = xyes) +# Keep track of all checked modules so we can list them at the end. +SR_PKG_CHECK_SUMMARY([sc_pkglibs_summary]) + +# Collect the pkg-config module names of all dependencies. +SR_VAR_OPT_PKG([SC_PKGLIBS]) -AM_PATH_GLIB_2_0([2.28.0], - [CFLAGS="$CFLAGS $GLIB_CFLAGS"; LIBS="$LIBS $GLIB_LIBS"]) +SR_ARG_OPT_PKG([libsigrokdecode], [SRD],, + [libsigrokdecode >= 0.4.0]) -PKG_CHECK_MODULES([libsigrok], [libsigrok >= 0.4.0], - [CFLAGS="$CFLAGS $libsigrok_CFLAGS"; - LIBS="$LIBS $libsigrok_LIBS"]) +###################### +## Feature checks ## +###################### -if test "x$WITH_SRD" = "xyes"; then - PKG_CHECK_MODULES([libsigrokdecode], [libsigrokdecode >= 0.4.0], - [CFLAGS="$CFLAGS $libsigrokdecode_CFLAGS"; - LIBS="$LIBS $libsigrokdecode_LIBS"; - AC_DEFINE(HAVE_SRD, [1], [libsigrokdecode is available.])] - ) -fi +AC_LANG([C]) -# Checks for header files. -# These are already checked: inttypes.h stdint.h stdlib.h string.h unistd.h. +# Enable the C99 standard if possible. +SC_EXTRA_CFLAGS= +SR_CHECK_COMPILE_FLAGS([SC_EXTRA_CFLAGS], [C99], + [-std=c99 -c99 -AC99 -qlanglvl=extc99]) -AC_SUBST(MAKEFLAGS, '--no-print-directory') -AC_SUBST(AM_LIBTOOLFLAGS, '--silent') +SR_ARG_ENABLE_WARNINGS([SC_WFLAGS], [-Wall], [-Wall -Wextra]) + +# Check host characteristics. +AC_SYS_LARGEFILE + +############################## +## Finalize configuration ## +############################## + +# Retrieve the compile and link flags for all modules combined. +# Also, bail out at this point if any module dependency is not met. +PKG_CHECK_MODULES([SIGROK_CLI], + [glib-2.0 >= 2.28.0 libsigrok >= 0.4.0 $SC_PKGLIBS]) + +sc_glib_version=`$PKG_CONFIG --modversion glib-2.0 2>&AS_MESSAGE_LOG_FD` +sc_libsigrok_version=`$PKG_CONFIG --modversion libsigrok 2>&AS_MESSAGE_LOG_FD` AC_CONFIG_FILES([Makefile contrib/sigrok-cli_cross.nsi]) AC_OUTPUT -echo -echo "sigrok-cli configuration summary:" -echo -echo " - Package version: $VERSION" -echo " - Prefix: $prefix" -echo " - Building on: $build" -echo " - Building for: $host" -echo -echo "Detected libraries:" -echo - -# Note: This only works for libs with pkg-config integration. -for lib in "glib-2.0 >= 2.28.0" "libsigrok >= 0.4.0" "libsigrokdecode >= 0.4.0"; do - if test "$lib" = "libsigrokdecode" -a "$WITH_SRD" != "yes" ; then - answer="no" - else - if `$PKG_CONFIG --exists $lib`; then - ver=`$PKG_CONFIG --modversion $lib` - answer="yes ($ver)" - else - answer="no" - fi - fi - echo " - (REQUIRED) $lib: $answer" -done - -echo +cat >&AS_MESSAGE_FD <<_EOF + +sigrok-cli configuration summary: + - Package version................. $SC_PACKAGE_VERSION + - Prefix.......................... $prefix + - Building on..................... $build + - Building for.................... $host + +Compile configuration: + - C compiler...................... $CC + - C compiler version.............. $sc_cc_version + - C compiler flags................ $CFLAGS + - Additional C compiler flags..... $SC_EXTRA_CFLAGS + - C compiler warnings............. $SC_WFLAGS + +Detected libraries (required): + - glib-2.0 >= 2.28.0.............. $sc_glib_version + - libsigrok >= 0.4.0.............. $sc_libsigrok_version +Detected libraries (optional): +$sc_pkglibs_summary +_EOF diff --git a/contrib/sigrok-cli_cross.nsi.in b/contrib/sigrok-cli_cross.nsi.in index ba895a9..0a78f43 100644 --- a/contrib/sigrok-cli_cross.nsi.in +++ b/contrib/sigrok-cli_cross.nsi.in @@ -38,7 +38,7 @@ Name "@PACKAGE_NAME@" # Filename of the installer executable. -OutFile "@PACKAGE_NAME@-@PACKAGE_VERSION@-installer.exe" +OutFile "@PACKAGE_NAME@-@SC_PACKAGE_VERSION@-installer.exe" # Where to install the application. InstallDir "$PROGRAMFILES\sigrok\@PACKAGE_NAME@" @@ -189,7 +189,7 @@ Section "@PACKAGE_NAME@ (required)" Section1 WriteRegStr HKLM "${REGSTR}" "URLUpdateInfo" \ "http://sigrok.org/wiki/Downloads" WriteRegStr HKLM "${REGSTR}" "URLInfoAbout" "http://sigrok.org" - WriteRegStr HKLM "${REGSTR}" "DisplayVersion" "@PACKAGE_VERSION@" + WriteRegStr HKLM "${REGSTR}" "DisplayVersion" "@SC_PACKAGE_VERSION@" WriteRegStr HKLM "${REGSTR}" "Contact" \ "sigrok-devel@lists.sourceforge.org" WriteRegStr HKLM "${REGSTR}" "Comments" \ diff --git a/show.c b/show.c index b786016..b191f0c 100644 --- a/show.c +++ b/show.c @@ -68,7 +68,7 @@ void show_version(void) struct srd_decoder *dec; #endif - printf("sigrok-cli %s\n\n", VERSION); + printf("sigrok-cli %s\n\n", SC_PACKAGE_VERSION_STRING); printf("Using libsigrok %s (lib version %s).\n", sr_package_version_string_get(), sr_lib_version_string_get()); diff --git a/sigrok-cli.h b/sigrok-cli.h index eaee7e6..443d4f6 100644 --- a/sigrok-cli.h +++ b/sigrok-cli.h @@ -20,7 +20,7 @@ #ifndef SIGROK_CLI_SIGROK_CLI_H #define SIGROK_CLI_SIGROK_CLI_H -#include "config.h" +#include #ifdef HAVE_SRD /* First, so we avoid a _POSIX_C_SOURCE warning. */ #include -- 2.30.2