Skip to content

Commit

Permalink
Improve build system (including some compiler/linker flags from libso…
Browse files Browse the repository at this point in the history
…dium and Debian Hardening). Fix tests.
  • Loading branch information
impl committed Apr 6, 2013
1 parent 8b18a89 commit f9cbff7
Show file tree
Hide file tree
Showing 14 changed files with 3,735 additions and 98 deletions.
8 changes: 1 addition & 7 deletions Makefile.am
@@ -1,16 +1,10 @@
ACLOCAL_AMFLAGS = -I m4

LIBCURVECPR_API_VERSION = 1:0:0

lib_LTLIBRARIES = libcurvecpr.la

libcurvecpr_la_CPPFLAGS = -I$(top_srcdir)/include
libcurvecpr_la_CFLAGS = \
-Wall -W -Wcast-qual -Wcast-align -Winline -Wmissing-prototypes -Wwrite-strings \
-Wredundant-decls -Wpointer-arith -Wchar-subscripts -Wshadow -Wstrict-prototypes -Werror
libcurvecpr_la_LDFLAGS = -version-info $(LIBCURVECPR_API_VERSION)
libcurvecpr_la_LDFLAGS = -version-info $(CURVECPR_LIBRARY_VERSION)

AUTOMAKE_OPTIONS = subdir-objects
libcurvecpr_la_SOURCES = \
lib/bytes.c \
lib/chicago.c \
Expand Down
89 changes: 1 addition & 88 deletions autogen.sh
@@ -1,89 +1,2 @@
#! /bin/sh

PROGRAM="libcurvecpr"

SCRIPT=$( basename $0 )
ERROR=0

error() {
MESSAGE=$1
echo "error: ${MESSAGE}"

ERROR=1
}

hint() {
MESSAGE=$1
echo "hint: ${MESSAGE}"
}

status() {
MESSAGE=$1
echo "${SCRIPT}: ${MESSAGE}"
}

die_if_error() {
if [ $ERROR -ne 0 ]; then
exit 1
fi
}

( autoconf --version >/dev/null 2>&1 ) || {
error "The \`autoconf\` program must be installed to compile ${PROGRAM}."
}

( automake --version >/dev/null 2>&1 ) || {
error "The \`automake\` program must be installed to compile ${PROGRAM}."
}

( aclocal --version >/dev/null 2>&1 ) || {
error "The \`aclocal\` program must be installed to compile ${PROGRAM}."
hint "\`aclocal\` is usually provided by \`automake\`. Is your version of \`automake\`"
hint "up to date?"
}

( libtool --version >/dev/null 2>&1 ) || {
error "The \`libtool\` program must be installed to compile ${PROGRAM}."
}

( libtoolize --version >/dev/null 2>&1 ) || {
error "The \`libtoolize\` program must be installed to compile ${PROGRAM}."
hint "\`libtoolize\` is usually provided by \`libtool\`. Is your version of \`libtool\`"
hint "up to date?"
}

( pkg-config --version >/dev/null 2>&1 ) || {
error "The \`pkg-config\` program must be installed to compile ${PROGRAM}."
}

die_if_error

status "Running libtoolize"
( libtoolize --force --copy ) || {
error "libtoolize failed"
exit 1
}

status "Running aclocal"
( aclocal ) || {
error "aclocal failed"
exit 1
}

status "Running autoheader"
( autoheader ) || {
error "autoheader failed"
exit 1
}

status "Running automake"
( automake --add-missing ) || {
error "automake failed"
exit 1
}

status "Running autoconf"
( autoconf ) || {
error "autoconf failed"
exit 1
}
exec autoreconf -fvi
20 changes: 19 additions & 1 deletion configure.ac
@@ -1,11 +1,15 @@
AC_PREREQ(2.67)
AC_INIT(libcurvecpr, 0.1.0, nfontes+libcurvecpr@cynigram.com, libcurvecpr)
AM_INIT_AUTOMAKE([-Wall -Werror foreign])
AM_INIT_AUTOMAKE([-Wall -Werror foreign subdir-objects])

AC_CONFIG_SRCDIR([include/server.h])
AC_CONFIG_HEADER([include/config.h])
AC_CONFIG_MACRO_DIR([m4])

# Library version.
CURVECPR_LIBRARY_VERSION=1:0:0
AC_SUBST(CURVECPR_LIBRARY_VERSION)

# Checks for programs.
AC_PROG_CC
AC_PROG_CPP
Expand Down Expand Up @@ -38,6 +42,20 @@ AC_CHECK_TYPE([struct timespec], [], [AC_MSG_ERROR([missing struct timespec])],
# Checks for functions.
AC_CHECK_FUNCS([clock_gettime], [], [AC_MSG_ERROR([missing clock_gettime])])

# Checks for compiler flags.
CPPFLAGS="$CPPFLAGS -D_FORTIFY_SOURCE=2"
AX_APPEND_COMPILE_FLAGS([-fno-strict-aliasing -fno-strict-overflow], [], [-Wno-error])
AX_CHECK_LINK_FLAG([-fstack-protector], [AX_APPEND_COMPILE_FLAGS([-fstack-protector], [], [-Wno-error])], [], [], [-Wno-error])
AX_CHECK_LINK_FLAG([-fstack-protector-all], [AX_APPEND_COMPILE_FLAGS([-fstack-protector-all], [], [-Wno-error])], [], [], [-Wno-error])
AX_APPEND_COMPILE_FLAGS([ dnl
-Wall -Wextra -Wcast-qual -Wcast-align -Winline -Wmissing-prototypes -Wmissing-declarations dnl
-Wwrite-strings -Wredundant-decls -Wpointer-arith -Wchar-subscripts -Wshadow -Wstrict-prototypes dnl
-Wvariable-decl -Winit-self -Wdiv-by-zero -Wsometimes-uninitialized -Wbad-function-cast -Wcomment dnl
-Wfloat-equal -Wformat=2 -Wimplicit -Wnormalized=id -Woverride-init -Wparentheses -Wswitch-enum dnl
-Wno-unused-parameter dnl
], [], [-Wno-error])
AX_APPEND_LINK_FLAGS([-Wl,-z,relro -Wl,-z,now -Wl,-z,noexecstack], [], [-Wno-error])

# Done!
AC_CONFIG_FILES([Makefile libcurvecpr.pc])
AC_OUTPUT
65 changes: 65 additions & 0 deletions m4/ax_append_compile_flags.m4
@@ -0,0 +1,65 @@
# ===========================================================================
# http://www.gnu.org/software/autoconf-archive/ax_append_compile_flags.html
# ===========================================================================
#
# SYNOPSIS
#
# AX_APPEND_COMPILE_FLAGS([FLAG1 FLAG2 ...], [FLAGS-VARIABLE], [EXTRA-FLAGS])
#
# DESCRIPTION
#
# For every FLAG1, FLAG2 it is checked whether the compiler works with the
# flag. If it does, the flag is added FLAGS-VARIABLE
#
# If FLAGS-VARIABLE is not specified, the current language's flags (e.g.
# CFLAGS) is used. During the check the flag is always added to the
# current language's flags.
#
# If EXTRA-FLAGS is defined, it is added to the current language's default
# flags (e.g. CFLAGS) when the check is done. The check is thus made with
# the flags: "CFLAGS EXTRA-FLAGS FLAG". This can for example be used to
# force the compiler to issue an error when a bad flag is given.
#
# NOTE: This macro depends on the AX_APPEND_FLAG and
# AX_CHECK_COMPILE_FLAG. Please keep this macro in sync with
# AX_APPEND_LINK_FLAGS.
#
# LICENSE
#
# Copyright (c) 2011 Maarten Bosmans <mkbosmans@gmail.com>
#
# This program is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation, either version 3 of the License, or (at your
# option) any later version.
#
# This program 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 General
# Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program. If not, see <http://www.gnu.org/licenses/>.
#
# As a special exception, the respective Autoconf Macro's copyright owner
# gives unlimited permission to copy, distribute and modify the configure
# scripts that are the output of Autoconf when processing the Macro. You
# need not follow the terms of the GNU General Public License when using
# or distributing such scripts, even though portions of the text of the
# Macro appear in them. The GNU General Public License (GPL) does govern
# all other use of the material that constitutes the Autoconf Macro.
#
# This special exception to the GPL applies to versions of the Autoconf
# Macro released by the Autoconf Archive. When you make and distribute a
# modified version of the Autoconf Macro, you may extend this special
# exception to the GPL to apply to your modified version as well.

#serial 3

AC_DEFUN([AX_APPEND_COMPILE_FLAGS],
[AC_REQUIRE([AX_CHECK_COMPILE_FLAG])
AC_REQUIRE([AX_APPEND_FLAG])
for flag in $1; do
AX_CHECK_COMPILE_FLAG([$flag], [AX_APPEND_FLAG([$flag], [$2])], [], [$3])
done
])dnl AX_APPEND_COMPILE_FLAGS

0 comments on commit f9cbff7

Please sign in to comment.