aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Make.config.in34
-rw-r--r--src/Makefile106
-rw-r--r--src/Makefile.in86
-rw-r--r--src/configure.ac188
4 files changed, 254 insertions, 160 deletions
diff --git a/src/Make.config.in b/src/Make.config.in
new file mode 100644
index 0000000..7c685e0
--- /dev/null
+++ b/src/Make.config.in
@@ -0,0 +1,34 @@
+LIBRARY_NAME=@LIBRARY_NAME@
+
+# when build as a library this holds a pre-processor define
+# (e.g. "-DZEXY_LIBRARY")
+# when build as single externals this is empty
+BUILDLIBRARY =@BUILDLIBRARY@
+
+PREFIX =@prefix@@PDLIBDIR@
+
+INSTALL_BIN=$(DESTDIR)$(PREFIX)/lib/pd/extra
+INSTALL_DOC=$(DESTDIR)$(PREFIX)/lib/pd/@REFERENCEPATH@$(LIBRARY_NAME)
+
+EXT = @EXT@
+DEFS = @DFLAGS@
+IFLAGS = -I. @INCLUDES@
+
+CC = @CC@
+LD = @LD@
+STRIP = @STRIP@
+STRIPFLAGS= @STRIPFLAGS@
+
+AFLAGS =
+LFLAGS = @LFLAGS@
+WFLAGS =
+
+TARNAME = $(LIBRARY_NAME)-@LIBRARY_VERSION@.tgz
+
+# ICCFLAGS=-march=pentiumiii -axK
+LIBRARY_CFLAGS = $(IFLAGS) $(DEFS) $(BUILDLIBRARY) -DPD $(WFLAGS) @CFLAGS@ $(CFLAGS)
+
+MAKEDEP_FLAGS = @MAKEDEP_FLAGS@
+CONFIGUREFLAGS = @CONFIGUREFLAGS@
+
+LIBS = @LIBS@
diff --git a/src/Makefile b/src/Makefile
new file mode 100644
index 0000000..1c95077
--- /dev/null
+++ b/src/Makefile
@@ -0,0 +1,106 @@
+default: all
+
+.PHONEY: default all everything dist \
+ clean realclean distclean \
+ install install-bin install-doc install-abs \
+ tests
+
+-include Make.config
+
+TESTDIR=../tests
+
+HELPERSOURCES=$(LIBRARY_NAME)_sources.c $(LIBRARY_NAME).c
+
+OBJECTSOURCES=$(sort $(filter-out $(HELPERSOURCES), $(filter %.c, $(wildcard *.c))))
+
+SOURCES=$(OBJECTSOURCES) $(HELPERSOURCES)
+
+configure: configure.ac aclocal.m4
+ autoconf
+
+aclocal.m4: acinclude.m4
+ aclocal
+
+Make.config: Make.config.in configure
+ ./configure $(CONFIGUREFLAGS)
+
+$(LIBRARY_NAME)_sources.c $(LIBRARY_NAME)_sources.h:
+ ./makesource.sh
+
+-include $(SOURCES:.c=.d)
+
+## 2nd only generate depend-files when we have Make.config included
+## and thus MAKEDEP_FLAGS defined
+ifdef MAKEDEP_FLAGS
+## dependencies: as proposed by the GNU-make documentation
+## see http://www.gnu.org/software/make/manual/html_node/make_47.html#SEC51
+%.d: %.c
+ @set -e; rm -f $@; \
+ $(CPP) $(MAKEDEP_FLAGS) $(LIBRARY_CFLAGS) $< > $@.$$$$; \
+ sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
+ rm -f $@.$$$$
+endif
+
+.SUFFIXES: .$(EXT)
+
+TARGETS = $(SOURCES:.c=.o)
+
+OBJECTS = $(OBJECTSOURCES:.c=.$(EXT))
+
+## if $(BUILDLIBRARY) is defined, we build everything as a single library
+## else we build separate externals
+ifneq "$(BUILDLIBRARY)" ""
+all: $(LIBRARY_NAME)
+ cp $(LIBRARY_NAME).$(EXT) ..
+else
+all: $(OBJECTS)
+endif
+
+$(OBJECTS): %.$(EXT) : %.o
+ $(LD) $(LFLAGS) -o $@ $*.o $(LIBS)
+ $(STRIP) $(STRIPFLAGS) $@
+
+$(LIBRARY_NAME): $(TARGETS) $(LIBRARY_NAME)_sources.c $(LIBRARY_NAME)_sources.h
+ $(LD) $(LFLAGS) -o $@.$(EXT) *.o $(LIBS)
+ $(STRIP) $(STRIPFLAGS) $@.$(EXT)
+
+$(TARGETS): %.o : %.c
+ $(CC) $(LIBRARY_CFLAGS) -c -o $@ $*.c
+
+externals: $(OBJECTS)
+
+clean:
+ -rm -f *.$(EXT) *.o
+
+realclean: clean
+ -rm -f *~ _* config.*
+ -rm -f *.d *.d.*
+
+distclean: realclean
+ -rm -f Make.config ../*.$(EXT)
+ -rm -f $(LIBRARY_NAME).exp $(LIBRARY_NAME).lib $(LIBRARY_NAME).ncb \
+ $(LIBRARY_NAME).opt $(LIBRARY_NAME).plg
+ -rm -rf autom4te.cache/
+
+tests: all
+ make -C $(TESTDIR)
+
+install: install-bin install-doc install-abs
+
+install-bin:
+ -install -d $(INSTALL_BIN)
+ -install -m 644 $(LIBRARY_NAME).$(EXT) $(INSTALL_BIN)
+
+install-doc:
+ -install -d $(INSTALL_DOC)
+ -install -m 644 ../doc/*.pd $(INSTALL_DOC)
+
+install-abs:
+ -install -d $(INSTALL_BIN)
+ -install -m 644 ../abs/*.pd $(INSTALL_BIN)
+
+dist: all realclean
+ (cd ../..;tar czvf $(TARNAME) $(LIBRARY_NAME))
+
+everything: clean all install distclean
+
diff --git a/src/Makefile.in b/src/Makefile.in
deleted file mode 100644
index c4225e7..0000000
--- a/src/Makefile.in
+++ /dev/null
@@ -1,86 +0,0 @@
-LIBNAME =iemmatrix
-
-PREFIX =@prefix@@PDLIBDIR@
-
-INSTALL_BIN=$(PREFIX)/extra/$(LIBNAME)
-INSTALL_DOC=$(INSTALL_BIN)
-
-EXT = @EXT@
-DEFS = @DFLAGS@
-IFLAGS = -I. @INCLUDES@ $(INCLUDES)
-MAKEDEP_FLAGS = @MAKEDEP_FLAGS@
-
-CC = @CC@
-LD = @LD@
-STRIP = @STRIP@ @STRIPFLAGS@
-
-AFLAGS =
-LFLAGS = @LFLAGS@
-WFLAGS =
-
-TARNAME = $(LIBNAME)-@IEMMATRIX_VERSION@.tgz
-
-.SUFFIXES: .$(EXT)
-
-CFLAGS = $(DEFS) $(IFLAGS) $(WFLAGS) @CFLAGS@
-
-LIBS = @LIBS@
-
-SOURCES=$(sort $(filter %.c, $(wildcard *.c)))
-TARGETS = $(SOURCES:.c=.o)
-
-all: $(LIBNAME)
- cp $(LIBNAME).$(EXT) ..
-
-$(LIBNAME): $(TARGETS)
- $(LD) $(LFLAGS) -o $(LIBNAME).$(EXT) *.o $(LIBS)
- $(STRIP) $(LIBNAME).$(EXT)
-
-## dependencies: as proposed by the GNU-make documentation
-## see http://www.gnu.org/software/make/manual/html_node/make_47.html#SEC51
--include $(SOURCES:.c=.d)
-%.d: %.c
- @set -e; rm -f $@; \
- $(CXX) $(MAKEDEP_FLAGS) $(CFLAGS) $< > $@.$$$$; \
- sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
- rm -f $@.$$$$
-
-clean:
- -rm -f *.$(EXT) *.o
-
-cleaner: clean
- -rm -f *~ _* config.* *.d *.d.*
-
-cleanest: cleaner
- -rm -f Makefile ../*.$(EXT)
-
-distclean: cleanest newmakefile
-
-install: install-bin install-abs install-doc
-
-install-bin:
- -install -d $(INSTALL_BIN)
- -install -m 644 $(LIBNAME).$(EXT) $(INSTALL_BIN)
-
-install-doc:
- -install -d $(INSTALL_DOC)
- -install -m 644 ../doc/*.pd $(INSTALL_DOC)
-
-install-abs:
- -install -d $(INSTALL_BIN)
- -install -m644 ../abs/*.pd $(INSTALL_BIN)
-
-dist: all cleaner
- (cd ../..;tar czvf $(TARNAME) $(LIBNAME))
-
-everything: clean all install distclean
-
-newmakefile:
- echo "current:">Makefile
- echo " ./configure && make">>Makefile
-
-Makefile: Makefile.in configure
- ./configure
-
-configure: configure.ac
- autoconf
diff --git a/src/configure.ac b/src/configure.ac
index 03036be..6b6320c 100644
--- a/src/configure.ac
+++ b/src/configure.ac
@@ -1,6 +1,7 @@
dnl Process this file with autoconf to produce a configure script.
AC_INIT(iemmatrix.c)
+
dnl Checks for programs.
AC_PROG_CC
@@ -11,15 +12,46 @@ AC_SUBST(EXT)
AC_SUBST(LD)
AC_SUBST(STRIP)
AC_SUBST(STRIPFLAGS)
-AC_SUBST(IEMMATRIX_VERSION)
+AC_SUBST(LIBRARY_NAME)
+AC_SUBST(LIBRARY_VERSION)
+AC_SUBST(BUILDLIBRARY)
AC_SUBST(REFERENCEPATH)
AC_SUBST(PDLIBDIR)
AC_SUBST(INCLUDES)
+AC_SUBST(CONFIGUREFLAGS)
+
+LIBRARY_NAME=${ac_unique_file%.*}
+
+## store the flags passed to us
+## is there no way to get the flags without quotes?
+#CONFIGUREFLAGS=${ac_configure_args}
+## and is this solution portable? time will show....
+CONFIGUREFLAGS=$(echo ${ac_configure_args} | sed "s/'//g")
-AC_ARG_WITH(version, [ --with-version=<ver> enforce a certain iemmatrix-version (e.g. 0.1)])
AC_ARG_WITH(extension, [ --with-extension=<ext> enforce a certain extension for the dynamic library (e.g. dll)])
AC_ARG_WITH(pdpath, [ --with-pd=</path/to/pd> where to look for pd-headers and and -libs])
+
AC_ARG_ENABLE(PIC, [ --disable-PIC disable compilation with PIC-flag])
+if test "x" = "x${enable_PIC}" ; then
+ enable_PIC="${with_PIC}"
+fi
+
+if test "x$enable_PIC" != "xno"; then
+ AC_CHECK_CFLAGS([-fPIC])
+fi
+
+
+AC_ARG_ENABLE(library,[ --disable-library split the library into single externals])
+if test "xno" != "x${enable_library}" ; then
+dnl LATER: find a more generic way to generate the .._LIBRARY define
+ BUILDLIBRARY="-DLIBRARY"
+fi
+
+
+dnl check for "-mms-bitfields" cflag
+dnl it would make things so easy: AC_CHECK_FLAG([-mms-bitfields],,)
+AC_CHECK_CFLAGS([-mms-bitfields])
+
dnl Checks for libraries.
dnl Replace `main' with a function in -lc:
@@ -77,25 +109,6 @@ else
AC_SUBST(MAKEDEP_FLAGS, "-M")
fi
-dnl check for "-mms-bitfields" cflag
-dnl why is there no generic compiler-check for a given flag ?
-dnl it would make things so easy: AC_CHECK_FLAG([-mms-bitfields],,)
-AC_MSG_CHECKING("ms-bitfields")
-cat > conftest.c << EOF
-int main(){
- return 0;
-}
-EOF
-if ${CC} ${INCLUDES} ${DFLAGS} -o conftest.o conftest.c ${CFLAGS} -mms-bitfields > /dev/null 2>&1
-then
- echo "yes"
- CFLAGS="${CFLAGS} -mms-bitfields"
-else
- echo "no"
-fi
-
-
-
dnl isn't there a better way to check for good linker/stripper ?
@@ -117,124 +130,151 @@ fi
LD=${LD:=$CC}
dnl if we don't have $STRIP set, we set it to ${host}-strip or strip
-AC_CHECK_TOOL([STRIP], [strip], [true])
-AC_MSG_CHECKING([if strip is GNU strip])
-if $STRIP -V 2>&1 | grep GNU > /dev/null
-then
- AC_SUBST(STRIPFLAGS, "--strip-unneeded")
- AC_MSG_RESULT([yes])
-else
- AC_SUBST(STRIPFLAGS,"-x")
- AC_MSG_RESULT([no])
-fi
-
-DFLAGS=""
-
-
-if test "x$enable_PIC" != "xno"; then
-AC_MSG_CHECKING("PIC")
-cat > conftest.c << EOF
-int main(){
- return 0;
-}
-EOF
-if ${CC} ${INCLUDES} ${DFLAGS} -o conftest.o conftest.c ${CFLAGS} -fPIC > /dev/null 2>&1
+if test "x$STRIP" = "x"
then
- echo "yes"
- CFLAGS="${CFLAGS} -fPIC"
-else
- echo "no"
-fi
+ if test "x$host" != "x"
+ then
+ STRIP=${host}-strip
+ if $(which ${host}-strip > /dev/null)
+ then
+ :
+ else
+ STRIP="echo fake strip"
+ fi
+ else
+ STRIP=strip
+ fi
fi
+dnl STRIP=${STRIP:=strip}
dnl
-dnl OK, checks for machines are here now
+dnl OK, checks which machines are here now
+dnl this needs some rethinking when cross-compiling (?)
dnl
+AC_CHECK_LDFLAGS([-export_dynamic -shared])
+
if test `uname -s` = Linux;
then
- LFLAGS="-export_dynamic -shared"
- CFLAGS="$CFLAGS"
EXT=pd_linux
+ STRIPFLAGS="--strip-unneeded"
+ if test "$enable_icc" = "yes"; then
+ CC=icc
+ fi
+
+ if test $CC = "icc"
+ then
+ LD=$CC
+ AC_CHECK_LDFLAGS([-ip -ipo_obj])
+ AC_CHECK_CFLAGS([-ip -ipo_obj])
+ fi
fi
dnl This should use '-bundle_loader /path/to/pd/bin/pd' instead of'-undefined suppress'
dnl then strip might do something
if test `uname -s` = Darwin;
then
- LD=cc
- LFLAGS="-bundle -undefined suppress -flat_namespace"
+ LD=${CC}
EXT=pd_darwin
+ STRIP="echo faking strip"
+ STRIPFLAGS=
+
+ if test "$enable_lpt" = "yes"; then
+ AC_MSG_ERROR("lpt not supported on this platform");
+ fi
+ if test "$enable_lpt" = ""; then
+ AC_MSG_WARN("lpt not supported on this platform - disabling");
+ enable_lpt="no";
+ fi
fi
-if test `uname | sed -e 's/^MINGW.*/NT/'` = NT;
+#AC_CHECK_LDFLAGS([-dynamiclib -mmacosx-version-min=10.3 -undefined dynamic_lookup],
+# ,
+ AC_CHECK_LDFLAGS([-bundle -undefined suppress -flat_namespace])
+# )
+
+if test `uname | sed -e 's/^MINGW.*/NT/'` = NT ;
then
- LD=gcc
- INCLUDES="-I@prefix@/src"
- DFLAGS="-D__WIN32__"
- LFLAGS="-shared @prefix@/bin/pd.dll"
+ LD=${CC}
+# LDFLAGS="-shared pd.dll"
EXT=dll
-else
- PDLIBDIR="/lib/pd"
fi
+AC_CHECK_LDFLAGS([-shared pd.dll])
+
if test `uname -s` = IRIX64;
then
- LFLAGS="-n32 -DUNIX -DIRIX -DN32 -woff 1080,1064,1185 \
+ LDFLAGS="-n32 -DUNIX -DIRIX -DN32 -woff 1080,1064,1185 \
-OPT:roundoff=3 -OPT:IEEE_arithmetic=3 -OPT:cray_ivdep=true \
-shared -rdata_shared"
EXT=pd_irix6
dnl DFLAGS="-DUNIX -DIRIX6"
+ STRIPFLAGS="--strip-unneeded"
+ if test "$enable_lpt" = "yes"; then
+ AC_MSG_ERROR("lpt not supported on this platform");
+ fi
+ if test "$enable_lpt" = ""; then
+ AC_MSG_WARN("lpt not supported on this platform - disabling");
+ enable_lpt="no";
+ fi
fi
if test `uname -s` = IRIX32;
then
- LFLAGS="-o32 -DUNIX -DIRIX -O2
+ LDFLAGS="-o32 -DUNIX -DIRIX -O2
-shared -rdata_shared"
EXT=pd_irix5
dnl DFLAGS="-DUNIX -DIRIX5"
+ STRIPFLAGS="--strip-unneeded"
+ if test "$enable_lpt" = "yes"; then
+ AC_MSG_ERROR("lpt not supported on this platform");
+ fi
+ if test "$enable_lpt" = ""; then
+ AC_MSG_WARN("lpt not supported on this platform - disabling");
+ enable_lpt="no";
+ fi
fi
-
if test "x$with_extension" != "x"
then
EXT=$with_extension
fi
-dnl check for iemmatrix-version (but why...)
-AC_MSG_CHECKING("iemmatrix-version")
+dnl check for ${LIBRARY_NAME}-version (but why...)
+AC_MSG_CHECKING("library version")
if test "$with_version" != ""
then
echo -n "($with_version)... "
- IEMMATRIX_VERSION="$with_version"
+ LIBRARY_VERSION="$with_version"
else
if test "x$cross_compiling" = "xno"
then
cat > conftest.c << EOF
#include <stdio.h>
-#include "iemmatrix.h"
+#include "${LIBRARY_NAME}.h"
int main(){
printf("%s\n", VERSION);
return 0;
}
EOF
-if $CC $INCLUDES -o conftest.o conftest.c > /dev/null 2>&1
+if ${CC} ${INCLUDES} -o conftest.o conftest.c > /dev/null 2>&1
then
- IEMMATRIX_VERSION=`./conftest.o`
- echo "$IEMMATRIX_VERSION"
+ LIBRARY_VERSION=`./conftest.o`
+ echo "$LIBRARY_VERSION"
else
- IEMMATRIX_VERSION=""
+ LIBRARY_VERSION=""
echo "(unknown)"
fi
else
- IEMMATRIX_VERSION="X"
+ LIBRARY_VERSION="X"
echo "(X)"
fi
fi
-AC_OUTPUT(Makefile)
+LFLAGS=${LDFLAGS}
+AC_OUTPUT(Make.config)
-rm -f conftest.*
+dnl rm -f conftest.*