From: Juergen Beisert <jbe@pengutronix.de>
To: ptxdist@pengutronix.de
Subject: [ptxdist] [PATCH v2] src-autoconf-lib package template: make it more 'feature' complete
Date: Mon, 18 Jun 2012 15:04:44 +0200 [thread overview]
Message-ID: <201206181504.44812.jbe@pengutronix.de> (raw)
In-Reply-To: <201206132004.51279.jbe@pengutronix.de>
This is a try to make it more 'feature' complete
Signed-off-by: Juergen Beisert <jbe@pengutronix.de>
diff --git a/rules/templates/src-autoconf-lib/@name@.c b/rules/templates/src-autoconf-lib/@name@.c
index f89e37e..c714b1a 100644
--- a/rules/templates/src-autoconf-lib/@name@.c
+++ b/rules/templates/src-autoconf-lib/@name@.c
@@ -1,8 +1,39 @@
+/*
+ * (C) Copyright <year> <your name> <your mail address>
+ *
+ * <define the license of the file or refer to the main COPYING file>
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdlib.h>
#include <stdio.h>
-int main(void)
+#include "internal.h"
+#include "lib@name@.h"
+
+DSO_VISIBLE int @name@_open(void)
+{
+ printf("lib@name@ opened\n");
+ return EXIT_SUCCESS;
+}
+
+DSO_VISIBLE int @name@_close(void)
{
- printf("hello fish!\n");
- return 0;
+ printf("lib@name@ closed\n");
+ return EXIT_SUCCESS;
}
+/* library's paper work */
+
+/* this function will be called, when the library gets loaded */
+void INIT_LIB init_function(void)
+{
+}
+
+/* this function will be called, when the library gets unloaded */
+void EXIT_LIB fini_function(void)
+{
+}
diff --git a/rules/templates/src-autoconf-lib/COPYING b/rules/templates/src-autoconf-lib/COPYING
new file mode 100644
index 0000000..cc1b14c
--- /dev/null
+++ b/rules/templates/src-autoconf-lib/COPYING
@@ -0,0 +1,11 @@
+TODO: decide what kind of license your work should have:
+
+ - LGPL:
+ * http://www.gnu.org/licenses/lgpl-2.0.txt
+ * http://www.gnu.org/licenses/lgpl-3.0.txt
+
+ - GPL:
+ * http://www.gnu.org/licenses/gpl-2.0.txt
+ * http://www.gnu.org/licenses/gpl-3.0.txt
+
+or any other license. But you should *always* include a valid license here.
diff --git a/rules/templates/src-autoconf-lib/Makefile.am b/rules/templates/src-autoconf-lib/Makefile.am
index 3f80257..100052b 100644
--- a/rules/templates/src-autoconf-lib/Makefile.am
+++ b/rules/templates/src-autoconf-lib/Makefile.am
@@ -1,25 +1,76 @@
+if BUILD_SILENTLY
+AM_MAKEFLAGS = --no-print-directory
+endif
+
+ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
+
+# pkg's stuff
+pkgconfigdir = \
+ $(libdir)/pkgconfig
+
+pkgconfig_DATA = \
+ lib@name@.pc
+
+# this one gets not installed, only internally used
+noinst_HEADERS = \
+ internal.h
+
+# this one gets installed to enable others to link against your library
+include_HEADERS = \
+ lib@name@.h
+
+#
+# What is to build here
+#
lib_LTLIBRARIES = \
lib@name@.la
-AM_CPPFLAGS = \
- -I$(top_srcdir)/include \
- -I$(top_builddir)/include
-# $(some_CFLAGS)
-
EXTRA_DIST = \
- autogen.sh
+ autogen.sh \
+ m4/attributes.m4 \
+ lib@name@.pc.in \
+ COPYING
MAINTAINERCLEANFILES = \
- configure \
- aclocal.m4 \
- Makefile.in
+ configure \
+ config.guess \
+ config.sub \
+ install-sh \
+ ltmain.sh \
+ autoscan.log \
+ config.h.in~ \
+ configure.scan \
+ missing \
+ depcomp \
+ aclocal.m4 \
+ config.h.in \
+ Makefile.in \
+ aclocal.m4 \
+ m4/libtool.m4 \
+ m4/ltoptions.m4 \
+ m4/ltsugar.m4 \
+ m4/ltversion.m4 \
+ m4/lt~obsolete.m4 \
+ $(DIST_ARCHIVES)
#
-# binary
+# library
#
-lib@namenodash@_la_SOURCES = \
- @name@.c
+# lib@namenodash@_la_CPPFLAGS = \
+# $(some_pre_processor_flags)
+
+# lib@namenodash@_la_CFLAGS = \
+# $(some_compiler_flags)
-#@namenodash@_LDADD = \
-# $(some_LIBS)
+# lib@namenodash@_la_LIBADD = \
+# $(some_libs)
+# Note: It overrides the AM_LDFLAGS variable
+lib@namenodash@_la_LDFLAGS = \
+ $(AM_LDFLAGS) \
+ @LDFLAGS_NOUNDEFINED@ \
+ -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \
+ -release $(API_RELEASE)
+
+lib@namenodash@_la_SOURCES = \
+ @name@.c
diff --git a/rules/templates/src-autoconf-lib/README b/rules/templates/src-autoconf-lib/README
new file mode 100644
index 0000000..7748d06
--- /dev/null
+++ b/rules/templates/src-autoconf-lib/README
@@ -0,0 +1,44 @@
+ lib@name@ - The @NAME@ library
+ ------------------------------------
+
+ Overview
+ --------
+
+ <tell something about this library>
+
+ License
+ -------
+
+ <define the license of this library>; see the file COPYING for the
+ actual terms.
+
+ Configure options
+ -----------------
+
+ Here is a list of configure options which are sometimes useful
+ for installation.
+
+ --enable-debug
+ Make the library more noise and do more runtime checks.
+ This will slow down the library at runtime.
+
+ --enable-profiling
+ Build the library with profiling support.
+
+ --enable-coverage
+ Build the library with coverage support.
+
+ --disable-hide
+ Built the library with all internal symbols visible. The
+ default is to only provide the exported functions to a
+ user. When --enable-debug is given all internal symbols
+ are visible.
+
+ <add more switches on demand here>
+
+ Environment Variables
+ ---------------------
+
+ You can overwrite CPPFLAGS, CFLAGS and LDFLAGS from the environment. But
+ keep in mind to not forget to add the "-O2 -g", if you use your own CFLAGS
+ settings. Only in the case CFLAGS is unset, configure defaults to "-O2 -g"
diff --git a/rules/templates/src-autoconf-lib/configure.ac b/rules/templates/src-autoconf-lib/configure.ac
index 091ce7a..d25d961 100644
--- a/rules/templates/src-autoconf-lib/configure.ac
+++ b/rules/templates/src-autoconf-lib/configure.ac
@@ -1,70 +1,345 @@
-AC_PREREQ(2.59)
+AC_PREREQ(2.60)
esyscmd([echo "define(myversion, $(dir=$(basename $(pwd)); if test \"${dir%%-trunk}\" != \"$dir\"; then echo 99999999-9; else prefix=${dir%%-[0-9]*-[0-9]};
echo ${dir##$prefix-}; fi))"])
-AC_INIT([@name@], myversion, [bugs@pengutronix.de])
-AC_CONFIG_SRCDIR([@name@.c])
+AC_INIT([@name@], myversion, [bugs@yourdomain.to], [@name@], [http://www.yourdomain.to/])
+AC_REVISION(1.0)
+AC_CONFIG_SRCDIR([config.h.in])
+AC_CONFIG_HEADERS([config.h])
+AC_CONFIG_MACRO_DIR([m4])
AC_CANONICAL_BUILD
AC_CANONICAL_HOST
-AM_MAINTAINER_MODE
+# default is less output while building the package
+AM_SILENT_RULES([yes])
+
+# If you don't want the default installation path to be '/usr/local' change it here
+# AC_PREFIX_DEFAULT(<new prefix>)
-CFLAGS="${CFLAGS} -W -Wall"
+# If possible, enable extensions to Posix
+AC_USE_SYSTEM_EXTENSIONS
#
# libtool library versioning stuff
#
-# Library code modified: REVISION++
-# Interfaces changed/added/removed: CURRENT++ REVISION=0
-# Interfaces added: AGE++
-# Interfaces removed: AGE=0
+# Using this variables results into
+#
+# lib<something>-<API_RELEASE>.so.<LT_CURRENT.LT_REVISION.LT_AGE>
+#
+# API_RELEASE: API compatibility. Its up to you to define a specific version here
+#
+# LT_CURRENT.LT_REVISION.LT_AGE: binary compatibility.
+# Here the rule is:
+# - library code was modified: LT_REVISION++
+# - interfaces changed/added/removed: LT_CURRENT++ and REVISION = 0
+# - interfaces added: LT_AGE++
+# - interfaces removed: LT_AGE = 0
+#
+API_RELEASE=0.0
+AC_SUBST(API_RELEASE)
+
+# Library release
LT_CURRENT=0
LT_REVISION=0
LT_AGE=0
+
AC_SUBST(LT_CURRENT)
+AC_DEFINE_UNQUOTED(@NAME@_MAJOR, ${LT_CURRENT}, [libs major number])
AC_SUBST(LT_REVISION)
+AC_DEFINE_UNQUOTED(@NAME@_MINOR, ${LT_REVISION}, [libs minor number])
AC_SUBST(LT_AGE)
+AC_DEFINE_UNQUOTED(@NAME@_MICRO, ${LT_AGE}, [libs micro number])
+AM_MAINTAINER_MODE
+AM_INIT_AUTOMAKE([foreign no-exeext dist-bzip2])
+
+#
+# TODO Enable the following block, if you need something to run at compiletime.
+# This means it will not be compiled by a cross compiler, the host compiler is
+# used instead. For the non cross compile case nothing change
+#
+
+# AC_MSG_CHECKING([if cross compiling])
+# if test "x${cross_compiling}" = "xno"; then
+# CC_FOR_BUILD=${CC_FOR_BUILD-${CC-gcc}}
+# else
+# CC_FOR_BUILD=${CC_FOR_BUILD-gcc}
+# fi
+# AC_MSG_RESULT([${cross_compiling}])
#
# Checks for programs.
#
AC_PROG_CC
-AC_PROG_LIBTOOL
-AM_INIT_AUTOMAKE([foreign no-exeext dist-bzip2])
+#
+# to only build the static library uncomment the following line
+# AC_DISABLE_SHARED([])
+# to only build the shared library uncomment the following line
+# AC_DISABLE_STATIC([])
+
+LT_INIT
+
+#
+# Using additional preprocessor, compiler or linker flags:
+# - add them to AM_CPPFLAGS, AM_CFLAGS or AM_LDFLAGS if they should be used
+# by all source files
+# - give the user a chance to setup her/his own flags with the CPPFLAGS, CFLAGS
+# and LDFLAGS
+# - if some flags are specific to a file add the flags via the substitute macro
+# into the Makefile
+#
+# Don't add the "-g" to the CFLAGS variable. It will be done automatically if
+# autoconf detects a GNU compiler.
+#
+#
+# Please note: 'configure' defaults the CFLAGS to "-O2 -g" if it detects a
+# GCC. If the user overwrites the CFLAGS externallly, there will be no default!
+# Keep the user informed about this behaviour.
-##
-# libsomething
-##
-#REQUIRES_LIBSOMETHING="libsomething >= 20090402-1"
-#AC_SUBST(REQUIRES_LIBSOMETHING)
-#PKG_CHECK_MODULES(libsomething, $REQUIRES_LIBSOMETHING)
+#
+# Check here for mandadory external libraries
+#
+# Rule of thumb: when your library needs an external library, add it
+# to the 'LIBS' variable. Do _not_ add it manually into the Makefile.am files.
+# These libraries _must_ be listed in the *.pc file.
+#
+# Don't add libraries without a check. Even if you know the 'sqrt()' requires
+# 'libm' on most systems, check for its real need with 'AC_SEARCH_LIBS(sqrt, m)'.
+# Doing it in this way will ensure an embedded developer knows exactly what
+# dependencies your library has (because it get listed in the *.pc file).
+#
+# Another way for checking libraries is the PKG_CHECK_MODULES macro. But please
+# honor if a user switches off a feature you also switch of the test for a
+# external component via PKG_CHECK_MODULES when it is no longer required!
+# PKG_CHECK_MODULES returns *_CFLAGS and *_LIBS. Again, add the *_LIBS to the
+# global 'LIBS', but for the CFLAGS you can decide if you add them to the
+# CFLAGS, AM_CFLAGS or as substitution variables in the Makefile.am.
+#
+
+#
+# Check for functions and header files. First write your code and then run
+# the 'autoscan' tool to get an idea what is still missing in your 'configure.ac'
+#
+# ----------------------------------------------------------------------------
+
+#
+# Ensure this file is easy to read. First list all switches and after that
+# make your descisions on the results of the switches
+#
+
#
# Debugging
#
-AC_MSG_CHECKING([whether to enable debugging])
-AC_ARG_ENABLE(debug,
- AS_HELP_STRING([--enable-debug], [enable debugging @<:@default=yes@:>@]),
- [case "$enableval" in
- y | yes) CONFIG_DEBUG=yes ;;
- *) CONFIG_DEBUG=no ;;
- esac],
- [CONFIG_DEBUG=yes])
-AC_MSG_RESULT([${CONFIG_DEBUG}])
-if test "${CONFIG_DEBUG}" = "yes"; then
- CFLAGS="${CFLAGS} -Werror -Wsign-compare -Wfloat-equal -Wformat-security -g -O1"
- AC_DEFINE(DEBUG, 1, [debugging])
+AC_MSG_CHECKING([whether to enable debug])
+AC_ARG_ENABLE([debug],
+ [AS_HELP_STRING([--enable-debug],
+ [use debug compiler flags and macros @<:@default=disabled@:>@])],
+ [],
+ [enable_debug=no])
+AC_MSG_RESULT([${enable_debug}])
+
+#
+# Enable profiling support
+#
+AC_MSG_CHECKING([whether to enable profiling support])
+AC_ARG_ENABLE([profile],
+ [AS_HELP_STRING([--enable-profile],
+ [allow profiling @<:@default=disabled@:>@])],
+ [],
+ [enable_profile=no])
+AC_MSG_RESULT([${enable_profile}])
+
+#
+# Enable test coverage support
+#
+AC_MSG_CHECKING([whether to enable code coverage support])
+AC_ARG_ENABLE([coverage],
+ [AS_HELP_STRING([--enable-coverage],
+ [allow code coverage @<:@default=disabled@:>@])],
+ [],
+ [enable_coverage=no])
+AC_MSG_RESULT([${enable_coverage}])
+
+#
+# should the library export all symbols?
+#
+AC_MSG_CHECKING([whether to hide internal symbols])
+AC_ARG_ENABLE([hide],
+ [AS_HELP_STRING([--disable-hide],
+ [hide all internal library symbols @<:@default=enabled@:>@])],
+ [],
+ [enable_hide=yes])
+AC_MSG_RESULT([${enable_hide}])
+
+# ----------------------------------------------------------------------------
+
+#
+# add as much warnings as possible, but check what the compiler
+# is able to understand and use it only if possible
+#
+CC_CHECK_CFLAGS_SILENT([-pipe],[AM_CFLAGS="${AM_CFLAGS} -pipe"])
+CC_CHECK_CFLAGS_SILENT([-W],[AM_CFLAGS="${AM_CFLAGS} -W"])
+CC_CHECK_CFLAGS_SILENT([-Wall],[AM_CFLAGS="${AM_CFLAGS} -Wall"])
+CC_CHECK_CFLAGS_SILENT([-Wsign-compare],[AM_CFLAGS="${AM_CFLAGS} -Wsign-compare"])
+CC_CHECK_CFLAGS_SILENT([-Wfloat-equal],[AM_CFLAGS="${AM_CFLAGS} -Wfloat-equal"])
+CC_CHECK_CFLAGS_SILENT([-Wformat-security],[AM_CFLAGS="${AM_CFLAGS} -Wformat-security"])
+CC_CHECK_CFLAGS_SILENT([-Wno-unused-parameter],[AM_CFLAGS="${AM_CFLAGS} -Wno-unused-parameter"])
+
+#
+# Does the linker supports "--no-undefined"?
+#
+CC_NOUNDEFINED
+
+#
+# Can we register functions running at library's load time?
+#
+CC_ATTRIBUTE_CONSTRUCTOR([AC_DEFINE(PRERUN, 1, [run at link time])], [])
+
+#
+# Add only those libraries that are *really* used
+#
+CC_CHECK_LDFLAGS([-Wl,--as-needed], [AM_LDFLAGS="${AM_LDFLAGS} -Wl,--as-needed"],[])
+
+# -------------------------- use all the settings ----------------------------
+
+#
+# we must add the optimization downgrade at the end of CFLAGS, as the compiler
+# will get the flags in this order later on: $(AM_CFLAGS) $(CFLAGS)
+# So, the "-O1" would always overwritten, when we would add it to the AM_CFLAGS
+#
+if test "${enable_debug}" = "yes"; then
+ CFLAGS="${CFLAGS} -O1"
+ if test "${enable_hide}" = "yes"; then
+ AC_MSG_NOTICE([Hiding library symbols disabled due to debugging enabled])
+ fi
+ enable_hide=no
+ AC_DEFINE(DEBUG, 1, [debugging])
else
- CFLAGS="${CFLAGS} -O2"
+ AC_DEFINE(NDEBUG, 1, [no debugging])
+fi
+
+if test "${enable_profile}" = "yes"; then
+ CC_CHECK_CFLAGS_SILENT([-pg], [], [enable_profile=no])
+ CC_CHECK_LDFLAGS([-pg], [], [enable_profile=no])
+# still enabled?
+ if test "${enable_profile}" = "yes"; then
+ AC_DEFINE(PROFILING, 1, [profiling])
+ AM_CFLAGS="${AM_CFLAGS} -pg"
+ AM_LDFLAGS="${AM_LDFLAGS} -pg"
+ else
+ AC_MSG_NOTICE([Toolchain does not support profiling])
+ fi
+fi
+
+if test "${enable_coverage}" = "yes"; then
+ CC_CHECK_CFLAGS_SILENT([-fprofile-arcs -ftest-coverage], [], [enable_coverage=no])
+ CC_CHECK_LDFLAGS([-lgcov], [], [enable_coverage=no])
+# still enabled?
+ if test "${enable_coverage}" = "yes"; then
+ AC_DEFINE(COVERAGE, 1, [coverage])
+ AM_CFLAGS="${AM_CFLAGS} -fprofile-arcs -ftest-coverage"
+ AM_LDFLAGS="${AM_LDFLAGS} -lgcov"
+ else
+ AC_MSG_NOTICE([Toolchain does not support coverage])
+ fi
+fi
+
+#
+# Enable "-fvisibility=hidden" only if the used compiler supports it
+#
+if test "${enable_hide}" = "yes"; then
+
+ AC_MSG_CHECKING([whether the compiler supports -fvisibility=hidden])
+ CC_CHECK_CFLAGS_SILENT([-fvisibility=hidden], [], [enable_hide=no])
+# still enabled?
+ if test "${enable_hide}" = "yes"; then
+ AC_DEFINE(DSO_HIDDEN, 1, [hide internal library symbols])
+ AM_CFLAGS="${AM_CFLAGS} -fvisibility=hidden"
+ fi
+ AC_MSG_RESULT([${enable_hide}]);
fi
+# ------------------------------- homework ------------------------------
+
+#
+# this library provides a pkg config file
+#
+pkgconfigdir=${libdir}/pkgconfig
+AC_SUBST(pkgconfigdir)
+
+# substitute the settings valid for all source files
+AC_SUBST(AM_CFLAGS)
+AC_SUBST(AM_CPPFLAGS)
+AC_SUBST(AM_LDFLAGS)
+
+# add private libs to the pkg-config file
+# 'private libs' are those required to link this library
+# its used later on if someone wants to link this library statically
+AC_SUBST(LIBS)
+
+# add required lib information to the pkg-config file (on demand)
+AC_SUBST(REQUIRES)
+
+# add lib information which may conflicts with this libarry
+AC_SUBST(CONFLICTS)
+
+# add special compile flags on demand
+AC_SUBST(PRIVATE_CFLAGS)
+
+# be very silent on request
+AM_CONDITIONAL(BUILD_SILENTLY, test "x$AM_DEFAULT_VERBOSITY" = x0)
AC_CONFIG_FILES([
Makefile
+ lib@name@.pc
])
AC_OUTPUT
+AC_MSG_RESULT([
+ ------------------------------------------------------
+ Configure results for: ${PACKAGE}
+ ------------------------------------------------------
+
+ Release State:
+ ------------------------------------------------------
+ Library API release: ${API_RELEASE}
+ Library release: ${LT_CURRENT}.${LT_REVISION}.${LT_AGE}
+ Package release: ${VERSION}
+
+ General:
+ ------------------------------------------------------
+ Cross compiling: ${cross_compiling}
+ Compiler: ${CC}
+ Target CPU: ${host_cpu}
+ Target OS: ${host_os}
+
+ Detected options:
+ ------------------------------------------------------
+ CPPFLAGS: ${AM_CPPFLAGS}
+ CFLAGS: ${AM_CFLAGS}
+ LDFLAGS: ${AM_LDFLAGS}
+ Hidden symbols ${enable_hide}
+ Coverage: ${enable_coverage}
+ Profiling: ${enable_profile}
+ Debug: ${enable_debug}
+ Private libs: ${LIBS}
+
+ User options:
+ ------------------------------------------------------
+ CFLAGS: ${CFLAGS}
+ CPPFLAGS: ${CPPFLAGS}
+ LDFLAGS: ${LDFLAGS}
+
+ Install options:
+ ------------------------------------------------------
+ prefix: ${prefix}
+ sysconfdir: ${sysconfdir}
+ libdir: ${libdir}
+ includedir: ${includedir}
+ bindir: ${bindir}
+ fast install: ${enable_fast_install}
+])
diff --git a/rules/templates/src-autoconf-lib/internal.h b/rules/templates/src-autoconf-lib/internal.h
new file mode 100644
index 0000000..4a9ac47
--- /dev/null
+++ b/rules/templates/src-autoconf-lib/internal.h
@@ -0,0 +1,21 @@
+/*
+ * (C) Copyright <year> <your name> <your mail address>
+ *
+ * <define the license of the file or refer to the main COPYING file>
+ */
+
+#include <assert.h>
+
+#ifdef DSO_HIDDEN
+# define DSO_VISIBLE __attribute__ ((visibility("default")))
+#else
+# define DSO_VISIBLE
+#endif
+
+#ifdef PRERUN
+# define INIT_LIB __attribute__((constructor))
+# define EXIT_LIB __attribute__((destructor))
+#else
+# define INIT_LIB
+# define EXIT_LIB
+#endif
diff --git a/rules/templates/src-autoconf-lib/lib@name@.h b/rules/templates/src-autoconf-lib/lib@name@.h
new file mode 100644
index 0000000..dc478b6
--- /dev/null
+++ b/rules/templates/src-autoconf-lib/lib@name@.h
@@ -0,0 +1,8 @@
+/*
+ * (C) Copyright <year> <your name> <your mail address>
+ *
+ * <define the license of the file or refer to the main COPYING file>
+ */
+
+extern int @name@_open(void);
+extern int @name@_close(void);
diff --git a/rules/templates/src-autoconf-lib/lib@name@.pc.in b/rules/templates/src-autoconf-lib/lib@name@.pc.in
new file mode 100644
index 0000000..88be79e
--- /dev/null
+++ b/rules/templates/src-autoconf-lib/lib@name@.pc.in
@@ -0,0 +1,14 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: lib@name@
+Description: Add here the purpose of the library
+Version: @VERSION@
+URL: http://www.yourdomain.to/
+Requires.private: @REQUIRES@
+Conflicts: @CONFLICTS@
+Libs: -l@name@
+Libs.private: @LIBS@
+Cflags: -I${includedir} @PRIVATE_CFLAGS@
diff --git a/rules/templates/src-autoconf-lib/m4/attributes.m4 b/rules/templates/src-autoconf-lib/m4/attributes.m4
new file mode 100644
index 0000000..9d561c2
--- /dev/null
+++ b/rules/templates/src-autoconf-lib/m4/attributes.m4
@@ -0,0 +1,311 @@
+dnl Macros to check the presence of generic (non-typed) symbols.
+dnl Copyright (c) 2006-2008 Diego Pettenò <flameeyes@gmail.com>
+dnl Copyright (c) 2006-2008 xine project
+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
+dnl the Free Software Foundation; either version 2, or (at your option)
+dnl any later version.
+dnl
+dnl This program is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+dnl GNU General Public License for more details.
+dnl
+dnl You should have received a copy of the GNU General Public License
+dnl along with this program; if not, write to the Free Software
+dnl Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+dnl 02110-1301, USA.
+dnl
+dnl As a special exception, the copyright owners of the
+dnl macro gives unlimited permission to copy, distribute and modify the
+dnl configure scripts that are the output of Autoconf when processing the
+dnl Macro. You need not follow the terms of the GNU General Public
+dnl License when using or distributing such scripts, even though portions
+dnl of the text of the Macro appear in them. The GNU General Public
+dnl License (GPL) does govern all other use of the material that
+dnl constitutes the Autoconf Macro.
+dnl
+dnl This special exception to the GPL applies to versions of the
+dnl Autoconf Macro released by this project. When you make and
+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_COMPILE_IFELSE([AC_LANG_SOURCE([int a;])],
+ [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"; DEBUG_CFLAGS="$DEBUG_CFLAGS $1"; $2], [$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])
+ done
+])
+
+dnl Check if the flag is supported by linker (cacheable)
+dnl CC_CHECK_LDFLAGS([FLAG], [ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND])
+
+AC_DEFUN([CC_CHECK_LDFLAGS], [
+ AC_CACHE_CHECK([if $CC supports $1 flag],
+ AS_TR_SH([cc_cv_ldflags_$1]),
+ [ac_save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS $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"
+ ])
+
+ AS_IF([eval test x$]AS_TR_SH([cc_cv_ldflags_$1])[ = xyes],
+ [$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
+dnl constructs (like attributes) are not simply ignored.
+dnl
+dnl Other compilers don't support -Werror per se, but they support
+dnl an equivalent flag:
+dnl - Sun Studio compiler supports -errwarn=%all
+AC_DEFUN([CC_CHECK_WERROR], [
+ AC_CACHE_CHECK(
+ [for $CC way to treat warnings as errors],
+ [cc_cv_werror],
+ [CC_CHECK_CFLAGS_SILENT([-Werror], [cc_cv_werror=-Werror],
+ [CC_CHECK_CFLAGS_SILENT([-errwarn=%all], [cc_cv_werror=-errwarn=%all])])
+ ])
+])
+
+AC_DEFUN([CC_CHECK_ATTRIBUTE], [
+ AC_REQUIRE([CC_CHECK_WERROR])
+ AC_CACHE_CHECK([if $CC supports __attribute__(( ifelse([$2], , [$1], [$2]) ))],
+ AS_TR_SH([cc_cv_attribute_$1]),
+ [ac_save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS $cc_cv_werror"
+ AC_COMPILE_IFELSE([AC_LANG_SOURCE([$3])],
+ [eval "AS_TR_SH([cc_cv_attribute_$1])='yes'"],
+ [eval "AS_TR_SH([cc_cv_attribute_$1])='no'"])
+ CFLAGS="$ac_save_CFLAGS"
+ ])
+
+ AS_IF([eval test x$]AS_TR_SH([cc_cv_attribute_$1])[ = xyes],
+ [AC_DEFINE(
+ AS_TR_CPP([SUPPORT_ATTRIBUTE_$1]), 1,
+ [Define this if the compiler supports __attribute__(( ifelse([$2], , [$1], [$2]) ))]
+ )
+ $4],
+ [$5])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_CONSTRUCTOR], [
+ CC_CHECK_ATTRIBUTE(
+ [constructor],,
+ [void __attribute__((constructor)) ctor() { int a; }],
+ [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_FORMAT], [
+ CC_CHECK_ATTRIBUTE(
+ [format], [format(printf, n, n)],
+ [void __attribute__((format(printf, 1, 2))) printflike(const char *fmt, ...) { fmt = (void *)0; }],
+ [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_FORMAT_ARG], [
+ CC_CHECK_ATTRIBUTE(
+ [format_arg], [format_arg(printf)],
+ [char *__attribute__((format_arg(1))) gettextlike(const char *fmt) { fmt = (void *)0; }],
+ [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_VISIBILITY], [
+ CC_CHECK_ATTRIBUTE(
+ [visibility_$1], [visibility("$1")],
+ [void __attribute__((visibility("$1"))) $1_function() { }],
+ [$2], [$3])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_NONNULL], [
+ CC_CHECK_ATTRIBUTE(
+ [nonnull], [nonnull()],
+ [void __attribute__((nonnull())) some_function(void *foo, void *bar) { foo = (void*)0; bar = (void*)0; }],
+ [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_UNUSED], [
+ CC_CHECK_ATTRIBUTE(
+ [unused], ,
+ [void some_function(void *foo, __attribute__((unused)) void *bar);],
+ [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_SENTINEL], [
+ CC_CHECK_ATTRIBUTE(
+ [sentinel], ,
+ [void some_function(void *foo, ...) __attribute__((sentinel));],
+ [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_DEPRECATED], [
+ CC_CHECK_ATTRIBUTE(
+ [deprecated], ,
+ [void some_function(void *foo, ...) __attribute__((deprecated));],
+ [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_ALIAS], [
+ CC_CHECK_ATTRIBUTE(
+ [alias], [weak, alias],
+ [void other_function(void *foo) { }
+ void some_function(void *foo) __attribute__((weak, alias("other_function")));],
+ [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_MALLOC], [
+ CC_CHECK_ATTRIBUTE(
+ [malloc], ,
+ [void * __attribute__((malloc)) my_alloc(int n);],
+ [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_PACKED], [
+ CC_CHECK_ATTRIBUTE(
+ [packed], ,
+ [struct astructure { char a; int b; long c; void *d; } __attribute__((packed));],
+ [$1], [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_CONST], [
+ CC_CHECK_ATTRIBUTE(
+ [const], ,
+ [int __attribute__((const)) twopow(int n) { return 1 << n; } ],
+ [$1], [$2])
+])
+
+AC_DEFUN([CC_FLAG_VISIBILITY], [
+ AC_REQUIRE([CC_CHECK_WERROR])
+ AC_CACHE_CHECK([if $CC supports -fvisibility=hidden],
+ [cc_cv_flag_visibility],
+ [cc_flag_visibility_save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS $cc_cv_werror"
+ CC_CHECK_CFLAGS_SILENT([-fvisibility=hidden],
+ cc_cv_flag_visibility='yes',
+ cc_cv_flag_visibility='no')
+ CFLAGS="$cc_flag_visibility_save_CFLAGS"])
+
+ AS_IF([test "x$cc_cv_flag_visibility" = "xyes"],
+ [AC_DEFINE([SUPPORT_FLAG_VISIBILITY], 1,
+ [Define this if the compiler supports the -fvisibility flag])
+ $1],
+ [$2])
+])
+
+AC_DEFUN([CC_FUNC_EXPECT], [
+ AC_REQUIRE([CC_CHECK_WERROR])
+ AC_CACHE_CHECK([if compiler has __builtin_expect function],
+ [cc_cv_func_expect],
+ [ac_save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS $cc_cv_werror"
+ 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"
+ ])
+
+ AS_IF([test "x$cc_cv_func_expect" = "xyes"],
+ [AC_DEFINE([SUPPORT__BUILTIN_EXPECT], 1,
+ [Define this if the compiler supports __builtin_expect() function])
+ $1],
+ [$2])
+])
+
+AC_DEFUN([CC_ATTRIBUTE_ALIGNED], [
+ AC_REQUIRE([CC_CHECK_WERROR])
+ AC_CACHE_CHECK([highest __attribute__ ((aligned ())) supported],
+ [cc_cv_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_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])
+ done
+ CFLAGS="$ac_save_CFLAGS"
+ ])
+
+ if test "x$cc_cv_attribute_aligned" != "x"; then
+ AC_DEFINE_UNQUOTED([ATTRIBUTE_ALIGNED_MAX], [$cc_cv_attribute_aligned],
+ [Define the highest alignment supported])
+ fi
+])
diff --git a/rules/templates/src-autoconf-lib/wizard.sh b/rules/templates/src-autoconf-lib/wizard.sh
index f8db60e..89b1ba0 100644
--- a/rules/templates/src-autoconf-lib/wizard.sh
+++ b/rules/templates/src-autoconf-lib/wizard.sh
@@ -11,14 +11,18 @@ NAME_UP=$(echo $NAME | tr '[a-z-]' '[A-Z_]')
NAME_NODASH=$(echo $NAME | tr '-' '_')
mv "@name@.c" "${NAME}.c"
+mv "lib@name@.h" "lib${NAME}.h"
+mv "lib@name@.pc.in" "lib${NAME}.pc.in"
for i in \
configure.ac \
+ lib${NAME}.pc.in \
+ README \
Makefile.am \
${NAME}.c \
+ lib${NAME}.h \
; do
sed -i -e "s/\@name\@/${NAME}/g" $i
sed -i -e "s/\@namenodash\@/${NAME_NODASH}/g" $i
sed -i -e "s/\@NAME\@/${NAME_UP}/g" $i
done
-
--
Pengutronix e.K. | Juergen Beisert |
Linux Solutions for Science and Industry | http://www.pengutronix.de/ |
--
ptxdist mailing list
ptxdist@pengutronix.de
prev parent reply other threads:[~2012-06-18 13:06 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-06-13 18:04 [ptxdist] [RFC] src-autoconf-lib package template, this is a try to " Juergen Beisert
2012-06-18 13:04 ` Juergen Beisert [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=201206181504.44812.jbe@pengutronix.de \
--to=jbe@pengutronix.de \
--cc=ptxdist@pengutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox