X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=libffi%2FMakefile;h=8a1f1106559cadf7e7ff962b767b8d6aad436884;hb=960a5edb6ac87c7d85e36f4b70be8da0175819f7;hp=073620e3330b072581dead60af72f0691f1d48dd;hpb=ae1e5366aba0cdd5711a506a1629d8c73582a861;p=ghc-hetmet.git diff --git a/libffi/Makefile b/libffi/Makefile index 073620e..8a1f110 100644 --- a/libffi/Makefile +++ b/libffi/Makefile @@ -4,6 +4,8 @@ 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: @@ -54,25 +56,34 @@ PLATFORM := $(shell echo $(HOSTPLATFORM) | sed 's/i[567]86/i486/g') LIBFFI_TARBALL := $(firstword $(wildcard libffi*.tar.gz)) LIBFFI_DIR := $(subst .tar.gz,,$(LIBFFI_TARBALL)) -BINDIST_STAMPS = stamp.ffi +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 += $(STATIC_LIB) +INSTALL_LIBS += libHSffi.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 = libffi.dll.a -DYNAMIC_LIBS = libffi-3.dll -RENAME_LIBS = +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.5 +DYNAMIC_LIBS = libffi.so libffi.so.5 libffi.so.5.0.7 endif -HS_DYN_LIB_NAME=libHSffi-ghc$(ProjectVersion)$(soext) - ifeq "$(BuildSharedLibs)" "YES" EnableShared=yes else @@ -80,8 +91,10 @@ EnableShared=no endif ifeq "$(BuildSharedLibs)" "YES" -INSTALL_LIBS += $(DYNAMIC_LIBS) -INSTALL_PROGS += $(DYNAMIC_PROGS) +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) @@ -91,11 +104,16 @@ install all :: $(INSTALL_HEADERS) $(INSTALL_LIBS) $(INSTALL_PROGS) # will use cygwin symbolic linkks which cannot be read by mingw gcc. # The same trick is played by the GMP build in ../gmp. -stamp.ffi.configure: +$(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; \ @@ -108,21 +126,26 @@ stamp.ffi.configure: # 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! - sed -i -e s/soname_spec=.*/soname_spec="$(HS_DYN_LIB_NAME)"/ build/libtool + $(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.ffi.configure +ffi.h: $(STAMP_CONFIGURE) $(CP) build/include/ffi.h . -stamp.ffi.build: stamp.ffi.configure +$(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 $@ -$(STATIC_LIB) $(DYNAMIC_LIBS) $(DYNAMIC_PROG): stamp.ffi.build - -libHSffi.a libHSffi_p.a: $(STATIC_LIB) - cp $(STATIC_LIB) $@ +libHSffi.a libHSffi_p.a: $(STAMP_BUILD) all :: libHSffi.a libHSffi_p.a @@ -138,15 +161,27 @@ HSffi.o: libHSffi.a all :: HSffi.o ifeq "$(BuildSharedLibs)" "YES" +ifeq "$(Windows)" "YES" +# Windows libtool creates .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) + $(CP) $(word 1,$(DYNAMIC_LIBS)) $(HS_DYN_LIB_NAME) all :: $(HS_DYN_LIB_NAME) endif +endif clean distclean maintainer-clean :: - $(RM) -f stamp.ffi.configure stamp.ffi.build ffi.h empty.c - $(RM) -f libffi.a libffi.la $(DYNAMIC_PROG) $(DYNAMIC_LIBS) $(ORIG_DYNAMIC_LIBS) + $(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 #----------------------------------------------------------------------------- @@ -155,6 +190,7 @@ clean distclean maintainer-clean :: include $(TOP)/mk/target.mk +BINDIST_EXTRAS += package.conf.in BINDIST_EXTRAS += $(BINDIST_STAMPS) BINDIST_EXTRAS += $(INSTALL_PROGS) BINDIST_EXTRAS += $(INSTALL_LIBS)