aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIOhannes m zmölnig <zmoelnig@users.sourceforge.net>2010-08-17 14:17:42 +0000
committerIOhannes m zmölnig <zmoelnig@users.sourceforge.net>2010-08-17 14:17:42 +0000
commita127d39b6540353734d8557ca39f401a2683aca8 (patch)
treed983f7d9c444a441f5b22af675c653f0a74123d5
parent70d8fd2e96d8a19149653052049c6f28ac1ac789 (diff)
use autoconf
svn path=/trunk/externals/hardware/wiimote/; revision=13823
-rw-r--r--Makefile145
-rw-r--r--Makefile.am23
-rw-r--r--README20
-rwxr-xr-xautogen.sh23
-rw-r--r--configure.ac46
-rw-r--r--m4/pd.m464
-rw-r--r--m4/pkg.m4157
-rw-r--r--m4/universal.m484
8 files changed, 410 insertions, 152 deletions
diff --git a/Makefile b/Makefile
deleted file mode 100644
index 7629c3e..0000000
--- a/Makefile
+++ /dev/null
@@ -1,145 +0,0 @@
-# To use this Makefile for your project, first put the name of your library in
-# LIBRARY_NAME variable. The folder for your project should have the same name
-# as your library.
-LIBRARY_NAME = wiimote
-
-# Next, add your source files to the SOURCES variable.
-SOURCES = wiimote.c
-
-# For objects that only build on certain platforms, add those to the SOURCES
-# line for the right platforms.
-SOURCES_Darwin =
-SOURCES_Linux =
-SOURCES_Windows =
-
-#------------------------------------------------------------------------------#
-#
-# you shouldn't need to edit anything below here, if we did it right :)
-#
-#------------------------------------------------------------------------------#
-
-VERSION=0.3.1
-
-# where Pd lives
-PD_PATH = ../../pd
-# where to install the library
-prefix = /usr/local
-libdir = $(prefix)/lib
-pkglibdir = $(libdir)/pd/extra
-objectsdir = $(pkglibdir)
-
-
-CFLAGS = -DPD -I$(PD_PATH)/src -Wall -W -g -DVERSION=\"$(VERSION)\"
-LDFLAGS =
-LIBS = -lcwiid -lbluetooth -lpthread
-
-UNAME := $(shell uname -s)
-ifeq ($(UNAME),Darwin)
- SOURCES += $(SOURCES_Darwin)
- EXTENSION = pd_darwin
- OS = macosx
- OPT_CFLAGS = -ftree-vectorize -ftree-vectorizer-verbose=2 -fast
- FAT_FLAGS = -arch i386 -arch ppc -mmacosx-version-min=10.4
- CFLAGS += -fPIC $(FAT_FLAGS)
- LDFLAGS += -bundle -undefined dynamic_lookup $(FAT_FLAGS)
- LIBS += -lc
- endif
-ifeq ($(UNAME),Linux)
- SOURCES += $(SOURCES_Linux)
- EXTENSION = pd_linux
- OS = linux
- OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer
- CFLAGS += -fPIC
- LDFLAGS += -Wl,--export-dynamic -shared -fPIC
- LIBS += -lc
-endif
-ifeq (MINGW,$(findstring MINGW,$(UNAME)))
- SOURCES += $(SOURCES_Windows)
- EXTENSION = dll
- OS = windows
- OPT_CFLAGS = -O3 -funroll-loops -fomit-frame-pointer -march=i686 -mtune=pentium4
- WINDOWS_HACKS = -D'O_NONBLOCK=1'
- CFLAGS += -mms-bitfields $(WINDOWS_HACKS)
- LDFLAGS += -s -shared -Wl,--enable-auto-import
- LIBS += -L$(PD_PATH)/bin -L$(PD_PATH)/obj -lpd -lwsock32 -lkernel32 -luser32 -lgdi32
-endif
-
-CFLAGS += $(OPT_CFLAGS)
-
--include Make.local
-
-
-.PHONY = install libdir_install single_install install-doc install-exec clean dist etags
-
-all: $(SOURCES:.c=.$(EXTENSION))
-
-%.o: %.c
- $(CC) $(CFLAGS) -o "$*.o" -c "$*.c"
-
-%.$(EXTENSION): %.o
- $(CC) $(LDFLAGS) -o "$*.$(EXTENSION)" "$*.o" $(LIBS)
- chmod a-x "$*.$(EXTENSION)"
- rm -f -- $*.o
-
-# this links everything into a single binary file
-$(LIBRARY_NAME): $(SOURCES:.c=.o) $(LIBRARY_NAME).o
- $(CC) $(LDFLAGS) -o $(LIBRARY_NAME).$(EXTENSION) $(SOURCES:.c=.o) $(LIBRARY_NAME).o $(LIBS)
- chmod a-x $(LIBRARY_NAME).$(EXTENSION)
-
-
-install: libdir_install
-
-# The meta and help files are explicitly installed to make sure they are
-# actually there. Those files are not optional, then need to be there.
-libdir_install: $(SOURCES:.c=.$(EXTENSION)) install-doc install-exec
- install -d $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
- install -m644 -p $(LIBRARY_NAME)-meta.pd $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
- install -m644 -p $(SOURCES:.c=.$(EXTENSION)) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-
-# install library linked as single binary
-single_install: $(LIBRARY_NAME) install-doc install-exec
- install -d $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
- install -m644 -p $(LIBRARY_NAME).$(EXTENSION) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-
-install-doc:
- install -d $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
- install -m644 -p $(SOURCES:.c=-help.pd) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-# install -m644 -p $(wildcard *.pd) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
- install -m644 -p README $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/README.txt
- install -m644 -p VERSION $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/VERSION.txt
- install -m644 -p CHANGES $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/CHANGES.txt
-
-install-exec:
- install -d $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-# install -m644 -p $(wildcard *.pd) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)
-
-
-clean:
- -rm -f -- $(SOURCES:.c=.o)
- -rm -f -- $(SOURCES:.c=.$(EXTENSION))
- -rm -f -- $(LIBRARY_NAME).$(EXTENSION)
-
-distclean: clean
- -rm -f -- ../$(LIBRARY_NAME)-$(OS)-$(shell uname -m).tar.bz2
- -rm -f -- ../$(LIBRARY_NAME)-$(OS).tar.bz2
-
-dist: all dist_$(OS)
-
-dist_linux:
- cd .. && tar --exclude=.svn -cjpf $(LIBRARY_NAME)-$(OS)-$(shell uname -m).tar.bz2 $(LIBRARY_NAME)
-
-dist_macosx:
- cd .. && tar --exclude=.svn -cjpf $(LIBRARY_NAME)-$(OS).tar.bz2 $(LIBRARY_NAME)
-
-dist_windows:
- cd .. && tar --exclude=.svn -cjpf $(LIBRARY_NAME)-$(OS).tar.bz2 $(LIBRARY_NAME)
-
-
-etags:
- etags *.[ch] ../../pd/src/*.[ch] /usr/include/*.h /usr/include/*/*.h
-
-showpaths:
- @echo "PD_PATH: $(PD_PATH)"
- @echo "objectsdir: $(objectsdir)"
- @echo "LIBRARY_NAME: $(LIBRARY_NAME)"
- @echo "SOURCES: $(SOURCES)"
diff --git a/Makefile.am b/Makefile.am
new file mode 100644
index 0000000..69c5232
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,23 @@
+## Makefile.am -- Process this file with automake to produce Makefile.in
+##
+
+AUTOMAKE_OPTIONS = foreign
+#AUTOMAKE_OPTIONS = no-dependencies foreign
+ACLOCAL_AMFLAGS = -I m4/generated -I m4
+AM_CPPFLAGS = -I$(top_srcdir)/../../../pd/src
+
+lib_LTLIBRARIES = wiimote.la
+
+SOURCES = wiimote.c
+dist_data_DATA = wiimote-help.pd
+
+
+
+wiimote_la_SOURCES = $(SOURCES)
+wiimote_la_CFLAGS = @ARCH_CFLAGS@ @PD_CFLAGS@
+wiimote_la_LIBADD = $(LIBM)
+wiimote_la_LDFLAGS = -module -avoid-version -shared @ARCH_LDFLAGS@ @PD_LDFLAGS@
+
+
+libtool: $(LIBTOOL_DEPS)
+ $(SHELL) ./config.status --recheck
diff --git a/README b/README
index bc28f88..2d7dcbc 100644
--- a/README
+++ b/README
@@ -4,10 +4,22 @@ wiimote for Pd
[wiimote] is a Pd-object that allows to read data from a Wii Remote Controller
it depends on libcwiid, which is currently only available on linux
-
random notes
============
+compiling
+---------
+wiimote uses autoconf:
+% ./configure
+% make
+% make install
+if you are using an svn snapshot, you will first have to run
+% ./autogen.sh
+
+note: autoconf will put the resulting pd-object binary into .libs/
+if you don't want to "make install" the library, just copy the
+./.lib/wiimote.pd_linux to ./
+
extensions
----------
the external is known to support the nunchuck, classic, motionplus extensions
@@ -28,12 +40,6 @@ $ patch < /path/to/wiimote/patches/cwiid201_motionplus_sensitivity.patch
$ cd /path/to/cwiid/
$ make (read README to see how to patch libcwiid)
-once you have done that, you need to make the external aware of the new feature.
-for this create a file
-/path/to/wiimote/Make.local
-and add the following line:
-CFLAGS += -DHAVE_CWIID_MOTIONPLUS_LOWSPEED
-
then recompile wiimote
multiple bluetooth dongles
diff --git a/autogen.sh b/autogen.sh
new file mode 100755
index 0000000..27b75c6
--- /dev/null
+++ b/autogen.sh
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+PATH=/sw/bin:$PATH
+
+PWD=${0%/*}
+
+
+## git cannot really handle empty directories
+## so let's create the missing ones
+mkdir -p ${PWD}/m4/generated
+
+case `uname -s` in
+ MINGW*)
+# autoreconf doesn't always work on MinGW
+ libtoolize --install --force \
+ && aclocal \
+ && automake --add-missing --force-missing \
+ && autoconf
+ ;;
+ *)
+ autoreconf --install --force --verbose
+ ;;
+esac
diff --git a/configure.ac b/configure.ac
new file mode 100644
index 0000000..0d18499
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,46 @@
+AC_PREREQ([2.57])
+
+AC_INIT([wiimote],[0.4.svn],[zmoelnig@iem.at])
+AC_CONFIG_SRCDIR([wiimote.c])
+AC_CONFIG_MACRO_DIR([m4/generated])
+AC_CONFIG_AUX_DIR([m4/config])
+
+AM_INIT_AUTOMAKE
+
+AC_PROG_CC
+
+
+LT_INIT
+AC_SUBST([LIBTOOL_DEPS])
+
+LT_LIB_M
+
+AC_SUBST([EXTENSION])
+
+AC_SUBST([ARCH_CFLAGS])
+AC_SUBST([ARCH_LDFLAGS])
+
+AC_SUBST([PD_CFLAGS])
+AC_SUBST([PD_LDFLAGS])
+
+AC_CANONICAL_HOST
+
+PD_CHECK_PD
+
+AC_CHECK_LIB(pd, nullfn)
+
+PKG_CHECK_MODULES([CWIID], [cwiid])
+CFLAGS="$CFLAGS $CWIID_CFLAGS"
+LIBS="$LIBS $CWIID_LIBS"
+
+AC_CHECK_MEMBER([struct cwiid_motionplus_mesg.low_speed],
+ [AC_DEFINE([HAVE_CWIID_MOTIONPLUS_LOWSPEED], [1], [Define if `struct cwiid_motionplus_mesg' has `low_speed' member])
+ ], [],
+ [[#include <cwiid.h>]]
+ )
+
+
+
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
+
diff --git a/m4/pd.m4 b/m4/pd.m4
new file mode 100644
index 0000000..cb87cfc
--- /dev/null
+++ b/m4/pd.m4
@@ -0,0 +1,64 @@
+dnl Copyright (C) 2010 IOhannes m zmölnig
+dnl This file is free software; IOhannes m zmölnig
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# PD_CHECK_UNIVERSAL([VARIABLE-NAME], [ACTION-IF-SUCCESS], [ACTION-IF-NO-SUCCESS])
+# will enable the "--enable-universal=<ARCHS>" flag
+# if <ARCH> is "yes", platform defaults are used
+# the system tries to build a test program with the archs, on succes it calls ACTION-IF-SUCCESS, and ACTION-IF-NO-SUCCESS otherwise
+# on success it will also add the flags to:
+# [VARIABLE-NAME]_CFLAGS will hold a list of cflags to compile for all requested archs
+# [VARIABLE-NAME]_LDFLAGS will hold a list of ldflags to link for all requested archs
+
+
+AC_DEFUN([PD_CHECK_PD],
+[
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_ARG_WITH([pd], AS_HELP_STRING([--with-pd=<path/to/pd>],[where to find pd-binary (./bin/pd.exe) and pd-sources]))
+if test -d "${with_pd}" ; then
+ AC_MSG_CHECKING([adding Pd-path(s) to build])
+ if test -d "${with_pd}/src" ; then
+ AC_LIB_APPENDTOVAR([PD_CFLAGS],"-I${with_pd}/src")
+ AC_MSG_RESULT([${PD_CFLAGS}])
+ else
+ AC_LIB_APPENDTOVAR([PD_CFLAGS],"-I${with_pd}")
+ AC_MSG_RESULT([${PD_CFLAGS}])
+ fi
+ if test -d "${with_pd}/bin" ; then
+ PD_LDFLAGS="${PD_LDFLAGS}${PD_LDFLAGS:+ }-L${with_pd}/bin"
+ AC_MSG_RESULT([${PD_LDFLAGS}])
+ else
+ PD_LDFLAGS="${PD_LDFLAGS}${PD_LDFLAGS:+ }-L${with_pd}"
+ AC_MSG_RESULT([${PD_LDFLAGS}])
+ fi
+fi
+
+
+case $host in
+powerpc-apple-darwin* | i*86*-apple-darwin*)
+ EXTENSION="pd_darwin"
+ ;;
+*linux*)
+ EXTENSION=pd_linux
+ ;;
+*mingw* )
+ EXTENSION=dll
+ LIBS+="-lpd"
+ ;;
+*cygwin*)
+ EXTENSION=dll
+
+ tmp_arch_cflags="$CFLAGS"
+ CFLAGS="$CFLAGS -mms-bitfield"
+ AC_TRY_COMPILE([], [return 0;], , CFLAGS="$tmp_arch_cflags")
+ ;;
+esac
+
+AC_CHECK_LIB(pd, nullfn)
+
+
+PD_CHECK_UNIVERSAL
+shrext_cmds=".${EXTENSION}"
+
+])
diff --git a/m4/pkg.m4 b/m4/pkg.m4
new file mode 100644
index 0000000..9bb3e06
--- /dev/null
+++ b/m4/pkg.m4
@@ -0,0 +1,157 @@
+# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
+# serial 1 (pkg-config-0.24)
+#
+# Copyright © 2004 Scott James Remnant <scott@netsplit.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 2 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, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# PKG_PROG_PKG_CONFIG([MIN-VERSION])
+# ----------------------------------
+AC_DEFUN([PKG_PROG_PKG_CONFIG],
+[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
+m4_pattern_allow([^PKG_CONFIG(_PATH)?$])
+AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])
+AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path])
+AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path])
+
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+ AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
+fi
+if test -n "$PKG_CONFIG"; then
+ _pkg_min_version=m4_default([$1], [0.9.0])
+ AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
+ if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ PKG_CONFIG=""
+ fi
+fi[]dnl
+])# PKG_PROG_PKG_CONFIG
+
+# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+#
+# Check to see whether a particular set of modules exists. Similar
+# to PKG_CHECK_MODULES(), but does not set variables or print errors.
+#
+# Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+# only at the first occurence in configure.ac, so if the first place
+# it's called might be skipped (such as if it is within an "if", you
+# have to call PKG_CHECK_EXISTS manually
+# --------------------------------------------------------------
+AC_DEFUN([PKG_CHECK_EXISTS],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+if test -n "$PKG_CONFIG" && \
+ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
+ m4_default([$2], [:])
+m4_ifvaln([$3], [else
+ $3])dnl
+fi])
+
+# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
+# ---------------------------------------------
+m4_define([_PKG_CONFIG],
+[if test -n "$$1"; then
+ pkg_cv_[]$1="$$1"
+ elif test -n "$PKG_CONFIG"; then
+ PKG_CHECK_EXISTS([$3],
+ [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`],
+ [pkg_failed=yes])
+ else
+ pkg_failed=untried
+fi[]dnl
+])# _PKG_CONFIG
+
+# _PKG_SHORT_ERRORS_SUPPORTED
+# -----------------------------
+AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi[]dnl
+])# _PKG_SHORT_ERRORS_SUPPORTED
+
+
+# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
+# [ACTION-IF-NOT-FOUND])
+#
+#
+# Note that if there is a possibility the first call to
+# PKG_CHECK_MODULES might not happen, you should be sure to include an
+# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
+#
+#
+# --------------------------------------------------------------
+AC_DEFUN([PKG_CHECK_MODULES],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
+AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
+
+pkg_failed=no
+AC_MSG_CHECKING([for $1])
+
+_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
+_PKG_CONFIG([$1][_LIBS], [libs], [$2])
+
+m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
+and $1[]_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.])
+
+if test $pkg_failed = yes; then
+ AC_MSG_RESULT([no])
+ _PKG_SHORT_ERRORS_SUPPORTED
+ if test $_pkg_short_errors_supported = yes; then
+ $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "$2" 2>&1`
+ else
+ $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors "$2" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
+
+ m4_default([$4], [AC_MSG_ERROR(
+[Package requirements ($2) were not met:
+
+$$1_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+_PKG_TEXT])dnl
+ ])
+elif test $pkg_failed = untried; then
+ AC_MSG_RESULT([no])
+ m4_default([$4], [AC_MSG_FAILURE(
+[The pkg-config script could not be found or is too old. Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+_PKG_TEXT
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.])dnl
+ ])
+else
+ $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
+ $1[]_LIBS=$pkg_cv_[]$1[]_LIBS
+ AC_MSG_RESULT([yes])
+ $3
+fi[]dnl
+])# PKG_CHECK_MODULES
diff --git a/m4/universal.m4 b/m4/universal.m4
new file mode 100644
index 0000000..9963b0d
--- /dev/null
+++ b/m4/universal.m4
@@ -0,0 +1,84 @@
+dnl Copyright (C) 2005-2010 IOhannes m zmölnig
+dnl This file is free software; IOhannes m zmölnig
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# PD_CHECK_UNIVERSAL([VARIABLE-NAME], [ACTION-IF-SUCCESS], [ACTION-IF-NO-SUCCESS])
+# will enable the "--enable-universal=<ARCHS>" flag
+# if <ARCH> is "yes", platform defaults are used
+# the system tries to build a test program with the archs, on succes it calls ACTION-IF-SUCCESS, and ACTION-IF-NO-SUCCESS otherwise
+# on success it will also add the flags to:
+# [VARIABLE-NAME]_CFLAGS will hold a list of cflags to compile for all requested archs
+# [VARIABLE-NAME]_LDFLAGS will hold a list of ldflags to link for all requested archs
+
+AC_DEFUN([PD_CHECK_UNIVERSAL],
+[
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+
+AC_ARG_ENABLE(universal,
+ AS_HELP_STRING([--enable-universal=<ARCHS>],
+ [build an Apple Multi Architecture Binary (MAB); ARCHS is a comma-delimited list of architectures for which to build; if ARCHS is omitted, then the package will be built for all architectures supported by the platform (e.g. "ppc,i386" for MacOS/X and Darwin); if this option is disabled or omitted entirely, then the package will be built only for the target platform]),
+ [universal_binary=$enableval], [universal_binary=no])
+
+_pd_universal_success="no"
+if test "$universal_binary" != no; then
+ AC_MSG_CHECKING([target architectures])
+ # Respect TARGET_ARCHS setting from environment if available.
+ if test -z "$TARGET_ARCHS"; then
+ # Respect ARCH given to --enable-universal-binary if present.
+ if test "$universal_binary" != yes; then
+ TARGET_ARCHS=$(echo "$universal_binary" | tr ',' ' ')
+ else
+ # Choose a default set of architectures based upon platform.
+ case $host in
+ *darwin*)
+ TARGET_ARCHS="ppc i386"
+ ;;
+ *)
+ TARGET_ARCHS=""
+ ;;
+ esac
+ fi
+ fi
+ AC_MSG_RESULT([$TARGET_ARCHS])
+
+ # /usr/lib/arch_tool -archify_list $TARGET_ARCHS
+ _pd_universal=""
+ for archs in $TARGET_ARCHS
+ do
+ _pd_universal="$_pd_universal -arch $archs"
+ done
+
+dnl run checks whether the compiler linker like this...
+ if test "x$_pd_universal" != "x"; then
+ tmp_arch_cflags="$CFLAGS"
+ tmp_arch_ldflags="$LDFLAGS"
+
+ CFLAGS="$CFLAGS $_pd_universal"
+ LDFLAGS="$LDFLAGS $_universal"
+ AC_TRY_LINK([], [return 0;], [_pd_universal_success="yes"], [_pd_universal_success="no"])
+
+ CFLAGS="$tmp_arch_cflags"
+ LDFLAGS="$tmp_arch_ldflags"
+ fi
+fi
+
+if test "x$_pd_universal_success" = "xyes"; then
+ [$2]
+ $1[]CFLAGS="$[]$1[]CFLAGS $_pd_universal"
+ $1[]LDFLAGS="$[]$1[]LDFLAGS $_pd_universal"
+
+ case $host in
+ *darwin*)
+ EXTENSION=d_fat
+ ;;
+ esac
+
+else
+ :
+ [$3]
+fi
+
+AC_SUBST($1[]CFLAGS)
+AC_SUBST($1[]LDFLAGS)
+])# GEM_CHECK_UNIVERSAL