From 4f69b08833151fab744e64a16ae8016a123fa929 Mon Sep 17 00:00:00 2001 From: Bryan Jurish Date: Sat, 14 Feb 2009 20:33:11 +0000 Subject: + added centralized common autotools stuff: m4/ : m4 macros for autoconf (ax_pd_external.m4) pdexternal.am : automake include file autogen.sh : the usual hack svn path=/trunk/externals/moocow/; revision=10767 --- common/autogen.sh | 48 ++++++ common/m4/ax_pd_external.m4 | 355 ++++++++++++++++++++++++++++++++++++++++++++ common/mooPdUtils.h | 2 + common/pdexternal.am | 96 ++++++++++++ 4 files changed, 501 insertions(+) create mode 100755 common/autogen.sh create mode 100644 common/m4/ax_pd_external.m4 create mode 100644 common/pdexternal.am diff --git a/common/autogen.sh b/common/autogen.sh new file mode 100755 index 0000000..3e88258 --- /dev/null +++ b/common/autogen.sh @@ -0,0 +1,48 @@ +#!/bin/sh + +#----------------------------------------------------------------------- +# File: autogen.sh +# Description: +# + wrapper for m4 black-magic +#----------------------------------------------------------------------- + +MY_ALDIRS="." +MY_AHDIRS="." +MY_AMDIRS="." +MY_ACDIRS="." + +test -z "$ACLOCAL" && ACLOCAL="aclocal -I m4" +test -z "$AUTOHEADER" && AUTOHEADER=autoheader +test -z "$AUTOMAKE" && AUTOMAKE=automake +test -z "$AUTOCONF" && AUTOCONF=autoconf + +if test -n "$MY_ALDIRS"; then + for d in $MY_ALDIRS ; do + echo "(cd $d ; $ACLOCAL)" + (cd $d ; $ACLOCAL) + done +fi + +if test -n "$MY_AHDIRS"; then + for d in $MY_AHDIRS ; do + echo "(cd $d ; $AUTOHEADER)" + (cd $d ; $AUTOHEADER) + done +fi + +if test -n "$MY_AMDIRS"; then + for d in $MY_AMDIRS ; do + echo "(cd $d ; $AUTOMAKE -a -c)" + (cd $d ; $AUTOMAKE -a -c) + done +fi + +if test -n "$MY_ACDIRS"; then + for d in $MY_ACDIRS ; do + echo "(cd $d ; $AUTOCONF)" + (cd $d ; $AUTOCONF) + done +fi + +#echo "(./configure)" +#./configure $* diff --git a/common/m4/ax_pd_external.m4 b/common/m4/ax_pd_external.m4 new file mode 100644 index 0000000..66c770b --- /dev/null +++ b/common/m4/ax_pd_external.m4 @@ -0,0 +1,355 @@ +# +# SYNOPSIS +# +# TODO: AX_PD_EXTERNAL() +# +# DESCRIPTION +# +# This macro provides tests, options, & flags for building a Pd +# external. +# +# User flags (should already be set at call time) +# UCFLAGS, UCPPFLAGS, ULDFLAGS +# +# Pd directories +# AC_ARG_WITH(pd-dir) : default: "\${prefix}/pd" +# AC_ARG_WITH(pd-include) : sets IFLAGS, AM_IFLAGS +# AC_ARG_WITH(pd-extdir) : default $pddir/externs +# AC_SUBST(pddir) +# AC_SUBST(pddocdir) +# AC_SUBST(pdextdir) +# + aliases: pdexternsdir, pdexecdir +# +# Header tests: +# AC_CHECK_HEADER(m_pd.h) +# +# Object Externals vs. multi-object libraries: +# AC_ARG_ENABLE(object-externals, ...) ##-- set shell var want_object_externals +# AC_DEFINE(WANT_OBJECT_EXTERNALS,...) +# AM_CONDITIONAL(WANT_OBJECT_EXTERNALS) +# +# Debugging +# AC_ARG_ENABLE(debug) +# AC_DEFINE(ENABLE_DEBUG) +# AC_SUBST(ENABLE_DEBUG) +# +# Build time: +# AC_DEFINE_UNQUOTED(PACKAGE_BUILD_DATE) +# AC_DEFINE_UNQUOTED(PACKAGE_BUILD_USER) +# +# Versioning +# AC_SUBST(PACKAGE_VERSION,PACKAGE_NAME,BUGREPORT) +# +# Platform-dependent flags (shell vars and AC_SUBST) +# LD : linker +# PDEXT_LFLAGS : linker flags, appended to LDFLAGS +# PDEXT_AFLAGS : compiler flags for alpha, appended to CFLAGS +# PDEXT_OFLAGS : compiler optimization flags, appended to CFLAGS +# PDEXT_DFLAGS : preprocessor flags, appended to CPPFLAGS +# PDEXT_WFLAGS : compiler warning flags, appended to CFLAGS (gcc only) +# PDEXT : platform-specific external extension (without leading ".") +# +# EXEEXT hacks: +# AC_SUBST(pd_buildext) +# +# +# +# LAST MODIFICATION +# +# Sat, 14 Feb 2009 10:06:12 +0100 +# +# COPYLEFT +# +# Copyright (c) 2009 Bryan Jurish +# +# Copying and distribution of this file, with or without +# modification, are permitted in any medium without royalty provided +# the copyright notice and this notice are preserved. + +AC_DEFUN([AX_PD_EXTERNAL], +[ + ##vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv + ## prerequisites + AC_PREREQ(2.5) + + ##-- save user's CFLAGS,CPPFLAGS (do this before calling AX_PD_EXTERNAL!) + #test -z "$UCPPFLAGS" && UCPPFLAGS="$CPPFLAGS" + #test -z "$UCFLAGS" && UCFLAGS="$CFLAGS" + #test -z "$ULDFLAGS" && ULDFLAGS="$LDFLAGS" + + ##-- Programs, prefix + AC_PROG_CC + AC_PROG_INSTALL + AC_PROG_LN_S + dnl AC_PREFIX_DEFAULT(/usr/local) + + ##-- use libtool (but don't build static libraries) + ## + in Makefile.am, do: + ## pdexterns_LTLIBRARIES = ext1.la ... + ## ext1_la_SOURCES = ... + ## ext1_la_LDFLAGS = -module + ## + still unclear how to get *.$(PDEXT) targets built from *.la + dnl AC_DISABLE_STATIC + dnl AC_LIBTOOL_DLOPEN + dnl AC_PROG_LIBTOOL + + dnl ----- maintainer mode + dnl + enables "maintainer mode" only with ./configure --enable-maintainer-mode + dnl - causes make __never__ to invoke 'config/missing' (i.e. any autotools) + dnl - basically a hack to avoid version mismatches in autoconf, automake, etc. + dnl for autobuilds from SVN + dnl + maintainer should call ./configure --enable-maintainer-mode, and must keep + dnl SVN sources consistent + dnl AM_MAINTAINER_MODE + dnl /---- maintainer mode + + ## /prerequisites + ##^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + ##vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv + ## versioning + AC_SUBST(PACKAGE_VERSION) + AC_SUBST(PACKAGE_NAME) + AC_SUBST(BUGREPORT) + ## /versioning + ##^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + ##vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv + ## hack EXEEXT (alternative to using libtool) + AC_MSG_CHECKING([how to hack automake EXEEXT conventions]) + case "${am__api_version}" in + 1.[[0-4]]*) + AC_MSG_RESULT([automake v${ap__api_version}: on install]) + pd_buildext="" + ;; + *) + AC_MSG_RESULT([automake v${am__api_version}: on build]) + pd_buildext="\$(EXEEXT)" + ;; + esac + AC_SUBST(pd_buildext) + ## /hack EXEEXT + ##^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + ##vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv + ## pd-directory/ies + AC_ARG_WITH(pd-dir, + AC_HELP_STRING([--with-pd-dir=DIR], [Pd base directory (default=PREFIX/pd)]), + [pddir="$withval"], + [pddir="\${prefix}/pd"]) + AC_SUBST(pddir) + + pddocdir="${pddir}/doc/5.reference" + AC_SUBST(pddocdir) + + ##-- pdincludedir + AC_ARG_WITH(pd-include, + AC_HELP_STRING([--with-pd-include=DIR], [Pd include directory (default=NONE)]), + [pdincludedir="$withval"], + [pdincludedir=""]) + if test -n "$pdincludedir" ; then + IFLAGS="$IFLAGS -I$pdincludedir" + fi + AC_SUBST(pdincludedir) + + ##-- pdextdir + AC_ARG_WITH(pd-extdir, + AC_HELP_STRING([--with-pd-extdir=DIR], [Directory for Pd externals (default=PDDIR/externs)]), + [pdextdir="$withval"], + [pdextdir="$pddir/externs"]) + AC_SUBST(pdextdir) + + ##-- pdextdir: aliases + pdexternsdir="$pdextdir" + pdexecdir="$pdextdir" + AC_SUBST(pdexternsdir) + AC_SUBST(pdexecdir) + ## pd-directory/ies + ##^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + ##vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv + ## single-object-externals? + AC_ARG_ENABLE(object-externals, + AC_HELP_STRING([--enable-object-externals], [Whether to build single-object externals (default=no)]), + [want_object_externals="$enableval"], + [want_object_externals="no"]) + + AC_MSG_CHECKING([whether to build single-object externals]) + if test "$want_object_externals" != "no" ; then + ##-- single-objects + AC_MSG_RESULT(yes) + AC_DEFINE(WANT_OBJECT_EXTERNALS,1, + [Define this if you are building single-object externals]) + else + ##-- multi-lib only + AC_MSG_RESULT(no) + fi + + ##-- add automake conditional for object externals + AM_CONDITIONAL(WANT_OBJECT_EXTERNALS, [test "$want_object_externals" != "no"]) + ## + ## single-object-externals? + ##^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + + ##vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv + ## check: m_pd.h + CPPFLAGS="$CPPFLAGS $IFLAGS" + AC_CHECK_HEADER(m_pd.h,[], + AC_MSG_ERROR([could not find Pd header file 'm_pd.h' - bailing out]), + [/* nonempty includes: compile only */]) + ##^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + ##vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv + ## debugging + AC_MSG_CHECKING([whether to build a debug version]) + AC_ARG_ENABLE([debug], + AC_HELP_STRING([--enable-debug],[build debug version (default=no)])) + if test "$enable_debug" = "yes" ; then + AC_MSG_RESULT(yes) + ENABLE_DEBUG="yes" + else + AC_MSG_RESULT(no) + ENABLE_DEBUG="no" + fi + AC_SUBST(ENABLE_DEBUG) + ## debugging + ##^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + ##vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv + ## warning flags, gcc + if test "$GCC" = "yes"; then + AC_MSG_CHECKING([whether to set default gcc warning flags]) + case "$UCFLAGS" in + *-W*) + AC_MSG_RESULT(no) + ;; + *) + AC_MSG_RESULT(yes) + PDEXT_WFLAGS="$WFLAGS -Wall -Winline -W -Wno-unused" + ;; + esac + fi + ## warning flags, gcc + ##^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + ##vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv + ## compiled + AC_DEFINE_UNQUOTED(PACKAGE_BUILD_DATE, "`date`", [Date this package was configured]) + AC_DEFINE_UNQUOTED(PACKAGE_BUILD_USER, "$USER", [User who configured this package]) + ## /compiled + ##^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + ##vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv + ## BEGIN platform-dependent variables + ## + + ##-- Defaults + LD=ld + + ##----------- `uname -m`: machine hardware name + AC_MSG_CHECKING([target machine]) + uname_m="`uname -m`" + + ##-- alpha + if test "$uname_m" = alpha; + then + AC_MSG_RESULT(alpha) + PDEXT_AFLAGS="-mieee -mcpu=ev56"; + else + AC_MSG_RESULT([$uname_m]) + fi + + ##----------- `uname -s`: kernel name + AC_MSG_CHECKING([target system]) + uname_s="`uname -s`" + + case "$uname_s" in + Linux) + AC_MSG_RESULT(linux) + ;; + Darwin) + AC_MSG_RESULT(darwin) + ;; + IRIX64) + AC_MSG_RESULT(irix64) + ;; + IRIX32) + AC_MSG_RESULT(irix32) + ;; + *) + AC_MSG_RESULT([$uname_s]) + AC_MSG_WARN([Unknown kernel type "$uname_s" defaults to "Linux"]) + uname_s="Linux" + ;; + esac + + ##-- Linux + if test "$uname_s" = "Linux" + then + PDEXT_LFLAGS="-Wl,-export-dynamic -shared" + if test "$ENABLE_DEBUG" = "no" -a -z "$UCFLAGS"; then + ##-- only set OFLAGS if user CFLAGS are empty + PDEXT_OFLAGS="-O2 -pipe" + else + PDEXT_OFLAGS="-g" + fi + PDEXT_OFLAGS="$PDEXT_OFLAGS -fPIC" + PDEXT_DFLAGS="$PDEXT_DFLAGS -DPIC" + PDEXT=pd_linux + fi + + ##-- MacOSX (darwin) + if test "$uname_s" = "Darwin" + then + LD=cc + PDEXT_LFLAGS="-bundle -undefined suppress -flat_namespace" + PDEXT_DFLAGS="-DMACOSX" + if test "$ENABLE_DEBUG" = "no" -a -z "$UCFLAGS"; then + ##-- only set OFLAGS if user CFLAGS are empty + PDEXT_OFLAGS="-O2" + else + PDEXT_OFLAGS="-g" + fi + PDEXT=pd_darwin + fi + + ##-- irix64 + if test "$uname_s" = "IRIX64" + then + PDEXT_LFLAGS="-n32 -DUNIX -DIRIX -DN32 -woff 1080,1064,1185 \ + -OPT:roundoff=3 -OPT:IEEE_arithmetic=3 -OPT:cray_ivdep=true \ + -shared -rdata_shared" + PDEXT=pd_irix6 + fi + + ##-- irix32 + if test "$uname_s" = "IRIX32" + then + PDEXT_LFLAGS="-o32 -DUNIX -DIRIX -O2 -shared -rdata_shared" + PDEXT=pd_irix5 + fi + + ##----------- report pd extension + AC_MSG_NOTICE([will use pd extension ".$PDEXT" for pd externals]) + + EXT=$PDEXT + + ##----------- substitute + AC_SUBST(LD) + AC_SUBST(PDEXT) + AC_SUBST(PDEXT_AFLAGS) + AC_SUBST(PDEXT_DFLAGS) + AC_SUBST(PDEXT_IFLAGS) + AC_SUBST(PDEXT_LFLAGS) + AC_SUBST(PDEXT_OFLAGS) + AC_SUBST(PDEXT_WFLAGS) + + ##-- add defaults to user flags + CPPFLAGS="$UCPPFLAGS $PDEXT_IFLAGS $PDEXT_DFLAGS" + CFLAGS="$UCFLAGS $PDEXT_FLAGS $PDEXT_AFLAGS $PDEXT_WFLAGS" + LDFLAGS="$ULDFLAGS $PDEXT_LFLAGS" + + ## END platform-dependent variables + ##^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +]) diff --git a/common/mooPdUtils.h b/common/mooPdUtils.h index 4917e7d..0eb1c74 100644 --- a/common/mooPdUtils.h +++ b/common/mooPdUtils.h @@ -14,5 +14,7 @@ # define MOO_UNUSED #endif +/*-- PDEXT_UNUSED : alias for MOO_UNUSED --*/ +#define PDEXT_UNUSED MOO_UNUSED #endif /* _MOO_PD_UTILS_H */ diff --git a/common/pdexternal.am b/common/pdexternal.am new file mode 100644 index 0000000..af27060 --- /dev/null +++ b/common/pdexternal.am @@ -0,0 +1,96 @@ +## File: pdexternal.am +## Description: common automake stuff for pd externals +## Usage: +## + in source-level Makefile.am just do: +## include $(top_srcdir)/pdexternal.am +## ... or wherever you copied this file to ... +##----------------------------------------------------------------------- + +##----------------------------------------------------------------------- +## Options & Subdirectories + +##-- aclocal options (top level only) +#ACLOCAL_AMFLAGS = -I m4 + +## --- automake options (top level only) +#AUTOMAKE_OPTIONS = foreign dist-bzip2 dist-zip +#AUTOMAKE_OPTIONS = foreign + +##----------------------------------------------------------------------- +## Additional suffixes + +PDEXT = @PDEXT@ +EXEEXT = .@PDEXT@ + +## --- pseudo-deps for '.SUFFIXES' +SUFFIXES = .@PDEXT@ .pod .txt .html + +##----------------------------------------------------------------------- +## Distribution + +##--- extra distribution files +EXTRA_DIST = \ + $(PODS:.pod=.txt) \ + $(pddoc_DATA) \ + $(pdext_DATA) \ + $(pdexterns_DATA) \ + $(pdexec_DATA) \ + $(wildcard COPYING) \ + $(wildcard README.cvs) \ + $(wildcard depcomp) \ + $(wildcard install-sh) \ + $(wildcard ltmain.sh) \ + $(wildcard mising) \ + $(wildcard mkinstalldirs) + + +##----------------------------------------------------------------------- +## Rules: .pod + +.pod.txt: + pod2text $< $@ + +.pod.html: + pod2html $< --outfile=$@ + +#all-local: $(PODS:.pod=.txt) + + +##----------------------------------------------------------------------- +## Cleanup + +##--- clean: built by 'make' +CLEANFILES = *.$(PDEXT) + +##--- distclean: built by 'configure' +DISTCLEANFILES = \ + config.log \ + config.cache \ + config.status + +##-- maintainerclean: built by maintainer / by hand +MAINTAINERCLEANFILES = *~ \ + $(PODS:.pod=.txt) \ + Makefile \ + Makefile.in \ + aclocal.m4 \ + compile \ + configure \ + config.h.in \ + config.guess \ + config.sub \ + depcomp \ + install-sh \ + ltmain.sh \ + missing \ + mkinstalldirs \ + stamp-h.in \ + texinfo.tex \ + ylwrap + +maintainer-clean-local: + rm -rf autom4te.cache + +.PHONY: cvsclean cvsclean-hook + +cvsclean: maintainer-clean ; -- cgit v1.2.1