X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=libffi%2FMakefile;h=8a1f1106559cadf7e7ff962b767b8d6aad436884;hb=960a5edb6ac87c7d85e36f4b70be8da0175819f7;hp=a85372dea62cd74b5e675b0dd6442688e070ee76;hpb=960b35ddc178f6b8af1a8809aecb0a43177abbc8;p=ghc-hetmet.git diff --git a/libffi/Makefile b/libffi/Makefile index a85372d..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 @@ -132,23 +155,33 @@ all :: libHSffi.a libHSffi_p.a # compiler/ghci/Linker.lhs:emptyPLS) we generate an empty HSffi.o HSffi.o: libHSffi.a - ld -r -o HSffi.o /dev/null # this is intentional -# $(RM) -fr unpack -# (mkdir unpack; cd unpack; ar x ../libHSffi.a; ld -r -o ../HSffi.o *.o) -# $(RM) -fr unpack + touch empty.c + $(CC) -c empty.c -o HSffi.o 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 - $(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 #----------------------------------------------------------------------------- @@ -157,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)