diff options
author | Ian Lynagh <igloo@earth.li> | 2009-04-26 11:42:15 +0000 |
---|---|---|
committer | Ian Lynagh <igloo@earth.li> | 2009-04-26 11:42:15 +0000 |
commit | 34cc75e1a62638f2833815746ebce0a9114dc26b (patch) | |
tree | ef21e8fd7af1356beea9cce7d6efb8a65374e24c /libffi | |
parent | 74e1368d4688ee16f6decdf2cd3ebe27506b26ba (diff) | |
download | haskell-34cc75e1a62638f2833815746ebce0a9114dc26b.tar.gz |
GHC new build system megapatch
Diffstat (limited to 'libffi')
-rw-r--r-- | libffi/Makefile | 202 | ||||
-rw-r--r-- | libffi/ghc.mk | 193 | ||||
-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.in | 6 | ||||
-rw-r--r-- | libffi/tarball/libffi-3.0.6.tar.gz (renamed from libffi/libffi-3.0.6.tar.gz) | bin | 717171 -> 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 Binary files differindex dd7ffc47f8..dd7ffc47f8 100644 --- a/libffi/libffi-3.0.6.tar.gz +++ b/libffi/tarball/libffi-3.0.6.tar.gz |