From b71035ce89480ed66ce855dd0923a5f3371aa0cd Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Sun, 20 May 2012 23:58:07 +0200 Subject: build-sys: modernize build system --- Makefile.am | 3 ++ autogen.sh | 72 +++++++++--------------------- configure.ac | 125 +++++++++++++++++++++++++++++++++++++--------------- m4/attributes.m4 | 115 +++++++++++++++++++++++------------------------ strpool/Makefile.am | 5 +-- 5 files changed, 168 insertions(+), 152 deletions(-) diff --git a/Makefile.am b/Makefile.am index 2fdfc3d..bc45ad0 100644 --- a/Makefile.am +++ b/Makefile.am @@ -16,6 +16,9 @@ # License along with libatasmart. If not, If not, see # . +AM_CFLAGS = $(WARNINGFLAGS) +AM_LDFLAGS = $(GCLDFLAGS) + dist_doc_DATA = README EXTRA_DIST = \ diff --git a/autogen.sh b/autogen.sh index d9bef57..815cc01 100755 --- a/autogen.sh +++ b/autogen.sh @@ -18,65 +18,33 @@ # License along with libatasmart; If not, see # . -AM_VERSION=1.11 -AC_VERSION=2.63 - -run_versioned() { - local P - local V - - V=$(echo "$2" | sed -e 's,\.,,g') - - if [ -e "`which $1$V 2> /dev/null`" ] ; then - P="$1$V" - else - if [ -e "`which $1-$2 2> /dev/null`" ] ; then - P="$1-$2" - else - P="$1" - fi - fi - - shift 2 - "$P" "$@" -} - -set -ex - if [ -f .git/hooks/pre-commit.sample -a ! -f .git/hooks/pre-commit ] ; then - cp -p .git/hooks/pre-commit.sample .git/hooks/pre-commit && \ - chmod +x .git/hooks/pre-commit && \ - echo "Activated pre-commit hook." + cp -p .git/hooks/pre-commit.sample .git/hooks/pre-commit && \ + chmod +x .git/hooks/pre-commit && \ + echo "Activated pre-commit hook." fi -if type -p colorgcc > /dev/null ; then - export CC=colorgcc -fi +autoreconf --force --install --symlink libdir() { - echo $(cd $1/$(gcc -print-multi-os-directory); pwd) + echo $(cd $1/$(gcc -print-multi-os-directory); pwd) } -if [ "x$1" = "xam" ] ; then - run_versioned automake "$AM_VERSION" -a -c --foreign - ./config.status -else - rm -rf autom4te.cache - rm -f config.cache +args="\ +--sysconfdir=/etc \ +--localstatedir=/var \ +--libdir=$(libdir /usr/lib) \ +--libexecdir=/usr/lib" - libtoolize -c --force - run_versioned aclocal "$AM_VERSION" -I m4 - run_versioned autoconf "$AC_VERSION" -Wall - run_versioned autoheader "$AC_VERSION" - run_versioned automake "$AM_VERSION" --copy --foreign --add-missing - - if [ "x$1" != "xac" ]; then - CFLAGS="$CFLAGS -g -O0" ./configure \ - --sysconfdir=/etc \ - --localstatedir=/var \ - --libexecdir=/usr/lib \ - --libdir=$(libdir /usr/local/lib) \ - "$@" +if [ "x$1" == "xc" ]; then + ./configure CFLAGS='-g -O0 -Wp,-U_FORTIFY_SOURCE' $args make clean - fi +else + echo + echo "----------------------------------------------------------------" + echo "Initialized build system. For a common configuration please run:" + echo "----------------------------------------------------------------" + echo + echo "./configure CFLAGS='-g -O0 -Wp,-U_FORTIFY_SOURCE' $args" + echo fi diff --git a/configure.ac b/configure.ac index 1e1ce5a..b49d131 100644 --- a/configure.ac +++ b/configure.ac @@ -1,42 +1,45 @@ -dnl -*- Autoconf -*- -dnl Process this file with autoconf to produce a configure script. - -dnl This file is part of libatasmart. -dnl -dnl Copyright 2008 Lennart Poettering -dnl -dnl libatasmart is free software; you can redistribute it and/or modify -dnl it under the terms of the GNU Lesser General Public License as -dnl published by the Free Software Foundation, either version 2.1 of the -dnl License, or (at your option) any later version. -dnl -dnl libatasmart is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl Lesser General Public License for more details. -dnl -dnl You should have received a copy of the GNU Lesser General Public -dnl License along with libatasmart. If not, If not, see -dnl . - -AC_PREREQ(2.63) - -AC_INIT([libatasmart], 0.18, [mzyvongnfzneg (at) 0pointer (dot) net]) +# -*- Autoconf -*- +# Process this file with autoconf to produce a configure script. + +# This file is part of libatasmart. +# +# Copyright 2008 Lennart Poettering +# +# libatasmart is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as +# published by the Free Software Foundation, either version 2.1 of the +# License, or (at your option) any later version. +# +# libatasmart is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with libatasmart. If not, If not, see +# . + +AC_PREREQ(2.68) + +AC_INIT([libatasmart], + [0.19], + [mzyvongnfzneg (at) 0pointer (dot) net], + [libatasmart], + [http://git.0pointer.de/?p=libatasmart.git]) + AC_CONFIG_SRCDIR([atasmart.c]) AC_CONFIG_HEADERS([config.h]) AC_CONFIG_MACRO_DIR(m4) +AC_CONFIG_AUX_DIR([build-aux]) -AM_INIT_AUTOMAKE([foreign 1.11 -Wall -Wno-portability silent-rules tar-pax]) - -AC_SUBST(PACKAGE_URL, [http://git.0pointer.de/?p=libatasmart.git]) +AM_INIT_AUTOMAKE([foreign 1.11 -Wall -Wno-portability silent-rules tar-pax no-dist-gzip dist-xz]) +AM_SILENT_RULES([yes]) AC_SUBST(LIBATASMART_VERSION_INFO, [4:4:0]) -AM_SILENT_RULES([yes]) - if type -p stow > /dev/null && test -d /usr/local/stow ; then - AC_MSG_NOTICE([*** Found /usr/local/stow: default install prefix set to /usr/local/stow/${PACKAGE_NAME}-${PACKAGE_VERSION} ***]) - ac_default_prefix="/usr/local/stow/${PACKAGE_NAME}-${PACKAGE_VERSION}" + AC_MSG_NOTICE([*** Found /usr/local/stow: default install prefix set to /usr/local/stow/${PACKAGE_NAME}-${PACKAGE_VERSION} ***]) + ac_default_prefix="/usr/local/stow/${PACKAGE_NAME}-${PACKAGE_VERSION}" fi AC_PROG_CC @@ -48,13 +51,63 @@ AX_CC_FOR_BUILD AC_USE_SYSTEM_EXTENSIONS AC_SYS_LARGEFILE -AC_PROG_LIBTOOL - -dnl Check compiler flags -CC_CHECK_CFLAGS_APPEND([-Wall -W -Wextra -pedantic -pipe -Wformat -Wold-style-definition -Wdeclaration-after-statement -Wfloat-equal -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wredundant-decls -Wmissing-noreturn -Wshadow -Wendif-labels -Wpointer-arith -Wcast-align -Wwrite-strings -Winline -Wno-unused-parameter -ffast-math]) - +CC_CHECK_FLAGS_APPEND([with_cflags], [CFLAGS], [\ + -pipe \ + -Wall \ + -W \ + -Wextra \ + -Winline \ + -Wvla \ + -Wundef \ + -Wformat=2 \ + -Wlogical-op \ + -Wsign-compare \ + -Wformat-security \ + -Wmissing-include-dirs \ + -Wformat-nonliteral \ + -Wold-style-definition \ + -Wpointer-arith \ + -Winit-self \ + -Wdeclaration-after-statement \ + -Wfloat-equal \ + -Wmissing-prototypes \ + -Wstrict-prototypes \ + -Wredundant-decls \ + -Wmissing-declarations \ + -Wmissing-noreturn \ + -Wshadow \ + -Wendif-labels \ + -Wcast-align \ + -Wstrict-aliasing=2 \ + -Wwrite-strings \ + -Wno-long-long \ + -Wno-overlength-strings \ + -Wno-unused-parameter \ + -Wno-missing-field-initializers \ + -Wno-unused-result \ + -Wunsafe-loop-optimizations \ + -Wpacked \ + -Werror=overflow \ + -Wp,-D_FORTIFY_SOURCE=2 \ + -ffast-math \ + -fno-common \ + -fdiagnostics-show-option \ + -fno-strict-aliasing \ + -ffunction-sections \ + -fdata-sections]) +AC_SUBST([WARNINGFLAGS], $with_cflags) + +CC_CHECK_FLAGS_APPEND([with_ldflags], [LDFLAGS], [\ + -Wl,--as-needed \ + -Wl,--gc-sections]) +AC_SUBST([GCLDFLAGS], $with_ldflags) + +PKG_PROG_PKG_CONFIG PKG_CHECK_MODULES([LIBUDEV], [libudev >= 143]) +LT_PREREQ(2.2) +LT_INIT([disable-static]) + dnl################################### dnl# Output # dnl################################### diff --git a/m4/attributes.m4 b/m4/attributes.m4 index 13eb046..e354375 100644 --- a/m4/attributes.m4 +++ b/m4/attributes.m4 @@ -1,6 +1,7 @@ dnl Macros to check the presence of generic (non-typed) symbols. -dnl Copyright (c) 2006-2007 Diego Pettenò -dnl Copyright (c) 2006-2007 xine project +dnl Copyright (c) 2006-2008 Diego Pettenò +dnl Copyright (c) 2006-2008 xine project +dnl Copyright (c) 2012 Lucas De Marchi dnl dnl This program is free software; you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by @@ -32,52 +33,28 @@ dnl distribute a modified version of the Autoconf Macro, you may extend dnl this special exception to the GPL to apply to your modified version as dnl well. -dnl Check if the flag is supported by compiler -dnl CC_CHECK_CFLAGS_SILENT([FLAG], [ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND]) - -AC_DEFUN([CC_CHECK_CFLAGS_SILENT], [ - AC_CACHE_VAL(AS_TR_SH([cc_cv_cflags_$1]), - [ac_save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS $1" - AC_LINK_IFELSE([AC_LANG_SOURCE([int main() { return 0; }])], - [eval "AS_TR_SH([cc_cv_cflags_$1])='yes'"], - [eval "AS_TR_SH([cc_cv_cflags_$1])='no'"]) - CFLAGS="$ac_save_CFLAGS" - ]) - - AS_IF([eval test x$]AS_TR_SH([cc_cv_cflags_$1])[ = xyes], - [$2], [$3]) -]) - -dnl Check if the flag is supported by compiler (cacheable) -dnl CC_CHECK_CFLAGS([FLAG], [ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND]) - -AC_DEFUN([CC_CHECK_CFLAGS], [ - AC_CACHE_CHECK([if $CC supports $1 flag], - AS_TR_SH([cc_cv_cflags_$1]), - CC_CHECK_CFLAGS_SILENT([$1]) dnl Don't execute actions here! - ) - - AS_IF([eval test x$]AS_TR_SH([cc_cv_cflags_$1])[ = xyes], - [$2], [$3]) -]) - -dnl CC_CHECK_CFLAG_APPEND(FLAG, [action-if-found], [action-if-not-found]) -dnl Check for CFLAG and appends them to CFLAGS if supported -AC_DEFUN([CC_CHECK_CFLAG_APPEND], [ - AC_CACHE_CHECK([if $CC supports $1 flag], - AS_TR_SH([cc_cv_cflags_$1]), - CC_CHECK_CFLAGS_SILENT([$1]) dnl Don't execute actions here! - ) - - AS_IF([eval test x$]AS_TR_SH([cc_cv_cflags_$1])[ = xyes], - [CFLAGS="$CFLAGS $1"; $2], [$3]) +dnl Check if FLAG in ENV-VAR is supported by compiler and append it +dnl to WHERE-TO-APPEND variable +dnl CC_CHECK_FLAG_APPEND([WHERE-TO-APPEND], [ENV-VAR], [FLAG]) + +AC_DEFUN([CC_CHECK_FLAG_APPEND], [ + AC_CACHE_CHECK([if $CC supports flag $3 in envvar $2], + AS_TR_SH([cc_cv_$2_$3]), + [eval "AS_TR_SH([cc_save_$2])='${$2}'" + eval "AS_TR_SH([$2])='$3'" + AC_COMPILE_IFELSE([AC_LANG_SOURCE([int a = 0; int main(void) { return a; } ])], + [eval "AS_TR_SH([cc_cv_$2_$3])='yes'"], + [eval "AS_TR_SH([cc_cv_$2_$3])='no'"]) + eval "AS_TR_SH([$2])='$cc_save_$2'"]) + + AS_IF([eval test x$]AS_TR_SH([cc_cv_$2_$3])[ = xyes], + [eval "$1='${$1} $3'"]) ]) -dnl CC_CHECK_CFLAGS_APPEND([FLAG1 FLAG2], [action-if-found], [action-if-not]) -AC_DEFUN([CC_CHECK_CFLAGS_APPEND], [ - for flag in $1; do - CC_CHECK_CFLAG_APPEND($flag, [$2], [$3]) +dnl CC_CHECK_FLAGS_APPEND([WHERE-TO-APPEND], [ENV-VAR], [FLAG1 FLAG2]) +AC_DEFUN([CC_CHECK_FLAGS_APPEND], [ + for flag in $3; do + CC_CHECK_FLAG_APPEND($1, $2, $flag) done ]) @@ -89,7 +66,7 @@ AC_DEFUN([CC_CHECK_LDFLAGS], [ AS_TR_SH([cc_cv_ldflags_$1]), [ac_save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $1" - AC_LINK_IFELSE([AC_LANG_SOURCE([int main() { return 1; }])], + AC_LINK_IFELSE([int main() { return 1; }], [eval "AS_TR_SH([cc_cv_ldflags_$1])='yes'"], [eval "AS_TR_SH([cc_cv_ldflags_$1])="]) LDFLAGS="$ac_save_LDFLAGS" @@ -99,6 +76,31 @@ AC_DEFUN([CC_CHECK_LDFLAGS], [ [$2], [$3]) ]) +dnl define the LDFLAGS_NOUNDEFINED variable with the correct value for +dnl the current linker to avoid undefined references in a shared object. +AC_DEFUN([CC_NOUNDEFINED], [ + dnl We check $host for which systems to enable this for. + AC_REQUIRE([AC_CANONICAL_HOST]) + + case $host in + dnl FreeBSD (et al.) does not complete linking for shared objects when pthreads + dnl are requested, as different implementations are present; to avoid problems + dnl use -Wl,-z,defs only for those platform not behaving this way. + *-freebsd* | *-openbsd*) ;; + *) + dnl First of all check for the --no-undefined variant of GNU ld. This allows + dnl for a much more readable commandline, so that people can understand what + dnl it does without going to look for what the heck -z defs does. + for possible_flags in "-Wl,--no-undefined" "-Wl,-z,defs"; do + CC_CHECK_LDFLAGS([$possible_flags], [LDFLAGS_NOUNDEFINED="$possible_flags"]) + break + done + ;; + esac + + AC_SUBST([LDFLAGS_NOUNDEFINED]) +]) + dnl Check for a -Werror flag or equivalent. -Werror is the GCC dnl and ICC flag that tells the compiler to treat all the warnings dnl as fatal. We usually need this option to make sure that some @@ -140,16 +142,7 @@ AC_DEFUN([CC_CHECK_ATTRIBUTE], [ AC_DEFUN([CC_ATTRIBUTE_CONSTRUCTOR], [ CC_CHECK_ATTRIBUTE( [constructor],, - [extern void foo(); - void __attribute__((constructor)) ctor() { foo(); }], - [$1], [$2]) -]) - -AC_DEFUN([CC_ATTRIBUTE_DESTRUCTOR], [ - CC_CHECK_ATTRIBUTE( - [destructor],, - [extern void foo(); - void __attribute__((destructor)) dtor() { foo(); }], + [void __attribute__((constructor)) ctor() { int a; }], [$1], [$2]) ]) @@ -255,11 +248,11 @@ AC_DEFUN([CC_FUNC_EXPECT], [ [cc_cv_func_expect], [ac_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $cc_cv_werror" - AC_COMPILE_IFELSE( + AC_COMPILE_IFELSE([AC_LANG_SOURCE( [int some_function() { int a = 3; return (int)__builtin_expect(a, 3); - }], + }])], [cc_cv_func_expect=yes], [cc_cv_func_expect=no]) CFLAGS="$ac_save_CFLAGS" @@ -279,11 +272,11 @@ AC_DEFUN([CC_ATTRIBUTE_ALIGNED], [ [ac_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $cc_cv_werror" for cc_attribute_align_try in 64 32 16 8 4 2; do - AC_COMPILE_IFELSE([ + AC_COMPILE_IFELSE([AC_LANG_SOURCE([ int main() { static char c __attribute__ ((aligned($cc_attribute_align_try))) = 0; return c; - }], [cc_cv_attribute_aligned=$cc_attribute_align_try; break]) + }])], [cc_cv_attribute_aligned=$cc_attribute_align_try; break]) done CFLAGS="$ac_save_CFLAGS" ]) diff --git a/strpool/Makefile.am b/strpool/Makefile.am index 6170754..b041cea 100644 --- a/strpool/Makefile.am +++ b/strpool/Makefile.am @@ -17,12 +17,11 @@ # . CC = @CC_FOR_BUILD@ -CFLAGS = @BUILD_CFLAGS@ -LDFLAGS = @BUILD_LDFLAGS@ +AM_CFLAGS = @BUILD_CFLAGS@ +AM_LDFLAGS = @BUILD_LDFLAGS@ noinst_PROGRAMS = \ strpool strpool_SOURCES = \ ../strpool.c - -- cgit