summaryrefslogtreecommitdiff
path: root/libffi
diff options
context:
space:
mode:
authorIan Lynagh <igloo@earth.li>2009-04-26 11:42:15 +0000
committerIan Lynagh <igloo@earth.li>2009-04-26 11:42:15 +0000
commit34cc75e1a62638f2833815746ebce0a9114dc26b (patch)
treeef21e8fd7af1356beea9cce7d6efb8a65374e24c /libffi
parent74e1368d4688ee16f6decdf2cd3ebe27506b26ba (diff)
downloadhaskell-34cc75e1a62638f2833815746ebce0a9114dc26b.tar.gz
GHC new build system megapatch
Diffstat (limited to 'libffi')
-rw-r--r--libffi/Makefile202
-rw-r--r--libffi/ghc.mk193
-rw-r--r--libffi/libffi.autotools-update.patch (renamed from libffi/libffi-autotools-update.patch)0
-rw-r--r--libffi/libffi.dllize-3.0.6.patch (renamed from libffi/libffi-dllize-3.0.6.patch)0
-rw-r--r--libffi/package.conf.in6
-rw-r--r--libffi/tarball/libffi-3.0.6.tar.gz (renamed from libffi/libffi-3.0.6.tar.gz)bin717171 -> 717171 bytes
6 files changed, 199 insertions, 202 deletions
diff --git a/libffi/Makefile b/libffi/Makefile
index cee5bb95c3..3d6f949584 100644
--- a/libffi/Makefile
+++ b/libffi/Makefile
@@ -1,199 +1,3 @@
-
-TOP=..
-DONT_WANT_STD_GHCI_LIB_RULE=YES
-DONT_WANT_STD_LIBRARY=YES
-
-include $(TOP)/mk/boilerplate.mk
-# Override haddock generation for this package
-HADDOCK_DOCS=NO
-
-# We package libffi as Haskell package for two reasons:
-
-# 1) GHC uses different names for shared and static libs, so it can
-# choose the lib variant to link with on its own. With regular
-# libtool styled shared lib names, the linker would interfer and
-# link against the shared lib variant even when GHC runs in -static
-# mode.
-# 2) The first issue isn't a problem when a shared lib of libffi would
-# be installed in system locations, but we do not assume that. So,
-# when running in -dynamic mode, we must either install libffi to
-# system locations ourselves, or we must add its location to
-# respective environment variable, (DY)LD_LIBRARY_PATH etc...before
-# we call dynamically linked binaries. Especially, the latter is
-# necessary as GHC calls binary it produced before its installation
-# phase. However, both mechanism, installing to system locations or
-# modifying (DY)LD_LIBRARY_PATH, are already in place for Haskell
-# packages so with packaging libffi as Haskell package we reuse
-# them naturally.
-
-PACKAGE=ffi
-# -----------------------------------------------------------------------------
-#
-# We use libffi's own configuration stuff.
-
-PLATFORM := $(shell echo $(HOSTPLATFORM) | sed 's/i[567]86/i486/g')
-
-# 2007-09-26
-# set -o igncr
-# is not a valid command on non-Cygwin-systems.
-# Let it fail silently instead of aborting the build.
-#
-# 2007-07-05
-# We do
-# set -o igncr; export SHELLOPTS
-# here as otherwise checking the size of limbs
-# makes the build fall over on Cygwin. See the thread
-# http://www.cygwin.com/ml/cygwin/2006-12/msg00011.html
-# for more details.
-
-# 2007-07-05
-# Passing
-# as_ln_s='cp -p'
-# isn't sufficient to stop cygwin using symlinks the mingw gcc can't
-# follow, as it isn't used consistently. Instead we put an ln.bat in
-# path that always fails.
-
-LIBFFI_TARBALL := $(firstword $(wildcard libffi*.tar.gz))
-LIBFFI_DIR := $(subst .tar.gz,,$(LIBFFI_TARBALL))
-
-BINDIST_STAMPS = stamp.ffi.build stamp.ffi.configure
-
-ifeq "$(BuildSharedLibs)" "YES"
-STAMP_BUILD = stamp.ffi.build-shared
-STAMP_CONFIGURE = stamp.ffi.configure-shared
-else
-STAMP_BUILD = stamp.ffi.build
-STAMP_CONFIGURE = stamp.ffi.configure
-endif
-
-INSTALL_HEADERS += ffi.h
-STATIC_LIB = libffi.a
-INSTALL_LIBS += libHSffi.a libHSffi_p.a HSffi.o
-
-# We have to add the GHC version to the name of our dynamic libs, because
-# they will be residing in the system location along with dynamic libs from
-# other GHC installations.
-
-HS_DYN_LIB_NAME=libHSffi-ghc$(ProjectVersion)$(soext)
-
-ifeq "$(Windows)" "YES"
-DYNAMIC_PROG = $(HS_DYN_LIB_NAME).a
-DYNAMIC_LIBS = $(HS_DYN_LIB_NAME)
-else
-DYNAMIC_PROG =
-DYNAMIC_LIBS = libffi.so libffi.so.5 libffi.so.5.0.7
-endif
-
-ifeq "$(BuildSharedLibs)" "YES"
-EnableShared=yes
-else
-EnableShared=no
-endif
-
-ifeq "$(BuildSharedLibs)" "YES"
-INSTALL_LIBS += $(HS_DYN_LIB_NAME)
-ifeq "$(Windows)" "YES"
-INSTALL_PROGS += $(HS_DYN_LIB_NAME).a
-endif
-endif
-
-install all :: $(INSTALL_HEADERS) $(INSTALL_LIBS) $(INSTALL_PROGS)
-
-# We have to fake a non-working ln for configure, so that the fallback
-# option (cp -p) gets used instead. Otherwise the libffi build system
-# will use cygwin symbolic linkks which cannot be read by mingw gcc.
-# The same trick is played by the GMP build in ../gmp.
-
-$(STAMP_CONFIGURE):
- $(RM) -rf $(LIBFFI_DIR) build
- $(TAR) -zxf $(LIBFFI_TARBALL)
- mv $(LIBFFI_DIR) build
- chmod +x ln
- patch -p0 < libffi-dllize-3.0.6.patch
-
- # This patch is just the resulting delta from running automake, autoreconf, libtoolize --force --copy
- patch -p0 < libffi-autotools-update.patch
-
- (set -o igncr 2>/dev/null) && set -o igncr; export SHELLOPTS; \
- PATH=`pwd`:$$PATH; \
- export PATH; \
- cd build && \
- CC=$(WhatGccIsCalled) $(SHELL) configure \
- --enable-static=yes \
- --enable-shared=$(EnableShared) \
- --host=$(PLATFORM) --build=$(PLATFORM)
-
- # libffi.so needs to be built with the correct soname.
- # NOTE: this builds libffi_convience.so with the incorrect
- # soname, but we don't need that anyway!
- $(CP) build/libtool build/libtool.orig
- sed -e s/soname_spec=.*/soname_spec="$(HS_DYN_LIB_NAME)"/ build/libtool.orig > build/libtool
-
- # We don't want libtool's cygwin hacks
- $(CP) build/libtool build/libtool.orig
- sed -e s/dlname=\'\$$tdlname\'/dlname=\'\$$dlname\'/ build/libtool.orig > build/libtool
-
- touch $@
-
-ffi.h: $(STAMP_CONFIGURE)
- $(CP) build/include/ffi.h .
-
-$(STAMP_BUILD): $(STAMP_CONFIGURE)
- $(MAKE) -C build MAKEFLAGS=
- (cd build; ./libtool --mode=install cp libffi.la $(FPTOOLS_TOP_ABS)/libffi)
- $(CP) $(STATIC_LIB) libHSffi.a
- $(CP) $(STATIC_LIB) libHSffi_p.a
- touch $@
-
-libHSffi.a libHSffi_p.a: $(STAMP_BUILD)
-
-all :: libHSffi.a libHSffi_p.a
-
-# The GHCi import lib isn't needed as compiler/ghci/Linker.lhs + rts/Linker.c
-# link the interpreted references to FFI to the compiled FFI.
-# Instead of adding libffi to the list preloaded packages (see
-# compiler/ghci/Linker.lhs:emptyPLS) we generate an empty HSffi.o
-
-HSffi.o: libHSffi.a
- touch empty.c
- $(CC) -c empty.c -o HSffi.o
-
-all :: HSffi.o
-
-ifeq "$(BuildSharedLibs)" "YES"
-ifeq "$(Windows)" "YES"
-# Windows libtool creates <soname>.dll, and as we already patched that
-# there is no need to copy from libffi.dll to libHSffi...dll.
-# However, the renaming is still required for the import library
-# libffi.dll.a.
-$(HS_DYN_LIB_NAME).a: $(STAMP_BUILD)
- $(CP) libffi.dll.a $(HS_DYN_LIB_NAME).a
-all :: $(HS_DYN_LIB_NAME).a
-
-else
-# Rename libffi.so to libHSffi...so
-$(HS_DYN_LIB_NAME): $(DYNAMIC_LIBS)
- $(CP) $(word 1,$(DYNAMIC_LIBS)) $(HS_DYN_LIB_NAME)
-
-all :: $(HS_DYN_LIB_NAME)
-endif
-endif
-
-clean distclean maintainer-clean ::
- $(RM) -f stamp.ffi.* ffi.h empty.c
- $(RM) -f libffi.a libffi.la $(DYNAMIC_PROG) $(DYNAMIC_LIBS) $(HS_DYN_LIB_NAME) $(HS_DYN_LIB_NAME).a
- $(RM) -rf build
-
-#-----------------------------------------------------------------------------
-#
-# binary-dist
-
-include $(TOP)/mk/target.mk
-
-BINDIST_EXTRAS += package.conf.in
-BINDIST_EXTRAS += $(BINDIST_STAMPS)
-BINDIST_EXTRAS += $(INSTALL_PROGS)
-BINDIST_EXTRAS += $(INSTALL_LIBS)
-BINDIST_EXTRAS += $(INSTALL_HEADERS)
-include $(TOP)/mk/bindist.mk
-
+dir = libffi
+TOP = ../..
+include $(TOP)/mk/sub-makefile.mk
diff --git a/libffi/ghc.mk b/libffi/ghc.mk
new file mode 100644
index 0000000000..eca8dd2e11
--- /dev/null
+++ b/libffi/ghc.mk
@@ -0,0 +1,193 @@
+
+# We package libffi as Haskell package for two reasons:
+
+# 1) GHC uses different names for shared and static libs, so it can
+# choose the lib variant to link with on its own. With regular
+# libtool styled shared lib names, the linker would interfer and
+# link against the shared lib variant even when GHC runs in -static
+# mode.
+# 2) The first issue isn't a problem when a shared lib of libffi would
+# be installed in system locations, but we do not assume that. So,
+# when running in -dynamic mode, we must either install libffi to
+# system locations ourselves, or we must add its location to
+# respective environment variable, (DY)LD_LIBRARY_PATH etc...before
+# we call dynamically linked binaries. Especially, the latter is
+# necessary as GHC calls binary it produced before its installation
+# phase. However, both mechanism, installing to system locations or
+# modifying (DY)LD_LIBRARY_PATH, are already in place for Haskell
+# packages so with packaging libffi as Haskell package we reuse
+# them naturally.
+
+# -----------------------------------------------------------------------------
+#
+# We use libffi's own configuration stuff.
+
+PLATFORM := $(shell echo $(HOSTPLATFORM) | sed 's/i[567]86/i486/g')
+
+# 2007-09-26
+# set -o igncr
+# is not a valid command on non-Cygwin-systems.
+# Let it fail silently instead of aborting the build.
+#
+# 2007-07-05
+# We do
+# set -o igncr; export SHELLOPTS
+# here as otherwise checking the size of limbs
+# makes the build fall over on Cygwin. See the thread
+# http://www.cygwin.com/ml/cygwin/2006-12/msg00011.html
+# for more details.
+
+# 2007-07-05
+# Passing
+# as_ln_s='cp -p'
+# isn't sufficient to stop cygwin using symlinks the mingw gcc can't
+# follow, as it isn't used consistently. Instead we put an ln.bat in
+# path that always fails.
+
+ifeq "$(BuildSharedLibs)" "YES"
+libffi_STAMP_BUILD = libffi/stamp.ffi.build-shared
+libffi_STAMP_CONFIGURE = libffi/stamp.ffi.configure-shared
+else
+libffi_STAMP_BUILD = libffi/stamp.ffi.build
+libffi_STAMP_CONFIGURE = libffi/stamp.ffi.configure
+endif
+
+BINDIST_STAMPS = libffi/stamp.ffi.build libfii/stamp.ffi.configure
+
+INSTALL_HEADERS += libffi/ffi.h
+libffi_STATIC_LIB = libffi/libffi.a
+INSTALL_LIBS += libffi/libHSffi.a libffi/HSffi.o
+
+# We have to add the GHC version to the name of our dynamic libs, because
+# they will be residing in the system location along with dynamic libs from
+# other GHC installations.
+
+libffi_HS_DYN_LIB_NAME=libHSffi-ghc$(ProjectVersion)$(soext)
+libffi_HS_DYN_LIB_PATH=libffi/$(libffi_HS_DYN_LIB_NAME)
+
+ifeq "$(Windows)" "YES"
+libffi_DYNAMIC_PROG = $(libffi_HS_DYN_LIB_PATH).a
+libffi_DYNAMIC_LIBS = $(libffi_HS_DYN_LIB_PATH)
+else
+libffi_DYNAMIC_PROG =
+libffi_DYNAMIC_LIBS = libffi/libffi.so libffi/libffi.so.5 libffi/libffi.so.5.0.7
+endif
+
+ifeq "$(BuildSharedLibs)" "YES"
+libffi_EnableShared=yes
+else
+libffi_EnableShared=no
+endif
+
+ifeq "$(BuildSharedLibs)" "YES"
+INSTALL_LIBS += $(libffi_HS_DYN_LIB_PATH)
+ifeq "$(Windows)" "YES"
+INSTALL_PROGS += $(libffi_HS_DYN_LIB_PATH).a
+endif
+endif
+
+# We have to fake a non-working ln for configure, so that the fallback
+# option (cp -p) gets used instead. Otherwise the libffi build system
+# will use cygwin symbolic linkks which cannot be read by mingw gcc.
+# The same trick is played by the GMP build in ../gmp.
+
+ifneq "$(BINDIST)" "YES"
+$(libffi_STAMP_CONFIGURE):
+ $(RM) -rf $(LIBFFI_DIR) libffi/build
+ cd libffi && $(TAR) -zxf tarball/libffi*.tar.gz
+ mv libffi/libffi-* libffi/build
+ chmod +x libffi/ln
+ cd libffi && $(PATCH) -p0 < libffi.dllize-3.0.6.patch
+
+ # This patch is just the resulting delta from running automake, autoreconf, libtoolize --force --copy
+ cd libffi && $(PATCH) -p0 < libffi.autotools-update.patch
+
+ cd libffi && \
+ (set -o igncr 2>/dev/null) && set -o igncr; export SHELLOPTS; \
+ PATH=`pwd`:$$PATH; \
+ export PATH; \
+ cd build && \
+ CC=$(WhatGccIsCalled) $(SHELL) configure \
+ --enable-static=yes \
+ --enable-shared=$(libffi_EnableShared) \
+ --host=$(PLATFORM) --build=$(PLATFORM)
+
+ # libffi.so needs to be built with the correct soname.
+ # NOTE: this builds libffi_convience.so with the incorrect
+ # soname, but we don't need that anyway!
+ cd libffi && \
+ $(CP) build/libtool build/libtool.orig; \
+ sed -e s/soname_spec=.*/soname_spec="$(libffi_HS_DYN_LIB_NAME)"/ build/libtool.orig > build/libtool
+
+ # We don't want libtool's cygwin hacks
+ cd libffi && \
+ $(CP) build/libtool build/libtool.orig; \
+ sed -e s/dlname=\'\$$tdlname\'/dlname=\'\$$dlname\'/ build/libtool.orig > build/libtool
+
+ touch $@
+
+libffi/ffi.h: $(libffi_STAMP_CONFIGURE)
+ $(CP) libffi/build/include/ffi.h $@
+
+$(libffi_STAMP_BUILD): $(libffi_STAMP_CONFIGURE)
+ cd libffi && \
+ $(MAKE) -C build MAKEFLAGS=; \
+ (cd build; ./libtool --mode=install cp libffi.la $(TOP)/libffi)
+ $(CP) $(libffi_STATIC_LIB) libffi/libHSffi.a
+ $(CP) $(libffi_STATIC_LIB) libffi/libHSffi_p.a
+ touch $@
+
+libffi/libHSffi.a libffi/libHSffi_p.a: $(libffi_STAMP_BUILD)
+
+all_libffi : libffi/libHSffi.a libffi/libHSffi_p.a
+
+# The GHCi import lib isn't needed as compiler/ghci/Linker.lhs + rts/Linker.c
+# link the interpreted references to FFI to the compiled FFI.
+# Instead of adding libffi to the list preloaded packages (see
+# compiler/ghci/Linker.lhs:emptyPLS) we generate an empty HSffi.o
+
+libffi/HSffi.o: libffi/libHSffi.a
+ cd libffi && \
+ touch empty.c; \
+ $(CC) -c empty.c -o HSffi.o
+
+all_libffi : libffi/HSffi.o
+
+ifeq "$(BuildSharedLibs)" "YES"
+ifeq "$(Windows)" "YES"
+# Windows libtool creates <soname>.dll, and as we already patched that
+# there is no need to copy from libffi.dll to libHSffi...dll.
+# However, the renaming is still required for the import library
+# libffi.dll.a.
+$(libffi_HS_DYN_LIB_PATH).a: $(libffi_STAMP_BUILD)
+ $(CP) libffi/libffi.dll.a $(libffi_HS_DYN_LIB_PATH).a
+all_libffi : $(libffi_HS_DYN_LIB_PATH).a
+
+else
+# Rename libffi.so to libHSffi...so
+$(libffi_HS_DYN_LIB_PATH): $(libffi_DYNAMIC_LIBS)
+ $(CP) $(word 1,$(libffi_DYNAMIC_LIBS)) $(libffi_HS_DYN_LIB_PATH)
+
+all_libffi : $(libffi_HS_DYN_LIB_PATH)
+endif
+endif
+
+$(eval $(call clean-target,libffi,, \
+ libffi/build libffi/stamp.ffi.* libffi/ffi.h libffi/empty.c \
+ libffi/libffi.a libffi/libffi.la \
+ libffi/HSffi.o libffi/libHSffi.a libffi/libHSffi_p.a \
+ $(libffi_DYNAMIC_PROG) $(libffi_DYNAMIC_LIBS) \
+ $(libffi_HS_DYN_LIB_NAME) $(libffi_HS_DYN_LIB_NAME).a))
+endif
+
+#-----------------------------------------------------------------------------
+# Do the package config
+
+$(eval $(call manual-package-config,libffi))
+
+#-----------------------------------------------------------------------------
+#
+# binary-dist
+
+BINDIST_EXTRAS += libffi/package.conf.in
+
diff --git a/libffi/libffi-autotools-update.patch b/libffi/libffi.autotools-update.patch
index dd9d9c97c9..dd9d9c97c9 100644
--- a/libffi/libffi-autotools-update.patch
+++ b/libffi/libffi.autotools-update.patch
diff --git a/libffi/libffi-dllize-3.0.6.patch b/libffi/libffi.dllize-3.0.6.patch
index 6a19f1119d..6a19f1119d 100644
--- a/libffi/libffi-dllize-3.0.6.patch
+++ b/libffi/libffi.dllize-3.0.6.patch
diff --git a/libffi/package.conf.in b/libffi/package.conf.in
index afb3737f0c..eea9c401d5 100644
--- a/libffi/package.conf.in
+++ b/libffi/package.conf.in
@@ -1,4 +1,4 @@
-name: PACKAGE
+name: ffi
version: 1.0
license: BSD3
maintainer: glasgow-haskell-users@haskell.org
@@ -11,7 +11,7 @@ import-dirs:
#ifdef INSTALLING
library-dirs: LIB_DIR
#else /* !INSTALLING */
-library-dirs: FPTOOLS_TOP_ABS"/libffi"
+library-dirs: TOP"/libffi"
#endif
hs-libraries: "HSffi"
@@ -19,7 +19,7 @@ hs-libraries: "HSffi"
#ifdef INSTALLING
include-dirs: INCLUDE_DIR
#else /* !INSTALLING */
-include-dirs: FPTOOLS_TOP_ABS"/libffi/build/include"
+include-dirs: TOP"/libffi/build/include"
#endif
depends:
diff --git a/libffi/libffi-3.0.6.tar.gz b/libffi/tarball/libffi-3.0.6.tar.gz
index dd7ffc47f8..dd7ffc47f8 100644
--- a/libffi/libffi-3.0.6.tar.gz
+++ b/libffi/tarball/libffi-3.0.6.tar.gz
Binary files differ