Kresten's closure work. Initial checkin.
This commit is contained in:
@@ -1,3 +1,33 @@
|
|||||||
|
1999-08-02 Kresten Krab Thorup <krab@dominiq.is.s.u-tokyo.ac.jp>
|
||||||
|
|
||||||
|
* src/x86/ffi.c (ffi_closure_SYSV): New function.
|
||||||
|
(ffi_prep_incoming_args_SYSV): Ditto.
|
||||||
|
(ffi_prep_closure): Ditto.
|
||||||
|
(ffi_closure_raw_SYSV): Ditto.
|
||||||
|
(ffi_prep_raw_closure): More ditto.
|
||||||
|
(ffi_call_raw): Final ditto.
|
||||||
|
|
||||||
|
* include/ffi.h.in:
|
||||||
|
|
||||||
|
* src/x86/ffi.c (ffi_prep_cif_machdep): Added case for
|
||||||
|
FFI_TYPE_UINT64.
|
||||||
|
|
||||||
|
* Makefile.am (libffi_la_common_SOURCES): Added raw_api.c
|
||||||
|
|
||||||
|
* src/raw_api.c: New file.
|
||||||
|
|
||||||
|
* include/ffi.h.in (ffi_raw): New type.
|
||||||
|
(UINT_ARG, SINT_ARG): New defines.
|
||||||
|
(ffi_closure, ffi_raw_closure): New types.
|
||||||
|
(ffi_prep_closure, ffi_prep_raw_closure): New declarations.
|
||||||
|
|
||||||
|
* configure.in: Add check for endianness and sizeof void*.
|
||||||
|
|
||||||
|
* src/x86/sysv.S (ffi_call_SYSV): Call fixup routine via argument,
|
||||||
|
instead of directly.
|
||||||
|
|
||||||
|
* configure: Rebuilt.
|
||||||
|
|
||||||
Thu Jul 8 14:28:42 1999 Anthony Green <green@cygnus.com>
|
Thu Jul 8 14:28:42 1999 Anthony Green <green@cygnus.com>
|
||||||
|
|
||||||
* configure.in: Add x86 and powerpc BeOS configurations.
|
* configure.in: Add x86 and powerpc BeOS configurations.
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ TARGET_SRC_ARM = src/arm/sysv.S src/arm/ffi.c
|
|||||||
|
|
||||||
##libffi_la_SOURCES = src/debug.c src/prep_cif.c src/types.c $(TARGET_SRC_@TARGET@)
|
##libffi_la_SOURCES = src/debug.c src/prep_cif.c src/types.c $(TARGET_SRC_@TARGET@)
|
||||||
## Work around automake deficiency
|
## Work around automake deficiency
|
||||||
libffi_la_common_SOURCES = src/debug.c src/prep_cif.c src/types.c
|
libffi_la_common_SOURCES = src/debug.c src/prep_cif.c src/types.c src/raw_api.c
|
||||||
if MIPS_GCC
|
if MIPS_GCC
|
||||||
libffi_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_MIPS_GCC)
|
libffi_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_MIPS_GCC)
|
||||||
endif
|
endif
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Makefile.in generated automatically by automake 1.4a from Makefile.am
|
# Makefile.in generated automatically by automake 1.4 from Makefile.am
|
||||||
|
|
||||||
# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
|
# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
|
||||||
# This Makefile.in is free software; the Free Software Foundation
|
# This Makefile.in is free software; the Free Software Foundation
|
||||||
@@ -10,6 +10,7 @@
|
|||||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||||
# PARTICULAR PURPOSE.
|
# PARTICULAR PURPOSE.
|
||||||
|
|
||||||
|
|
||||||
SHELL = @SHELL@
|
SHELL = @SHELL@
|
||||||
|
|
||||||
srcdir = @srcdir@
|
srcdir = @srcdir@
|
||||||
@@ -44,10 +45,9 @@ AUTOMAKE = @AUTOMAKE@
|
|||||||
AUTOHEADER = @AUTOHEADER@
|
AUTOHEADER = @AUTOHEADER@
|
||||||
|
|
||||||
INSTALL = @INSTALL@
|
INSTALL = @INSTALL@
|
||||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
|
||||||
INSTALL_DATA = @INSTALL_DATA@
|
INSTALL_DATA = @INSTALL_DATA@
|
||||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||||
INSTALL_STRIP_FLAG =
|
|
||||||
transform = @program_transform_name@
|
transform = @program_transform_name@
|
||||||
|
|
||||||
NORMAL_INSTALL = :
|
NORMAL_INSTALL = :
|
||||||
@@ -58,37 +58,20 @@ PRE_UNINSTALL = :
|
|||||||
POST_UNINSTALL = :
|
POST_UNINSTALL = :
|
||||||
host_alias = @host_alias@
|
host_alias = @host_alias@
|
||||||
host_triplet = @host@
|
host_triplet = @host@
|
||||||
AMTAR = @AMTAR@
|
|
||||||
AMTARFLAGS = @AMTARFLAGS@
|
|
||||||
AS = @AS@
|
|
||||||
CC = @CC@
|
CC = @CC@
|
||||||
DLLTOOL = @DLLTOOL@
|
|
||||||
EXEEXT = @EXEEXT@
|
EXEEXT = @EXEEXT@
|
||||||
LD = @LD@
|
|
||||||
LIBTOOL = @LIBTOOL@
|
LIBTOOL = @LIBTOOL@
|
||||||
LN_S = @LN_S@
|
|
||||||
MAINT = @MAINT@
|
|
||||||
MAKEINFO = @MAKEINFO@
|
MAKEINFO = @MAKEINFO@
|
||||||
NM = @NM@
|
|
||||||
PACKAGE = @PACKAGE@
|
PACKAGE = @PACKAGE@
|
||||||
RANLIB = @RANLIB@
|
RANLIB = @RANLIB@
|
||||||
SHELL = @SHELL@
|
SHELL = @SHELL@
|
||||||
TARGET = @TARGET@
|
TARGET = @TARGET@
|
||||||
TARGETDIR = @TARGETDIR@
|
TARGETDIR = @TARGETDIR@
|
||||||
USE_SYMBOL_UNDERSCORE = @USE_SYMBOL_UNDERSCORE@
|
|
||||||
VERSION = @VERSION@
|
VERSION = @VERSION@
|
||||||
|
|
||||||
|
|
||||||
AUTOMAKE_OPTIONS = cygnus
|
AUTOMAKE_OPTIONS = cygnus
|
||||||
|
|
||||||
EXTRA_DIST = LICENSE ChangeLog.v1 src/mips/ffi.c src/mips/n32.S \
|
EXTRA_DIST = LICENSE ChangeLog.v1 src/mips/ffi.c src/mips/n32.S src/mips/n32.s src/mips/o32.S src/mips/o32.s src/sparc/ffi.c src/sparc/v8.S src/x86/ffi.c src/x86/sysv.S src/alpha/ffi.c src/alpha/osf.S src/m68k/ffi.c src/m68k/sysv.S src/powerpc/ffi.c src/powerpc/sysv.S src/powerpc/asm.h src/arm/ffi.c src/arm/sysv.S
|
||||||
src/mips/n32.s src/mips/o32.S src/mips/o32.s \
|
|
||||||
src/sparc/ffi.c src/sparc/v8.S \
|
|
||||||
src/x86/ffi.c src/x86/sysv.S \
|
|
||||||
src/alpha/ffi.c src/alpha/osf.S \
|
|
||||||
src/m68k/ffi.c src/m68k/sysv.S \
|
|
||||||
src/powerpc/ffi.c src/powerpc/sysv.S src/powerpc/asm.h \
|
|
||||||
src/arm/ffi.c src/arm/sysv.S
|
|
||||||
|
|
||||||
|
|
||||||
VPATH = @srcdir@:@srcdir@/src:@srcdir@/src/@TARGETDIR@
|
VPATH = @srcdir@:@srcdir@/src:@srcdir@/src/@TARGETDIR@
|
||||||
@@ -120,20 +103,19 @@ TARGET_SRC_M68K = src/m68k/ffi.c src/m68k/sysv.S
|
|||||||
TARGET_SRC_POWERPC = src/powerpc/ffi.c src/powerpc/sysv.S
|
TARGET_SRC_POWERPC = src/powerpc/ffi.c src/powerpc/sysv.S
|
||||||
TARGET_SRC_ARM = src/arm/sysv.S src/arm/ffi.c
|
TARGET_SRC_ARM = src/arm/sysv.S src/arm/ffi.c
|
||||||
|
|
||||||
libffi_la_common_SOURCES = src/debug.c src/prep_cif.c src/types.c
|
libffi_la_common_SOURCES = src/debug.c src/prep_cif.c src/types.c src/raw_api.c
|
||||||
@MIPS_GCC_TRUE@libffi_la_SOURCES = @MIPS_GCC_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_MIPS_GCC)
|
@MIPS_GCC_TRUE@libffi_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_MIPS_GCC)
|
||||||
@MIPS_SGI_TRUE@libffi_la_SOURCES = @MIPS_SGI_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_MIPS_SGI)
|
@MIPS_SGI_TRUE@libffi_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_MIPS_SGI)
|
||||||
@X86_TRUE@libffi_la_SOURCES = @X86_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_X86)
|
@X86_TRUE@libffi_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_X86)
|
||||||
@SPARC_TRUE@libffi_la_SOURCES = @SPARC_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_SPARC)
|
@SPARC_TRUE@libffi_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_SPARC)
|
||||||
@ALPHA_TRUE@libffi_la_SOURCES = @ALPHA_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_ALPHA)
|
@ALPHA_TRUE@libffi_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_ALPHA)
|
||||||
@M68K_TRUE@libffi_la_SOURCES = @M68K_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_M68K)
|
@M68K_TRUE@libffi_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_M68K)
|
||||||
@POWERPC_TRUE@libffi_la_SOURCES = @POWERPC_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_POWERPC)
|
@POWERPC_TRUE@libffi_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_POWERPC)
|
||||||
@ARM_TRUE@libffi_la_SOURCES = @ARM_TRUE@$(libffi_la_common_SOURCES) $(TARGET_SRC_ARM)
|
@ARM_TRUE@libffi_la_SOURCES = $(libffi_la_common_SOURCES) $(TARGET_SRC_ARM)
|
||||||
|
|
||||||
libffi_la_LDFLAGS = -release $(VERSION)
|
libffi_la_LDFLAGS = -release $(VERSION)
|
||||||
|
|
||||||
INCLUDES = -I$(top_srcdir)/include -Iinclude
|
INCLUDES = -I$(top_srcdir)/include -Iinclude
|
||||||
subdir = .
|
|
||||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
||||||
CONFIG_HEADER = fficonfig.h
|
CONFIG_HEADER = fficonfig.h
|
||||||
@@ -146,46 +128,49 @@ CPPFLAGS = @CPPFLAGS@
|
|||||||
LDFLAGS = @LDFLAGS@
|
LDFLAGS = @LDFLAGS@
|
||||||
LIBS = @LIBS@
|
LIBS = @LIBS@
|
||||||
libffi_la_LIBADD =
|
libffi_la_LIBADD =
|
||||||
@ALPHA_TRUE@am_libffi_la_OBJECTS = debug.lo prep_cif.lo types.lo ffi.lo \
|
@SPARC_TRUE@libffi_la_OBJECTS = debug.lo prep_cif.lo \
|
||||||
@ALPHA_TRUE@osf.lo
|
@SPARC_TRUE@types.lo raw_api.lo ffi.lo \
|
||||||
@ARM_TRUE@am_libffi_la_OBJECTS = debug.lo prep_cif.lo types.lo sysv.lo \
|
|
||||||
@ARM_TRUE@ffi.lo
|
|
||||||
@M68K_TRUE@am_libffi_la_OBJECTS = debug.lo prep_cif.lo types.lo ffi.lo \
|
|
||||||
@M68K_TRUE@sysv.lo
|
|
||||||
@MIPS_GCC_TRUE@am_libffi_la_OBJECTS = debug.lo prep_cif.lo types.lo \
|
|
||||||
@MIPS_GCC_TRUE@ffi.lo o32.lo n32.lo
|
|
||||||
@MIPS_SGI_TRUE@am_libffi_la_OBJECTS = debug.lo prep_cif.lo types.lo \
|
|
||||||
@MIPS_SGI_TRUE@ffi.lo o32.lo n32.lo
|
|
||||||
@POWERPC_TRUE@am_libffi_la_OBJECTS = debug.lo prep_cif.lo types.lo \
|
|
||||||
@POWERPC_TRUE@ffi.lo sysv.lo
|
|
||||||
@SPARC_TRUE@am_libffi_la_OBJECTS = debug.lo prep_cif.lo types.lo ffi.lo \
|
|
||||||
@SPARC_TRUE@v8.lo
|
@SPARC_TRUE@v8.lo
|
||||||
@X86_TRUE@am_libffi_la_OBJECTS = debug.lo prep_cif.lo types.lo ffi.lo \
|
@MIPS_SGI_TRUE@libffi_la_OBJECTS = debug.lo prep_cif.lo \
|
||||||
@X86_TRUE@sysv.lo
|
@MIPS_SGI_TRUE@types.lo raw_api.lo ffi.lo \
|
||||||
libffi_la_OBJECTS = $(am_libffi_la_OBJECTS)
|
@MIPS_SGI_TRUE@o32.lo n32.lo
|
||||||
|
@MIPS_GCC_TRUE@libffi_la_OBJECTS = debug.lo prep_cif.lo \
|
||||||
|
@MIPS_GCC_TRUE@types.lo raw_api.lo ffi.lo \
|
||||||
|
@MIPS_GCC_TRUE@o32.lo n32.lo
|
||||||
|
@M68K_TRUE@libffi_la_OBJECTS = debug.lo prep_cif.lo \
|
||||||
|
@M68K_TRUE@types.lo raw_api.lo m68ffi.lo src/m68sysv.lo
|
||||||
|
@ALPHA_TRUE@libffi_la_OBJECTS = debug.lo prep_cif.lo \
|
||||||
|
@ALPHA_TRUE@types.lo raw_api.lo ffi.lo \
|
||||||
|
@ALPHA_TRUE@osf.lo
|
||||||
|
@X86_TRUE@libffi_la_OBJECTS = debug.lo prep_cif.lo types.lo \
|
||||||
|
@X86_TRUE@raw_api.lo ffi.lo sysv.lo
|
||||||
|
@ARM_TRUE@libffi_la_OBJECTS = debug.lo prep_cif.lo types.lo \
|
||||||
|
@ARM_TRUE@raw_api.lo sysv.lo ffi.lo
|
||||||
|
@POWERPC_TRUE@libffi_la_OBJECTS = debug.lo prep_cif.lo \
|
||||||
|
@POWERPC_TRUE@types.lo raw_api.lo ffi.lo \
|
||||||
|
@POWERPC_TRUE@sysv.lo
|
||||||
noinst_PROGRAMS = ffitest$(EXEEXT)
|
noinst_PROGRAMS = ffitest$(EXEEXT)
|
||||||
PROGRAMS = $(noinst_PROGRAMS)
|
PROGRAMS = $(noinst_PROGRAMS)
|
||||||
|
|
||||||
am_ffitest_OBJECTS = ffitest.o
|
ffitest_OBJECTS = ffitest.o
|
||||||
ffitest_OBJECTS = $(am_ffitest_OBJECTS)
|
|
||||||
ffitest_DEPENDENCIES = libffi.la
|
ffitest_DEPENDENCIES = libffi.la
|
||||||
ffitest_LDFLAGS =
|
ffitest_LDFLAGS =
|
||||||
|
CFLAGS = @CFLAGS@
|
||||||
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||||
LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||||
CFLAGS = @CFLAGS@
|
|
||||||
CCLD = $(CC)
|
CCLD = $(CC)
|
||||||
LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
|
LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
|
||||||
DIST_SOURCES = $(libffi_la_SOURCES) $(ffitest_SOURCES)
|
|
||||||
DIST_COMMON = README ./stamp-h.in ChangeLog Makefile.am Makefile.in \
|
DIST_COMMON = README ./stamp-h.in ChangeLog Makefile.am Makefile.in \
|
||||||
acconfig.h aclocal.m4 config.guess config.sub configure configure.in \
|
acconfig.h aclocal.m4 config.guess config.sub configure configure.in \
|
||||||
fficonfig.h.in install-sh ltconfig ltmain.sh missing mkinstalldirs
|
fficonfig.h.in install-sh ltconfig ltmain.sh missing mkinstalldirs
|
||||||
|
|
||||||
|
|
||||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
|
||||||
|
|
||||||
|
TAR = tar
|
||||||
GZIP_ENV = --best
|
GZIP_ENV = --best
|
||||||
SOURCES = $(libffi_la_SOURCES) $(ffitest_SOURCES)
|
SOURCES = $(libffi_la_SOURCES) $(ffitest_SOURCES)
|
||||||
OBJECTS = $(am_libffi_la_OBJECTS) $(am_ffitest_OBJECTS)
|
OBJECTS = $(libffi_la_OBJECTS) $(ffitest_OBJECTS)
|
||||||
|
|
||||||
all: all-redirect
|
all: all-redirect
|
||||||
.SUFFIXES:
|
.SUFFIXES:
|
||||||
@@ -211,22 +196,18 @@ fficonfig.h: stamp-h
|
|||||||
$(MAKE) stamp-h; \
|
$(MAKE) stamp-h; \
|
||||||
else :; fi
|
else :; fi
|
||||||
stamp-h: $(srcdir)/fficonfig.h.in $(top_builddir)/config.status
|
stamp-h: $(srcdir)/fficonfig.h.in $(top_builddir)/config.status
|
||||||
@rm -f stamp-h stamp-hT
|
|
||||||
@echo timestamp > stamp-hT 2> /dev/null
|
|
||||||
cd $(top_builddir) \
|
cd $(top_builddir) \
|
||||||
&& CONFIG_FILES= CONFIG_HEADERS=fficonfig.h \
|
&& CONFIG_FILES= CONFIG_HEADERS=fficonfig.h \
|
||||||
$(SHELL) ./config.status
|
$(SHELL) ./config.status
|
||||||
@mv stamp-hT stamp-h
|
@echo timestamp > stamp-h 2> /dev/null
|
||||||
$(srcdir)/fficonfig.h.in: @MAINTAINER_MODE_TRUE@$(srcdir)/./stamp-h.in
|
$(srcdir)/fficonfig.h.in: @MAINTAINER_MODE_TRUE@$(srcdir)/stamp-h.in
|
||||||
@if test ! -f $@; then \
|
@if test ! -f $@; then \
|
||||||
rm -f $(srcdir)/./stamp-h.in; \
|
rm -f $(srcdir)/stamp-h.in; \
|
||||||
$(MAKE) $(srcdir)/./stamp-h.in; \
|
$(MAKE) $(srcdir)/stamp-h.in; \
|
||||||
else :; fi
|
else :; fi
|
||||||
$(srcdir)/./stamp-h.in: $(top_srcdir)/configure.in $(ACLOCAL_M4) acconfig.h
|
$(srcdir)/stamp-h.in: $(top_srcdir)/configure.in $(ACLOCAL_M4) acconfig.h
|
||||||
@rm -f $(srcdir)/./stamp-h.in $(srcdir)/./stamp-h.inT
|
|
||||||
@echo timestamp > $(srcdir)/./stamp-h.inT 2> /dev/null
|
|
||||||
cd $(top_srcdir) && $(AUTOHEADER)
|
cd $(top_srcdir) && $(AUTOHEADER)
|
||||||
@mv $(srcdir)/./stamp-h.inT $(srcdir)/./stamp-h.in
|
@echo timestamp > $(srcdir)/stamp-h.in 2> /dev/null
|
||||||
|
|
||||||
mostlyclean-hdr:
|
mostlyclean-hdr:
|
||||||
|
|
||||||
@@ -258,11 +239,19 @@ install-toolexeclibLTLIBRARIES: $(toolexeclib_LTLIBRARIES)
|
|||||||
|
|
||||||
uninstall-toolexeclibLTLIBRARIES:
|
uninstall-toolexeclibLTLIBRARIES:
|
||||||
@$(NORMAL_UNINSTALL)
|
@$(NORMAL_UNINSTALL)
|
||||||
@list='$(toolexeclib_LTLIBRARIES)'; for p in $$list; do \
|
list='$(toolexeclib_LTLIBRARIES)'; for p in $$list; do \
|
||||||
echo " $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(toolexeclibdir)/$$p"; \
|
|
||||||
$(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(toolexeclibdir)/$$p; \
|
$(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(toolexeclibdir)/$$p; \
|
||||||
done
|
done
|
||||||
|
|
||||||
|
.c.o:
|
||||||
|
$(COMPILE) -c $<
|
||||||
|
|
||||||
|
.s.o:
|
||||||
|
$(COMPILE) -c $<
|
||||||
|
|
||||||
|
.S.o:
|
||||||
|
$(COMPILE) -c $<
|
||||||
|
|
||||||
mostlyclean-compile:
|
mostlyclean-compile:
|
||||||
-rm -f *.o core *.core
|
-rm -f *.o core *.core
|
||||||
|
|
||||||
@@ -273,6 +262,15 @@ distclean-compile:
|
|||||||
|
|
||||||
maintainer-clean-compile:
|
maintainer-clean-compile:
|
||||||
|
|
||||||
|
.c.lo:
|
||||||
|
$(LIBTOOL) --mode=compile $(COMPILE) -c $<
|
||||||
|
|
||||||
|
.s.lo:
|
||||||
|
$(LIBTOOL) --mode=compile $(COMPILE) -c $<
|
||||||
|
|
||||||
|
.S.lo:
|
||||||
|
$(LIBTOOL) --mode=compile $(COMPILE) -c $<
|
||||||
|
|
||||||
mostlyclean-libtool:
|
mostlyclean-libtool:
|
||||||
-rm -f *.lo
|
-rm -f *.lo
|
||||||
|
|
||||||
@@ -282,15 +280,6 @@ clean-libtool:
|
|||||||
distclean-libtool:
|
distclean-libtool:
|
||||||
|
|
||||||
maintainer-clean-libtool:
|
maintainer-clean-libtool:
|
||||||
debug.lo: src/debug.c
|
|
||||||
prep_cif.lo: src/prep_cif.c
|
|
||||||
types.lo: src/types.c
|
|
||||||
ffi.lo: src/alpha/ffi.c
|
|
||||||
osf.lo: src/alpha/osf.S
|
|
||||||
sysv.lo: src/arm/sysv.S
|
|
||||||
o32.lo: src/mips/o32.S
|
|
||||||
n32.lo: src/mips/n32.S
|
|
||||||
v8.lo: src/sparc/v8.S
|
|
||||||
|
|
||||||
libffi.la: $(libffi_la_OBJECTS) $(libffi_la_DEPENDENCIES)
|
libffi.la: $(libffi_la_OBJECTS) $(libffi_la_DEPENDENCIES)
|
||||||
$(LINK) -rpath $(toolexeclibdir) $(libffi_la_LDFLAGS) $(libffi_la_OBJECTS) $(libffi_la_LIBADD) $(LIBS)
|
$(LINK) -rpath $(toolexeclibdir) $(libffi_la_LDFLAGS) $(libffi_la_OBJECTS) $(libffi_la_LIBADD) $(LIBS)
|
||||||
@@ -303,23 +292,10 @@ clean-noinstPROGRAMS:
|
|||||||
distclean-noinstPROGRAMS:
|
distclean-noinstPROGRAMS:
|
||||||
|
|
||||||
maintainer-clean-noinstPROGRAMS:
|
maintainer-clean-noinstPROGRAMS:
|
||||||
ffitest.o: src/ffitest.c
|
|
||||||
|
|
||||||
ffitest$(EXEEXT): $(ffitest_OBJECTS) $(ffitest_DEPENDENCIES)
|
ffitest$(EXEEXT): $(ffitest_OBJECTS) $(ffitest_DEPENDENCIES)
|
||||||
@rm -f ffitest$(EXEEXT)
|
@rm -f ffitest$(EXEEXT)
|
||||||
$(LINK) $(ffitest_LDFLAGS) $(ffitest_OBJECTS) $(ffitest_LDADD) $(LIBS)
|
$(LINK) $(ffitest_LDFLAGS) $(ffitest_OBJECTS) $(ffitest_LDADD) $(LIBS)
|
||||||
.S.o:
|
|
||||||
$(COMPILE) -c $<
|
|
||||||
.S.lo:
|
|
||||||
$(LTCOMPILE) -c -o $@ $<
|
|
||||||
.c.o:
|
|
||||||
$(COMPILE) -c $<
|
|
||||||
.c.lo:
|
|
||||||
$(LTCOMPILE) -c -o $@ $<
|
|
||||||
.s.o:
|
|
||||||
$(COMPILE) -c $<
|
|
||||||
.s.lo:
|
|
||||||
$(LTCOMPILE) -c -o $@ $<
|
|
||||||
|
|
||||||
tags: TAGS
|
tags: TAGS
|
||||||
|
|
||||||
@@ -358,7 +334,7 @@ top_distdir = $(distdir)
|
|||||||
# tarfile.
|
# tarfile.
|
||||||
distcheck: dist
|
distcheck: dist
|
||||||
-rm -rf $(distdir)
|
-rm -rf $(distdir)
|
||||||
GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(AMTAR) xf -
|
GZIP=$(GZIP_ENV) $(TAR) zxf $(distdir).tar.gz
|
||||||
mkdir $(distdir)/=build
|
mkdir $(distdir)/=build
|
||||||
mkdir $(distdir)/=inst
|
mkdir $(distdir)/=inst
|
||||||
dc_install_base=`cd $(distdir)/=inst && pwd`; \
|
dc_install_base=`cd $(distdir)/=inst && pwd`; \
|
||||||
@@ -378,11 +354,11 @@ distcheck: dist
|
|||||||
echo "$$dashes"
|
echo "$$dashes"
|
||||||
dist: distdir
|
dist: distdir
|
||||||
-chmod -R a+r $(distdir)
|
-chmod -R a+r $(distdir)
|
||||||
$(AMTAR) ch$(AMTARFLAGS)f - $(distdir) | GZIP=$(GZIP_ENV) gzip -c > $(distdir).tar.gz
|
GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir)
|
||||||
-rm -rf $(distdir)
|
-rm -rf $(distdir)
|
||||||
dist-all: distdir
|
dist-all: distdir
|
||||||
-chmod -R a+r $(distdir)
|
-chmod -R a+r $(distdir)
|
||||||
$(AMTAR) ch$(AMTARFLAGS)f - $(distdir) | GZIP=$(GZIP_ENV) gzip -c > $(distdir).tar.gz
|
GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir)
|
||||||
-rm -rf $(distdir)
|
-rm -rf $(distdir)
|
||||||
distdir: $(DISTFILES)
|
distdir: $(DISTFILES)
|
||||||
-rm -rf $(distdir)
|
-rm -rf $(distdir)
|
||||||
@@ -395,7 +371,7 @@ distdir: $(DISTFILES)
|
|||||||
@for file in $(DISTFILES); do \
|
@for file in $(DISTFILES); do \
|
||||||
if test -f $$file; then d=.; else d=$(srcdir); fi; \
|
if test -f $$file; then d=.; else d=$(srcdir); fi; \
|
||||||
if test -d $$d/$$file; then \
|
if test -d $$d/$$file; then \
|
||||||
cp -pr $$d/$$file $(distdir)/$$file; \
|
cp -pr $$/$$file $(distdir)/$$file; \
|
||||||
else \
|
else \
|
||||||
test -f $(distdir)/$$file \
|
test -f $(distdir)/$$file \
|
||||||
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|
||||||
@@ -429,7 +405,7 @@ uninstall: uninstall-am
|
|||||||
all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) fficonfig.h
|
all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) fficonfig.h
|
||||||
all-redirect: all-am
|
all-redirect: all-am
|
||||||
install-strip:
|
install-strip:
|
||||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_STRIP_FLAG=-s install
|
$(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
|
||||||
installdirs:
|
installdirs:
|
||||||
$(mkinstalldirs) $(DESTDIR)$(toolexeclibdir)
|
$(mkinstalldirs) $(DESTDIR)$(toolexeclibdir)
|
||||||
|
|
||||||
@@ -489,9 +465,9 @@ clean-tags maintainer-clean-tags distdir info-am info dvi-am dvi check \
|
|||||||
check-am installcheck-am installcheck install-info-am install-info \
|
check-am installcheck-am installcheck install-info-am install-info \
|
||||||
all-recursive-am install-exec-am install-exec install-data-am \
|
all-recursive-am install-exec-am install-exec install-data-am \
|
||||||
install-data install-am install uninstall-am uninstall all-redirect \
|
install-data install-am install uninstall-am uninstall all-redirect \
|
||||||
all-am all install-strip installdirs mostlyclean-generic \
|
all-am all installdirs mostlyclean-generic distclean-generic \
|
||||||
distclean-generic clean-generic maintainer-clean-generic clean \
|
clean-generic maintainer-clean-generic clean mostlyclean distclean \
|
||||||
mostlyclean distclean maintainer-clean
|
maintainer-clean
|
||||||
|
|
||||||
|
|
||||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||||
|
|||||||
@@ -477,6 +477,9 @@ libffi was written by Anthony Green <green@cygnus.com>.
|
|||||||
Portions of libffi were derived from Gianni Mariani's free gencall
|
Portions of libffi were derived from Gianni Mariani's free gencall
|
||||||
library for Silicon Graphics machines.
|
library for Silicon Graphics machines.
|
||||||
|
|
||||||
|
The closure mechanism was designed and implemented by Kresten Krab
|
||||||
|
Thorup.
|
||||||
|
|
||||||
The Sparc port was derived from code contributed by the fine folks at
|
The Sparc port was derived from code contributed by the fine folks at
|
||||||
Visible Decisions Inc <http://www.vdi.com>. Further enhancements were
|
Visible Decisions Inc <http://www.vdi.com>. Further enhancements were
|
||||||
made by Gordon Irlam at Cygnus Solutions <http://www.cygnus.com>.
|
made by Gordon Irlam at Cygnus Solutions <http://www.cygnus.com>.
|
||||||
|
|||||||
641
libffi/aclocal.m4
vendored
641
libffi/aclocal.m4
vendored
@@ -1,4 +1,4 @@
|
|||||||
dnl aclocal.m4 generated automatically by aclocal 1.4a
|
dnl aclocal.m4 generated automatically by aclocal 1.4
|
||||||
|
|
||||||
dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
|
dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
|
||||||
dnl This file is free software; the Free Software Foundation
|
dnl This file is free software; the Free Software Foundation
|
||||||
@@ -44,8 +44,6 @@ dnl AM_INIT_AUTOMAKE(package,version, [no-define])
|
|||||||
|
|
||||||
AC_DEFUN(AM_INIT_AUTOMAKE,
|
AC_DEFUN(AM_INIT_AUTOMAKE,
|
||||||
[AC_REQUIRE([AC_PROG_INSTALL])
|
[AC_REQUIRE([AC_PROG_INSTALL])
|
||||||
dnl We require 2.13 because we rely on SHELL being computed by configure.
|
|
||||||
AC_PREREQ([2.13])
|
|
||||||
PACKAGE=[$1]
|
PACKAGE=[$1]
|
||||||
AC_SUBST(PACKAGE)
|
AC_SUBST(PACKAGE)
|
||||||
VERSION=[$2]
|
VERSION=[$2]
|
||||||
@@ -66,19 +64,6 @@ AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
|
|||||||
AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
|
AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
|
||||||
AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
|
AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
|
||||||
AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
|
AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
|
||||||
dnl We check for tar when the user configures the end package.
|
|
||||||
dnl This is sad, since we only need this for "dist". However,
|
|
||||||
dnl there's no other good way to do it. We prefer GNU tar if
|
|
||||||
dnl we can find it. If we can't find a tar, it doesn't really matter.
|
|
||||||
AC_CHECK_PROGS(AMTAR, gnutar gtar tar)
|
|
||||||
AMTARFLAGS=
|
|
||||||
if test -n "$AMTAR"; then
|
|
||||||
if $SHELL -c "$AMTAR --version" > /dev/null 2>&1; then
|
|
||||||
dnl We have GNU tar.
|
|
||||||
AMTARFLAGS=o
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
AC_SUBST(AMTARFLAGS)
|
|
||||||
AC_REQUIRE([AC_PROG_MAKE_SET])])
|
AC_REQUIRE([AC_PROG_MAKE_SET])])
|
||||||
|
|
||||||
#
|
#
|
||||||
@@ -140,26 +125,6 @@ else
|
|||||||
fi
|
fi
|
||||||
AC_SUBST($1)])
|
AC_SUBST($1)])
|
||||||
|
|
||||||
# Add --enable-maintainer-mode option to configure.
|
|
||||||
# From Jim Meyering
|
|
||||||
|
|
||||||
# serial 1
|
|
||||||
|
|
||||||
AC_DEFUN(AM_MAINTAINER_MODE,
|
|
||||||
[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
|
|
||||||
dnl maintainer-mode is disabled by default
|
|
||||||
AC_ARG_ENABLE(maintainer-mode,
|
|
||||||
[ --enable-maintainer-mode enable make rules and dependencies not useful
|
|
||||||
(and sometimes confusing) to the casual installer],
|
|
||||||
USE_MAINTAINER_MODE=$enableval,
|
|
||||||
USE_MAINTAINER_MODE=no)
|
|
||||||
AC_MSG_RESULT($USE_MAINTAINER_MODE)
|
|
||||||
AM_CONDITIONAL(MAINTAINER_MODE, test $USE_MAINTAINER_MODE = yes)
|
|
||||||
MAINT=$MAINTAINER_MODE_TRUE
|
|
||||||
AC_SUBST(MAINT)dnl
|
|
||||||
]
|
|
||||||
)
|
|
||||||
|
|
||||||
# Define a conditional.
|
# Define a conditional.
|
||||||
|
|
||||||
AC_DEFUN(AM_CONDITIONAL,
|
AC_DEFUN(AM_CONDITIONAL,
|
||||||
@@ -173,607 +138,3 @@ else
|
|||||||
$1_FALSE=
|
$1_FALSE=
|
||||||
fi])
|
fi])
|
||||||
|
|
||||||
|
|
||||||
# serial 35 AC_PROG_LIBTOOL
|
|
||||||
AC_DEFUN(AC_PROG_LIBTOOL,
|
|
||||||
[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl
|
|
||||||
|
|
||||||
# Save cache, so that ltconfig can load it
|
|
||||||
AC_CACHE_SAVE
|
|
||||||
|
|
||||||
# Actually configure libtool. ac_aux_dir is where install-sh is found.
|
|
||||||
CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" \
|
|
||||||
LD="$LD" NM="$NM" RANLIB="$RANLIB" LN_S="$LN_S" \
|
|
||||||
DLLTOOL="$DLLTOOL" AS="$AS" \
|
|
||||||
${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig --no-reexec \
|
|
||||||
$libtool_flags --no-verify $ac_aux_dir/ltmain.sh $host \
|
|
||||||
|| AC_MSG_ERROR([libtool configure failed])
|
|
||||||
|
|
||||||
# Reload cache, that may have been modified by ltconfig
|
|
||||||
AC_CACHE_LOAD
|
|
||||||
|
|
||||||
# This can be used to rebuild libtool when needed
|
|
||||||
LIBTOOL_DEPS="$ac_aux_dir/ltconfig $ac_aux_dir/ltmain.sh"
|
|
||||||
|
|
||||||
# Always use our own libtool.
|
|
||||||
LIBTOOL='$(SHELL) $(top_builddir)/libtool'
|
|
||||||
AC_SUBST(LIBTOOL)dnl
|
|
||||||
|
|
||||||
# Redirect the config.log output again, so that the ltconfig log is not
|
|
||||||
# clobbered by the next message.
|
|
||||||
exec 5>>./config.log
|
|
||||||
])
|
|
||||||
|
|
||||||
AC_DEFUN(AC_LIBTOOL_SETUP,
|
|
||||||
[AC_PREREQ(2.13)dnl
|
|
||||||
AC_REQUIRE([AC_ENABLE_SHARED])dnl
|
|
||||||
AC_REQUIRE([AC_ENABLE_STATIC])dnl
|
|
||||||
AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl
|
|
||||||
AC_REQUIRE([AC_CANONICAL_HOST])dnl
|
|
||||||
AC_REQUIRE([AC_CANONICAL_BUILD])dnl
|
|
||||||
AC_REQUIRE([AC_PROG_RANLIB])dnl
|
|
||||||
AC_REQUIRE([AC_PROG_CC])dnl
|
|
||||||
AC_REQUIRE([AC_PROG_LD])dnl
|
|
||||||
AC_REQUIRE([AC_PROG_NM])dnl
|
|
||||||
AC_REQUIRE([AC_SYS_NM_PARSE])dnl
|
|
||||||
AC_REQUIRE([AC_SYS_SYMBOL_UNDERSCORE])dnl
|
|
||||||
AC_REQUIRE([AC_PROG_LN_S])dnl
|
|
||||||
dnl
|
|
||||||
|
|
||||||
# Check for any special flags to pass to ltconfig.
|
|
||||||
libtool_flags="--cache-file=$cache_file"
|
|
||||||
test "$enable_shared" = no && libtool_flags="$libtool_flags --disable-shared"
|
|
||||||
test "$enable_static" = no && libtool_flags="$libtool_flags --disable-static"
|
|
||||||
test "$enable_fast_install" = no && libtool_flags="$libtool_flags --disable-fast-install"
|
|
||||||
test "$lt_dlopen" = yes && libtool_flags="$libtool_flags --enable-dlopen"
|
|
||||||
test "$silent" = yes && libtool_flags="$libtool_flags --silent"
|
|
||||||
test "$ac_cv_prog_gcc" = yes && libtool_flags="$libtool_flags --with-gcc"
|
|
||||||
test "$ac_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld"
|
|
||||||
|
|
||||||
# Some flags need to be propagated to the compiler or linker for good
|
|
||||||
# libtool support.
|
|
||||||
case "$host" in
|
|
||||||
*-*-irix6*)
|
|
||||||
# Find out which ABI we are using.
|
|
||||||
echo '[#]line __oline__ "configure"' > conftest.$ac_ext
|
|
||||||
if AC_TRY_EVAL(ac_compile); then
|
|
||||||
case "`/usr/bin/file conftest.o`" in
|
|
||||||
*32-bit*)
|
|
||||||
LD="${LD-ld} -32"
|
|
||||||
;;
|
|
||||||
*N32*)
|
|
||||||
LD="${LD-ld} -n32"
|
|
||||||
;;
|
|
||||||
*64-bit*)
|
|
||||||
LD="${LD-ld} -64"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
rm -rf conftest*
|
|
||||||
;;
|
|
||||||
|
|
||||||
*-*-sco3.2v5*)
|
|
||||||
# On SCO OpenServer 5, we need -belf to get full-featured binaries.
|
|
||||||
SAVE_CFLAGS="$CFLAGS"
|
|
||||||
CFLAGS="$CFLAGS -belf"
|
|
||||||
AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
|
|
||||||
[AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])])
|
|
||||||
if test x"$lt_cv_cc_needs_belf" != x"yes"; then
|
|
||||||
# this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
|
|
||||||
CFLAGS="$SAVE_CFLAGS"
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
|
|
||||||
*-*-cygwin*)
|
|
||||||
AC_SYS_LIBTOOL_CYGWIN
|
|
||||||
;;
|
|
||||||
|
|
||||||
esac
|
|
||||||
|
|
||||||
# enable the --disable-libtool-lock switch
|
|
||||||
|
|
||||||
AC_ARG_ENABLE(libtool-lock,
|
|
||||||
[ --disable-libtool-lock force libtool not to do file locking],
|
|
||||||
need_locks=$enableval,
|
|
||||||
need_locks=yes)
|
|
||||||
|
|
||||||
if test x"$need_locks" = xno; then
|
|
||||||
libtool_flags="$libtool_flags --disable-lock"
|
|
||||||
fi
|
|
||||||
])
|
|
||||||
|
|
||||||
# AC_LIBTOOL_DLOPEN - check for dlopen support
|
|
||||||
AC_DEFUN(AC_LIBTOOL_DLOPEN, [lt_dlopen=yes])
|
|
||||||
|
|
||||||
# AC_ENABLE_SHARED - implement the --enable-shared flag
|
|
||||||
# Usage: AC_ENABLE_SHARED[(DEFAULT)]
|
|
||||||
# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to
|
|
||||||
# `yes'.
|
|
||||||
AC_DEFUN(AC_ENABLE_SHARED,
|
|
||||||
[define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl
|
|
||||||
AC_ARG_ENABLE(shared,
|
|
||||||
changequote(<<, >>)dnl
|
|
||||||
<< --enable-shared[=PKGS] build shared libraries [default=>>AC_ENABLE_SHARED_DEFAULT],
|
|
||||||
changequote([, ])dnl
|
|
||||||
[p=${PACKAGE-default}
|
|
||||||
case "$enableval" in
|
|
||||||
yes) enable_shared=yes ;;
|
|
||||||
no) enable_shared=no ;;
|
|
||||||
*)
|
|
||||||
enable_shared=no
|
|
||||||
# Look at the argument we got. We use all the common list separators.
|
|
||||||
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
|
|
||||||
for pkg in $enableval; do
|
|
||||||
if test "X$pkg" = "X$p"; then
|
|
||||||
enable_shared=yes
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
IFS="$ac_save_ifs"
|
|
||||||
;;
|
|
||||||
esac],
|
|
||||||
enable_shared=AC_ENABLE_SHARED_DEFAULT)dnl
|
|
||||||
])
|
|
||||||
|
|
||||||
# AC_DISABLE_SHARED - set the default shared flag to --disable-shared
|
|
||||||
AC_DEFUN(AC_DISABLE_SHARED,
|
|
||||||
[AC_ENABLE_SHARED(no)])
|
|
||||||
|
|
||||||
# AC_ENABLE_STATIC - implement the --enable-static flag
|
|
||||||
# Usage: AC_ENABLE_STATIC[(DEFAULT)]
|
|
||||||
# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to
|
|
||||||
# `yes'.
|
|
||||||
AC_DEFUN(AC_ENABLE_STATIC,
|
|
||||||
[define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl
|
|
||||||
AC_ARG_ENABLE(static,
|
|
||||||
changequote(<<, >>)dnl
|
|
||||||
<< --enable-static[=PKGS] build static libraries [default=>>AC_ENABLE_STATIC_DEFAULT],
|
|
||||||
changequote([, ])dnl
|
|
||||||
[p=${PACKAGE-default}
|
|
||||||
case "$enableval" in
|
|
||||||
yes) enable_static=yes ;;
|
|
||||||
no) enable_static=no ;;
|
|
||||||
*)
|
|
||||||
enable_static=no
|
|
||||||
# Look at the argument we got. We use all the common list separators.
|
|
||||||
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
|
|
||||||
for pkg in $enableval; do
|
|
||||||
if test "X$pkg" = "X$p"; then
|
|
||||||
enable_static=yes
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
IFS="$ac_save_ifs"
|
|
||||||
;;
|
|
||||||
esac],
|
|
||||||
enable_static=AC_ENABLE_STATIC_DEFAULT)dnl
|
|
||||||
])
|
|
||||||
|
|
||||||
# AC_DISABLE_STATIC - set the default static flag to --disable-static
|
|
||||||
AC_DEFUN(AC_DISABLE_STATIC,
|
|
||||||
[AC_ENABLE_STATIC(no)])
|
|
||||||
|
|
||||||
|
|
||||||
# AC_ENABLE_FAST_INSTALL - implement the --enable-fast-install flag
|
|
||||||
# Usage: AC_ENABLE_FAST_INSTALL[(DEFAULT)]
|
|
||||||
# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to
|
|
||||||
# `yes'.
|
|
||||||
AC_DEFUN(AC_ENABLE_FAST_INSTALL,
|
|
||||||
[define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl
|
|
||||||
AC_ARG_ENABLE(fast-install,
|
|
||||||
changequote(<<, >>)dnl
|
|
||||||
<< --enable-fast-install[=PKGS] optimize for fast installation [default=>>AC_ENABLE_FAST_INSTALL_DEFAULT],
|
|
||||||
changequote([, ])dnl
|
|
||||||
[p=${PACKAGE-default}
|
|
||||||
case "$enableval" in
|
|
||||||
yes) enable_fast_install=yes ;;
|
|
||||||
no) enable_fast_install=no ;;
|
|
||||||
*)
|
|
||||||
enable_fast_install=no
|
|
||||||
# Look at the argument we got. We use all the common list separators.
|
|
||||||
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
|
|
||||||
for pkg in $enableval; do
|
|
||||||
if test "X$pkg" = "X$p"; then
|
|
||||||
enable_fast_install=yes
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
IFS="$ac_save_ifs"
|
|
||||||
;;
|
|
||||||
esac],
|
|
||||||
enable_fast_install=AC_ENABLE_FAST_INSTALL_DEFAULT)dnl
|
|
||||||
])
|
|
||||||
|
|
||||||
# AC_ENABLE_FAST_INSTALL - set the default to --disable-fast-install
|
|
||||||
AC_DEFUN(AC_DISABLE_FAST_INSTALL,
|
|
||||||
[AC_ENABLE_FAST_INSTALL(no)])
|
|
||||||
|
|
||||||
|
|
||||||
# AC_PROG_LD - find the path to the GNU or non-GNU linker
|
|
||||||
AC_DEFUN(AC_PROG_LD,
|
|
||||||
[AC_ARG_WITH(gnu-ld,
|
|
||||||
[ --with-gnu-ld assume the C compiler uses GNU ld [default=no]],
|
|
||||||
test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
|
|
||||||
AC_REQUIRE([AC_PROG_CC])dnl
|
|
||||||
AC_REQUIRE([AC_CANONICAL_HOST])dnl
|
|
||||||
AC_REQUIRE([AC_CANONICAL_BUILD])dnl
|
|
||||||
ac_prog=ld
|
|
||||||
if test "$ac_cv_prog_gcc" = yes; then
|
|
||||||
# Check if gcc -print-prog-name=ld gives a path.
|
|
||||||
AC_MSG_CHECKING([for ld used by GCC])
|
|
||||||
ac_prog=`($CC -print-prog-name=ld) 2>&5`
|
|
||||||
case "$ac_prog" in
|
|
||||||
# Accept absolute paths.
|
|
||||||
changequote(,)dnl
|
|
||||||
/* | [A-Za-z]:[\\/]*)
|
|
||||||
re_direlt='/[^/][^/]*/\.\./'
|
|
||||||
changequote([,])dnl
|
|
||||||
# Canonicalize the path of ld
|
|
||||||
ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
|
|
||||||
while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
|
|
||||||
ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
|
|
||||||
done
|
|
||||||
test -z "$LD" && LD="$ac_prog"
|
|
||||||
;;
|
|
||||||
"")
|
|
||||||
# If it fails, then pretend we aren't using GCC.
|
|
||||||
ac_prog=ld
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
# If it is relative, then search for the first ld in PATH.
|
|
||||||
with_gnu_ld=unknown
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
elif test "$with_gnu_ld" = yes; then
|
|
||||||
AC_MSG_CHECKING([for GNU ld])
|
|
||||||
else
|
|
||||||
AC_MSG_CHECKING([for non-GNU ld])
|
|
||||||
fi
|
|
||||||
AC_CACHE_VAL(ac_cv_path_LD,
|
|
||||||
[if test -z "$LD"; then
|
|
||||||
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
|
|
||||||
for ac_dir in $PATH; do
|
|
||||||
test -z "$ac_dir" && ac_dir=.
|
|
||||||
if test -f "$ac_dir/$ac_prog"; then
|
|
||||||
ac_cv_path_LD="$ac_dir/$ac_prog"
|
|
||||||
# Check to see if the program is GNU ld. I'd rather use --version,
|
|
||||||
# but apparently some GNU ld's only accept -v.
|
|
||||||
# Break only if it was the GNU/non-GNU ld that we prefer.
|
|
||||||
if "$ac_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then
|
|
||||||
test "$with_gnu_ld" != no && break
|
|
||||||
else
|
|
||||||
test "$with_gnu_ld" != yes && break
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
IFS="$ac_save_ifs"
|
|
||||||
else
|
|
||||||
ac_cv_path_LD="$LD" # Let the user override the test with a path.
|
|
||||||
fi])
|
|
||||||
LD="$ac_cv_path_LD"
|
|
||||||
if test -n "$LD"; then
|
|
||||||
AC_MSG_RESULT($LD)
|
|
||||||
else
|
|
||||||
AC_MSG_RESULT(no)
|
|
||||||
fi
|
|
||||||
test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
|
|
||||||
AC_SUBST(LD)
|
|
||||||
AC_PROG_LD_GNU
|
|
||||||
])
|
|
||||||
|
|
||||||
AC_DEFUN(AC_PROG_LD_GNU,
|
|
||||||
[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], ac_cv_prog_gnu_ld,
|
|
||||||
[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
|
|
||||||
if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
|
|
||||||
ac_cv_prog_gnu_ld=yes
|
|
||||||
else
|
|
||||||
ac_cv_prog_gnu_ld=no
|
|
||||||
fi])
|
|
||||||
])
|
|
||||||
|
|
||||||
# AC_PROG_NM - find the path to a BSD-compatible name lister
|
|
||||||
AC_DEFUN(AC_PROG_NM,
|
|
||||||
[AC_MSG_CHECKING([for BSD-compatible nm])
|
|
||||||
AC_CACHE_VAL(ac_cv_path_NM,
|
|
||||||
[if test -n "$NM"; then
|
|
||||||
# Let the user override the test.
|
|
||||||
ac_cv_path_NM="$NM"
|
|
||||||
else
|
|
||||||
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
|
|
||||||
for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do
|
|
||||||
test -z "$ac_dir" && ac_dir=.
|
|
||||||
if test -f $ac_dir/nm; then
|
|
||||||
# Check to see if the nm accepts a BSD-compat flag.
|
|
||||||
# Adding the `sed 1q' prevents false positives on HP-UX, which says:
|
|
||||||
# nm: unknown option "B" ignored
|
|
||||||
if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
|
|
||||||
ac_cv_path_NM="$ac_dir/nm -B"
|
|
||||||
break
|
|
||||||
elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
|
|
||||||
ac_cv_path_NM="$ac_dir/nm -p"
|
|
||||||
break
|
|
||||||
else
|
|
||||||
ac_cv_path_NM=${ac_cv_path_NM="$ac_dir/nm"} # keep the first match, but
|
|
||||||
continue # so that we can try to find one that supports BSD flags
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
IFS="$ac_save_ifs"
|
|
||||||
test -z "$ac_cv_path_NM" && ac_cv_path_NM=nm
|
|
||||||
fi])
|
|
||||||
NM="$ac_cv_path_NM"
|
|
||||||
AC_MSG_RESULT([$NM])
|
|
||||||
AC_SUBST(NM)
|
|
||||||
])
|
|
||||||
|
|
||||||
# AC_SYS_NM_PARSE - Check for command to grab the raw symbol name followed
|
|
||||||
# by C symbol name from nm.
|
|
||||||
AC_DEFUN(AC_SYS_NM_PARSE,
|
|
||||||
[AC_REQUIRE([AC_CANONICAL_HOST])dnl
|
|
||||||
AC_REQUIRE([AC_PROG_NM])dnl
|
|
||||||
# Check for command to grab the raw symbol name followed by C symbol from nm.
|
|
||||||
AC_MSG_CHECKING([command to parse $NM output])
|
|
||||||
AC_CACHE_VAL(ac_cv_sys_global_symbol_pipe,
|
|
||||||
[# These are sane defaults that work on at least a few old systems.
|
|
||||||
# {They come from Ultrix. What could be older than Ultrix?!! ;)}
|
|
||||||
|
|
||||||
changequote(,)dnl
|
|
||||||
# Character class describing NM global symbol codes.
|
|
||||||
ac_symcode='[BCDEGRST]'
|
|
||||||
|
|
||||||
# Regexp to match symbols that can be accessed directly from C.
|
|
||||||
ac_sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
|
|
||||||
|
|
||||||
# Transform the above into a raw symbol and a C symbol.
|
|
||||||
ac_symxfrm='\1 \2\3 \3'
|
|
||||||
|
|
||||||
# Transform an extracted symbol line into a proper C declaration
|
|
||||||
ac_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern char \1;/p'"
|
|
||||||
|
|
||||||
# Define system-specific variables.
|
|
||||||
case "$host_os" in
|
|
||||||
aix*)
|
|
||||||
ac_symcode='[BCDT]'
|
|
||||||
;;
|
|
||||||
cygwin* | mingw*)
|
|
||||||
ac_symcode='[ABCDGISTW]'
|
|
||||||
;;
|
|
||||||
hpux*)
|
|
||||||
ac_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern char \1();/p' -e 's/^. .* \(.*\)$/extern char \1;/p'"
|
|
||||||
;;
|
|
||||||
irix*)
|
|
||||||
ac_symcode='[BCDEGRST]'
|
|
||||||
;;
|
|
||||||
solaris*)
|
|
||||||
ac_symcode='[BDT]'
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
# If we're using GNU nm, then use its standard symbol codes.
|
|
||||||
if $NM -V 2>&1 | egrep '(GNU|with BFD)' > /dev/null; then
|
|
||||||
ac_symcode='[ABCDGISTW]'
|
|
||||||
fi
|
|
||||||
changequote([,])dnl
|
|
||||||
|
|
||||||
# Try without a prefix undercore, then with it.
|
|
||||||
for ac_symprfx in "" "_"; do
|
|
||||||
|
|
||||||
ac_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($ac_symcode\)[ ][ ]*\($ac_symprfx\)$ac_sympat$/$ac_symxfrm/p'"
|
|
||||||
|
|
||||||
# Check to see that the pipe works correctly.
|
|
||||||
ac_pipe_works=no
|
|
||||||
rm -f conftest.$ac_ext
|
|
||||||
cat > conftest.$ac_ext <<EOF
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
char nm_test_var;
|
|
||||||
void nm_test_func(){}
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
int main(){nm_test_var='a';nm_test_func;return 0;}
|
|
||||||
EOF
|
|
||||||
|
|
||||||
if AC_TRY_EVAL(ac_compile); then
|
|
||||||
# Now try to grab the symbols.
|
|
||||||
ac_nlist=conftest.nm
|
|
||||||
|
|
||||||
if AC_TRY_EVAL(NM conftest.$ac_objext \| $ac_cv_sys_global_symbol_pipe \> $ac_nlist) && test -s "$ac_nlist"; then
|
|
||||||
|
|
||||||
# Try sorting and uniquifying the output.
|
|
||||||
if sort "$ac_nlist" | uniq > "$ac_nlist"T; then
|
|
||||||
mv -f "$ac_nlist"T "$ac_nlist"
|
|
||||||
else
|
|
||||||
rm -f "$ac_nlist"T
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Make sure that we snagged all the symbols we need.
|
|
||||||
if egrep ' nm_test_var$' "$ac_nlist" >/dev/null; then
|
|
||||||
if egrep ' nm_test_func$' "$ac_nlist" >/dev/null; then
|
|
||||||
cat <<EOF > conftest.c
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
EOF
|
|
||||||
# Now generate the symbol file.
|
|
||||||
eval "$ac_global_symbol_to_cdecl"' < "$ac_nlist" >> conftest.c'
|
|
||||||
|
|
||||||
cat <<EOF >> conftest.c
|
|
||||||
#if defined (__STDC__) && __STDC__
|
|
||||||
# define lt_ptr_t void *
|
|
||||||
#else
|
|
||||||
# define lt_ptr_t char *
|
|
||||||
# define const
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* The mapping between symbol names and symbols. */
|
|
||||||
const struct {
|
|
||||||
const char *name;
|
|
||||||
lt_ptr_t address;
|
|
||||||
}
|
|
||||||
changequote(,)dnl
|
|
||||||
lt_preloaded_symbols[] =
|
|
||||||
changequote([,])dnl
|
|
||||||
{
|
|
||||||
EOF
|
|
||||||
sed 's/^. \(.*\) \(.*\)$/ {"\2", (lt_ptr_t) \&\2},/' < "$ac_nlist" >> conftest.c
|
|
||||||
cat <<\EOF >> conftest.c
|
|
||||||
{0, (lt_ptr_t) 0}
|
|
||||||
};
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
EOF
|
|
||||||
# Now try linking the two files.
|
|
||||||
mv conftest.$ac_objext conftestm.$ac_objext
|
|
||||||
ac_save_LIBS="$LIBS"
|
|
||||||
ac_save_CFLAGS="$CFLAGS"
|
|
||||||
LIBS="conftestm.$ac_objext"
|
|
||||||
CFLAGS="$CFLAGS$no_builtin_flag"
|
|
||||||
if AC_TRY_EVAL(ac_link) && test -s conftest; then
|
|
||||||
ac_pipe_works=yes
|
|
||||||
else
|
|
||||||
echo "configure: failed program was:" >&AC_FD_CC
|
|
||||||
cat conftest.c >&AC_FD_CC
|
|
||||||
fi
|
|
||||||
LIBS="$ac_save_LIBS"
|
|
||||||
CFLAGS="$ac_save_CFLAGS"
|
|
||||||
else
|
|
||||||
echo "cannot find nm_test_func in $ac_nlist" >&AC_FD_CC
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "cannot find nm_test_var in $ac_nlist" >&AC_FD_CC
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "cannot run $ac_cv_sys_global_symbol_pipe" >&AC_FD_CC
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "$progname: failed program was:" >&AC_FD_CC
|
|
||||||
cat conftest.c >&AC_FD_CC
|
|
||||||
fi
|
|
||||||
rm -rf conftest*
|
|
||||||
|
|
||||||
# Do not use the global_symbol_pipe unless it works.
|
|
||||||
if test "$ac_pipe_works" = yes; then
|
|
||||||
if test x"$ac_symprfx" = x"_"; then
|
|
||||||
ac_cv_sys_symbol_underscore=yes
|
|
||||||
else
|
|
||||||
ac_cv_sys_symbol_underscore=no
|
|
||||||
fi
|
|
||||||
break
|
|
||||||
else
|
|
||||||
ac_cv_sys_global_symbol_pipe=
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
])
|
|
||||||
|
|
||||||
ac_result=yes
|
|
||||||
if test -z "$ac_cv_sys_global_symbol_pipe"; then
|
|
||||||
ac_result=no
|
|
||||||
fi
|
|
||||||
AC_MSG_RESULT($ac_result)
|
|
||||||
])
|
|
||||||
|
|
||||||
# AC_SYS_LIBTOOL_CYGWIN - find tools needed on cygwin
|
|
||||||
AC_DEFUN(AC_SYS_LIBTOOL_CYGWIN,
|
|
||||||
[AC_CHECK_TOOL(DLLTOOL, dlltool, false)
|
|
||||||
AC_CHECK_TOOL(AS, as, false)
|
|
||||||
])
|
|
||||||
|
|
||||||
# AC_SYS_SYMBOL_UNDERSCORE - does the compiler prefix global symbols
|
|
||||||
# with an underscore?
|
|
||||||
AC_DEFUN(AC_SYS_SYMBOL_UNDERSCORE,
|
|
||||||
[AC_REQUIRE([AC_PROG_NM])dnl
|
|
||||||
AC_REQUIRE([AC_SYS_NM_PARSE])dnl
|
|
||||||
AC_MSG_CHECKING([for _ prefix in compiled symbols])
|
|
||||||
AC_CACHE_VAL(ac_cv_sys_symbol_underscore,
|
|
||||||
[ac_cv_sys_symbol_underscore=no
|
|
||||||
cat > conftest.$ac_ext <<EOF
|
|
||||||
void nm_test_func(){}
|
|
||||||
int main(){nm_test_func;return 0;}
|
|
||||||
EOF
|
|
||||||
if AC_TRY_EVAL(ac_compile); then
|
|
||||||
# Now try to grab the symbols.
|
|
||||||
ac_nlist=conftest.nm
|
|
||||||
if AC_TRY_EVAL(NM conftest.$ac_objext \| $ac_cv_sys_global_symbol_pipe \> $ac_nlist) && test -s "$ac_nlist"; then
|
|
||||||
# See whether the symbols have a leading underscore.
|
|
||||||
if egrep '^. _nm_test_func' "$ac_nlist" >/dev/null; then
|
|
||||||
ac_cv_sys_symbol_underscore=yes
|
|
||||||
else
|
|
||||||
if egrep '^. nm_test_func ' "$ac_nlist" >/dev/null; then
|
|
||||||
:
|
|
||||||
else
|
|
||||||
echo "configure: cannot find nm_test_func in $ac_nlist" >&AC_FD_CC
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "configure: cannot run $ac_cv_sys_global_symbol_pipe" >&AC_FD_CC
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "configure: failed program was:" >&AC_FD_CC
|
|
||||||
cat conftest.c >&AC_FD_CC
|
|
||||||
fi
|
|
||||||
rm -rf conftest*
|
|
||||||
])
|
|
||||||
AC_MSG_RESULT($ac_cv_sys_symbol_underscore)
|
|
||||||
USE_SYMBOL_UNDERSCORE=${ac_cv_sys_symbol_underscore=no}
|
|
||||||
AC_SUBST(USE_SYMBOL_UNDERSCORE)dnl
|
|
||||||
])
|
|
||||||
|
|
||||||
# AC_CHECK_LIBM - check for math library
|
|
||||||
AC_DEFUN(AC_CHECK_LIBM, [
|
|
||||||
AC_CHECK_LIB(mw, _mwvalidcheckl)
|
|
||||||
AC_CHECK_LIB(m, cos)
|
|
||||||
])
|
|
||||||
|
|
||||||
# AC_LIBLTDL_CONVENIENCE[(dir)] - sets LIBLTDL to the link flags for
|
|
||||||
# the libltdl convenience library, adds --enable-ltdl-convenience to
|
|
||||||
# the configure arguments. Note that LIBLTDL is not AC_SUBSTed, nor
|
|
||||||
# is AC_CONFIG_SUBDIRS called. If DIR is not provided, it is assumed
|
|
||||||
# to be `${top_builddir}/libltdl'. Make sure you start DIR with
|
|
||||||
# '${top_builddir}/' (note the single quotes!) if your package is not
|
|
||||||
# flat, and, if you're not using automake, define top_builddir as
|
|
||||||
# appropriate in the Makefiles.
|
|
||||||
AC_DEFUN(AC_LIBLTDL_CONVENIENCE, [
|
|
||||||
case "$enable_ltdl_convenience" in
|
|
||||||
no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;;
|
|
||||||
"") enable_ltdl_convenience=yes
|
|
||||||
ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;;
|
|
||||||
esac
|
|
||||||
LIBLTDL=ifelse($#,1,$1,['${top_builddir}/libltdl'])/libltdlc.la
|
|
||||||
])
|
|
||||||
|
|
||||||
# AC_LIBLTDL_INSTALLABLE[(dir)] - sets LIBLTDL to the link flags for
|
|
||||||
# the libltdl installable library, and adds --enable-ltdl-install to
|
|
||||||
# the configure arguments. Note that LIBLTDL is not AC_SUBSTed, nor
|
|
||||||
# is AC_CONFIG_SUBDIRS called. If DIR is not provided, it is assumed
|
|
||||||
# to be `${top_builddir}/libltdl'. Make sure you start DIR with
|
|
||||||
# '${top_builddir}/' (note the single quotes!) if your package is not
|
|
||||||
# flat, and, if you're not using automake, define top_builddir as
|
|
||||||
# appropriate in the Makefiles.
|
|
||||||
# In the future, this macro may have to be called after AC_PROG_LIBTOOL.
|
|
||||||
AC_DEFUN(AC_LIBLTDL_INSTALLABLE, [
|
|
||||||
AC_CHECK_LIB(ltdl, main, LIBLTDL="-lltdl", [
|
|
||||||
case "$enable_ltdl_install" in
|
|
||||||
no) AC_MSG_WARN([libltdl not installed, but installation disabled]) ;;
|
|
||||||
"") enable_ltdl_install=yes
|
|
||||||
ac_configure_args="$ac_configure_args --enable-ltdl-install" ;;
|
|
||||||
esac
|
|
||||||
])
|
|
||||||
if test x"$enable_ltdl_install" != x"no"; then
|
|
||||||
LIBLTDL=ifelse($#,1,$1,['${top_builddir}/libltdl'])/libltdl.la
|
|
||||||
fi
|
|
||||||
])
|
|
||||||
|
|
||||||
dnl old names
|
|
||||||
AC_DEFUN(AM_PROG_LIBTOOL, [indir([AC_PROG_LIBTOOL])])dnl
|
|
||||||
AC_DEFUN(AM_ENABLE_SHARED, [indir([AC_ENABLE_SHARED], $@)])dnl
|
|
||||||
AC_DEFUN(AM_ENABLE_STATIC, [indir([AC_ENABLE_STATIC], $@)])dnl
|
|
||||||
AC_DEFUN(AM_DISABLE_SHARED, [indir([AC_DISABLE_SHARED], $@)])dnl
|
|
||||||
AC_DEFUN(AM_DISABLE_STATIC, [indir([AC_DISABLE_STATIC], $@)])dnl
|
|
||||||
AC_DEFUN(AM_PROG_LD, [indir([AC_PROG_LD])])dnl
|
|
||||||
AC_DEFUN(AM_PROG_NM, [indir([AC_PROG_NM])])dnl
|
|
||||||
AC_DEFUN(AM_SYS_NM_PARSE, [indir([AC_SYS_NM_PARSE])])dnl
|
|
||||||
AC_DEFUN(AM_SYS_SYMBOL_UNDERSCORE, [indir([AC_SYS_SYMBOL_UNDERSCORE])])dnl
|
|
||||||
AC_DEFUN(AM_SYS_LIBTOOL_CYGWIN, [indir([AC_SYS_LIBTOOL_CYGWIN])])dnl
|
|
||||||
|
|
||||||
|
|||||||
640
libffi/configure
vendored
640
libffi/configure
vendored
File diff suppressed because it is too large
Load Diff
@@ -17,7 +17,8 @@ AC_EXEEXT
|
|||||||
AM_MAINTAINER_MODE
|
AM_MAINTAINER_MODE
|
||||||
|
|
||||||
AC_PROG_CC
|
AC_PROG_CC
|
||||||
AC_PROG_LIBTOOL
|
AM_PROG_LIBTOOL
|
||||||
|
|
||||||
|
|
||||||
TARGETDIR="unknown"
|
TARGETDIR="unknown"
|
||||||
case "$host" in
|
case "$host" in
|
||||||
@@ -59,17 +60,20 @@ AC_CHECK_SIZEOF(float)
|
|||||||
AC_CHECK_SIZEOF(double)
|
AC_CHECK_SIZEOF(double)
|
||||||
AC_CHECK_SIZEOF(long double)
|
AC_CHECK_SIZEOF(long double)
|
||||||
|
|
||||||
|
AC_CHECK_SIZEOF(void *)
|
||||||
|
AC_C_BIGENDIAN
|
||||||
|
|
||||||
AC_SUBST(TARGET)
|
AC_SUBST(TARGET)
|
||||||
AC_SUBST(TARGETDIR)
|
AC_SUBST(TARGETDIR)
|
||||||
|
|
||||||
AC_SUBST(SHELL)
|
AC_SUBST(SHELL)
|
||||||
|
|
||||||
AC_ARG_ENABLE(debug,[ --enable-debug Debugging mode], AC_DEFINE(FFI_DEBUG))
|
AC_ARG_ENABLE(debug,[ --enable-debug Debugging mode], AC_DEFINE(FFI_DEBUG))
|
||||||
AC_ARG_ENABLE(purify-safety,
|
|
||||||
[ --enable-purify-safety Purify-safe mode], AC_DEFINE(USING_PURIFY))
|
|
||||||
|
|
||||||
AC_ARG_ENABLE(debug,[ --disable-structs Omit code for struct support], AC_DEFINE(FFI_NO_STRUCTS))
|
AC_ARG_ENABLE(debug,[ --disable-structs Omit code for struct support], AC_DEFINE(FFI_NO_STRUCTS))
|
||||||
|
|
||||||
|
AC_ARG_ENABLE(debug,[ --disable-raw-api Make the raw api unavailable], AC_DEFINE(FFI_NO_RAW_API))
|
||||||
|
|
||||||
AC_ARG_ENABLE(purify-safety,
|
AC_ARG_ENABLE(purify-safety,
|
||||||
[ --enable-purify-safety Purify-safe mode], AC_DEFINE(USING_PURIFY))
|
[ --enable-purify-safety Purify-safe mode], AC_DEFINE(USING_PURIFY))
|
||||||
|
|
||||||
|
|||||||
@@ -32,6 +32,9 @@
|
|||||||
spurious messages. */
|
spurious messages. */
|
||||||
#undef USING_PURIFY
|
#undef USING_PURIFY
|
||||||
|
|
||||||
|
/* Define this if you want the raw api disabled */
|
||||||
|
#undef FFI_DISABLE_RAW_API
|
||||||
|
|
||||||
/* This is the package name */
|
/* This is the package name */
|
||||||
#undef PACKAGE
|
#undef PACKAGE
|
||||||
|
|
||||||
@@ -61,3 +64,10 @@
|
|||||||
|
|
||||||
/* Define if you have the memcpy function. */
|
/* Define if you have the memcpy function. */
|
||||||
#undef HAVE_MEMCPY
|
#undef HAVE_MEMCPY
|
||||||
|
|
||||||
|
/* Define if target machine is big endian. */
|
||||||
|
#undef WORDS_BIGENDIAN
|
||||||
|
|
||||||
|
/* The number of bytes in a void pointer. */
|
||||||
|
#undef SIZEOF_VOID_P
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Makefile.in generated automatically by automake 1.4a from Makefile.am
|
# Makefile.in generated automatically by automake 1.4 from Makefile.am
|
||||||
|
|
||||||
# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
|
# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
|
||||||
# This Makefile.in is free software; the Free Software Foundation
|
# This Makefile.in is free software; the Free Software Foundation
|
||||||
@@ -10,6 +10,7 @@
|
|||||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||||
# PARTICULAR PURPOSE.
|
# PARTICULAR PURPOSE.
|
||||||
|
|
||||||
|
|
||||||
SHELL = @SHELL@
|
SHELL = @SHELL@
|
||||||
|
|
||||||
srcdir = @srcdir@
|
srcdir = @srcdir@
|
||||||
@@ -45,10 +46,9 @@ AUTOMAKE = @AUTOMAKE@
|
|||||||
AUTOHEADER = @AUTOHEADER@
|
AUTOHEADER = @AUTOHEADER@
|
||||||
|
|
||||||
INSTALL = @INSTALL@
|
INSTALL = @INSTALL@
|
||||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
|
||||||
INSTALL_DATA = @INSTALL_DATA@
|
INSTALL_DATA = @INSTALL_DATA@
|
||||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||||
INSTALL_STRIP_FLAG =
|
|
||||||
transform = @program_transform_name@
|
transform = @program_transform_name@
|
||||||
|
|
||||||
NORMAL_INSTALL = :
|
NORMAL_INSTALL = :
|
||||||
@@ -59,27 +59,17 @@ PRE_UNINSTALL = :
|
|||||||
POST_UNINSTALL = :
|
POST_UNINSTALL = :
|
||||||
host_alias = @host_alias@
|
host_alias = @host_alias@
|
||||||
host_triplet = @host@
|
host_triplet = @host@
|
||||||
AMTAR = @AMTAR@
|
|
||||||
AMTARFLAGS = @AMTARFLAGS@
|
|
||||||
AS = @AS@
|
|
||||||
CC = @CC@
|
CC = @CC@
|
||||||
DLLTOOL = @DLLTOOL@
|
|
||||||
EXEEXT = @EXEEXT@
|
EXEEXT = @EXEEXT@
|
||||||
LD = @LD@
|
|
||||||
LIBTOOL = @LIBTOOL@
|
LIBTOOL = @LIBTOOL@
|
||||||
LN_S = @LN_S@
|
|
||||||
MAINT = @MAINT@
|
|
||||||
MAKEINFO = @MAKEINFO@
|
MAKEINFO = @MAKEINFO@
|
||||||
NM = @NM@
|
|
||||||
PACKAGE = @PACKAGE@
|
PACKAGE = @PACKAGE@
|
||||||
RANLIB = @RANLIB@
|
RANLIB = @RANLIB@
|
||||||
SHELL = @SHELL@
|
SHELL = @SHELL@
|
||||||
TARGET = @TARGET@
|
TARGET = @TARGET@
|
||||||
TARGETDIR = @TARGETDIR@
|
TARGETDIR = @TARGETDIR@
|
||||||
USE_SYMBOL_UNDERSCORE = @USE_SYMBOL_UNDERSCORE@
|
|
||||||
VERSION = @VERSION@
|
VERSION = @VERSION@
|
||||||
|
|
||||||
|
|
||||||
AUTOMAKE_OPTIONS = foreign
|
AUTOMAKE_OPTIONS = foreign
|
||||||
|
|
||||||
EXTRA_DIST = ffi.h.in ffi_common.h ffi_mips.h
|
EXTRA_DIST = ffi.h.in ffi_common.h ffi_mips.h
|
||||||
@@ -87,18 +77,17 @@ EXTRA_DIST = ffi.h.in ffi_common.h ffi_mips.h
|
|||||||
hackdir = $(includedir)
|
hackdir = $(includedir)
|
||||||
|
|
||||||
hack_DATA = fficonfig.h ffi.h ffi_mips.h
|
hack_DATA = fficonfig.h ffi.h ffi_mips.h
|
||||||
subdir = include
|
|
||||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
||||||
CONFIG_HEADER = ../fficonfig.h
|
CONFIG_HEADER = ../fficonfig.h
|
||||||
CONFIG_CLEAN_FILES = ffi.h
|
CONFIG_CLEAN_FILES = ffi.h
|
||||||
DIST_SOURCES =
|
|
||||||
DATA = $(hack_DATA)
|
DATA = $(hack_DATA)
|
||||||
|
|
||||||
DIST_COMMON = $(hack_DATA) Makefile.am Makefile.in ffi.h.in
|
DIST_COMMON = Makefile.am Makefile.in ffi.h.in
|
||||||
|
|
||||||
|
|
||||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
|
||||||
|
|
||||||
|
TAR = tar
|
||||||
GZIP_ENV = --best
|
GZIP_ENV = --best
|
||||||
all: all-redirect
|
all: all-redirect
|
||||||
.SUFFIXES:
|
.SUFFIXES:
|
||||||
@@ -116,18 +105,19 @@ install-hackDATA: $(hack_DATA)
|
|||||||
@$(NORMAL_INSTALL)
|
@$(NORMAL_INSTALL)
|
||||||
$(mkinstalldirs) $(DESTDIR)$(hackdir)
|
$(mkinstalldirs) $(DESTDIR)$(hackdir)
|
||||||
@list='$(hack_DATA)'; for p in $$list; do \
|
@list='$(hack_DATA)'; for p in $$list; do \
|
||||||
if test -f "$$p"; then d= ; else d="$(srcdir)/"; fi; \
|
if test -f $(srcdir)/$$p; then \
|
||||||
f="`echo $$p | sed -e 's|^.*/||'`"; \
|
echo " $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(hackdir)/$$p"; \
|
||||||
echo " $(INSTALL_DATA) $$d$$p $(DESTDIR)$(hackdir)/$$f"; \
|
$(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(hackdir)/$$p; \
|
||||||
$(INSTALL_DATA) $$d$$p $(DESTDIR)$(hackdir)/$$f; \
|
else if test -f $$p; then \
|
||||||
|
echo " $(INSTALL_DATA) $$p $(DESTDIR)$(hackdir)/$$p"; \
|
||||||
|
$(INSTALL_DATA) $$p $(DESTDIR)$(hackdir)/$$p; \
|
||||||
|
fi; fi; \
|
||||||
done
|
done
|
||||||
|
|
||||||
uninstall-hackDATA:
|
uninstall-hackDATA:
|
||||||
@$(NORMAL_UNINSTALL)
|
@$(NORMAL_UNINSTALL)
|
||||||
@list='$(hack_DATA)'; for p in $$list; do \
|
list='$(hack_DATA)'; for p in $$list; do \
|
||||||
f="`echo $$p | sed -e 's|^.*/||'`"; \
|
rm -f $(DESTDIR)$(hackdir)/$$p; \
|
||||||
echo " rm -f $(DESTDIR)$(hackdir)/$$f"; \
|
|
||||||
rm -f $(DESTDIR)$(hackdir)/$$f; \
|
|
||||||
done
|
done
|
||||||
tags: TAGS
|
tags: TAGS
|
||||||
TAGS:
|
TAGS:
|
||||||
@@ -135,6 +125,8 @@ TAGS:
|
|||||||
|
|
||||||
distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
|
distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
|
||||||
|
|
||||||
|
subdir = include
|
||||||
|
|
||||||
distdir: $(DISTFILES)
|
distdir: $(DISTFILES)
|
||||||
here=`cd $(top_builddir) && pwd`; \
|
here=`cd $(top_builddir) && pwd`; \
|
||||||
top_distdir=`cd $(top_distdir) && pwd`; \
|
top_distdir=`cd $(top_distdir) && pwd`; \
|
||||||
@@ -144,7 +136,7 @@ distdir: $(DISTFILES)
|
|||||||
@for file in $(DISTFILES); do \
|
@for file in $(DISTFILES); do \
|
||||||
d=$(srcdir); \
|
d=$(srcdir); \
|
||||||
if test -d $$d/$$file; then \
|
if test -d $$d/$$file; then \
|
||||||
cp -pr $$d/$$file $(distdir)/$$file; \
|
cp -pr $$/$$file $(distdir)/$$file; \
|
||||||
else \
|
else \
|
||||||
test -f $(distdir)/$$file \
|
test -f $(distdir)/$$file \
|
||||||
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|
||||||
@@ -173,7 +165,7 @@ uninstall: uninstall-am
|
|||||||
all-am: Makefile $(DATA)
|
all-am: Makefile $(DATA)
|
||||||
all-redirect: all-am
|
all-redirect: all-am
|
||||||
install-strip:
|
install-strip:
|
||||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_STRIP_FLAG=-s install
|
$(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
|
||||||
installdirs:
|
installdirs:
|
||||||
$(mkinstalldirs) $(DESTDIR)$(hackdir)
|
$(mkinstalldirs) $(DESTDIR)$(hackdir)
|
||||||
|
|
||||||
@@ -209,8 +201,8 @@ maintainer-clean: maintainer-clean-am
|
|||||||
.PHONY: uninstall-hackDATA install-hackDATA tags distdir info-am info \
|
.PHONY: uninstall-hackDATA install-hackDATA tags distdir info-am info \
|
||||||
dvi-am dvi check check-am installcheck-am installcheck install-exec-am \
|
dvi-am dvi check check-am installcheck-am installcheck install-exec-am \
|
||||||
install-exec install-data-am install-data install-am install \
|
install-exec install-data-am install-data install-am install \
|
||||||
uninstall-am uninstall all-redirect all-am all install-strip \
|
uninstall-am uninstall all-redirect all-am all installdirs \
|
||||||
installdirs mostlyclean-generic distclean-generic clean-generic \
|
mostlyclean-generic distclean-generic clean-generic \
|
||||||
maintainer-clean-generic clean mostlyclean distclean maintainer-clean
|
maintainer-clean-generic clean mostlyclean distclean maintainer-clean
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/* -----------------------------------------------------------------*-C-*-
|
/* -----------------------------------------------------------------*-C-*-
|
||||||
libffi @VERSION@ - Copyright (c) 1996, 1997, 1998 Cygnus Solutions
|
libffi @VERSION@ - Copyright (c) 1996-1999 Cygnus Solutions
|
||||||
|
|
||||||
$Id: ffi.h.in,v 1.1 1998/11/29 16:48:16 green Exp $
|
$Id: ffi.h.in,v 1.2 1999/08/04 18:00:05 green Exp $
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
a copy of this software and associated documentation files (the
|
a copy of this software and associated documentation files (the
|
||||||
@@ -127,7 +127,7 @@
|
|||||||
#ifdef MIPS
|
#ifdef MIPS
|
||||||
#include <ffi_mips.h>
|
#include <ffi_mips.h>
|
||||||
#else
|
#else
|
||||||
#define SIZEOF_ARG sizeof(void*)
|
#define SIZEOF_ARG SIZEOF_VOID_P
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef LIBFFI_ASM
|
#ifndef LIBFFI_ASM
|
||||||
@@ -243,6 +243,109 @@ typedef struct {
|
|||||||
|
|
||||||
} ffi_cif;
|
} ffi_cif;
|
||||||
|
|
||||||
|
/* ---- Definitions for the raw API -------------------------------------- */
|
||||||
|
|
||||||
|
#if !FFI_NO_RAW_API
|
||||||
|
|
||||||
|
#if SIZEOF_ARG == 4
|
||||||
|
|
||||||
|
#define UINT_ARG UINT32
|
||||||
|
#define SINT_ARG SINT32
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if SIZEOF_ARG == 8
|
||||||
|
|
||||||
|
#define UINT_ARG UINT64
|
||||||
|
#define SINT_ARG SINT64
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef union {
|
||||||
|
SINT_ARG sint;
|
||||||
|
UINT_ARG uint;
|
||||||
|
char data[SIZEOF_ARG];
|
||||||
|
void* ptr;
|
||||||
|
} ffi_raw;
|
||||||
|
|
||||||
|
void ffi_raw_call (/*@dependent@*/ ffi_cif *cif,
|
||||||
|
void (*fn)(),
|
||||||
|
/*@out@*/ void *rvalue,
|
||||||
|
/*@dependent@*/ ffi_raw *avalue);
|
||||||
|
|
||||||
|
void ffi_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw);
|
||||||
|
void ffi_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args);
|
||||||
|
size_t ffi_raw_size (ffi_cif *cif);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* !FFI_NO_RAW_API */
|
||||||
|
|
||||||
|
/* ---- Definitions for closures ----------------------------------------- */
|
||||||
|
|
||||||
|
#ifdef X86
|
||||||
|
|
||||||
|
#define FFI_CLOSURES 1 /* x86 supports closures */
|
||||||
|
#define FFI_TRAMPOLINE_SIZE 10
|
||||||
|
#define FFI_NATIVE_RAW_API 1 /* and has native raw api support */
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#define FFI_CLOSURES 0
|
||||||
|
#define FFI_NATIVE_RAW_API 0
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#if FFI_CLOSURES
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
char tramp[FFI_TRAMPOLINE_SIZE];
|
||||||
|
ffi_cif *cif;
|
||||||
|
void (*fun)(ffi_cif*,void*,void**,void*);
|
||||||
|
void *user_data;
|
||||||
|
} ffi_closure;
|
||||||
|
|
||||||
|
ffi_status
|
||||||
|
ffi_prep_closure (ffi_closure*,
|
||||||
|
ffi_cif *,
|
||||||
|
void (*fun)(ffi_cif*,void*,void**,void*),
|
||||||
|
void *user_data);
|
||||||
|
|
||||||
|
#if !FFI_NO_RAW_API
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
char tramp[FFI_TRAMPOLINE_SIZE];
|
||||||
|
|
||||||
|
ffi_cif *cif;
|
||||||
|
|
||||||
|
#if !FFI_NATIVE_RAW_API
|
||||||
|
|
||||||
|
/* if this is enabled, then a raw closure has the same layout
|
||||||
|
as a regular closure. We use this to install an intermediate
|
||||||
|
handler to do the transaltion, void** -> ffi_raw*. */
|
||||||
|
|
||||||
|
void (*translate_args)(ffi_cif*,void*,void**,void*);
|
||||||
|
void *this_closure;
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void (*fun)(ffi_cif*,void*,ffi_raw*,void*);
|
||||||
|
void *user_data;
|
||||||
|
|
||||||
|
} ffi_raw_closure;
|
||||||
|
|
||||||
|
ffi_status
|
||||||
|
ffi_prep_raw_closure (ffi_raw_closure*,
|
||||||
|
ffi_cif *cif,
|
||||||
|
void (*fun)(ffi_cif*,void*,ffi_raw*,void*),
|
||||||
|
void *user_data);
|
||||||
|
|
||||||
|
#endif /* !FFI_NO_RAW_API */
|
||||||
|
#endif /* FFI_CLOSURES */
|
||||||
|
|
||||||
/* ---- Public interface definition -------------------------------------- */
|
/* ---- Public interface definition -------------------------------------- */
|
||||||
|
|
||||||
ffi_status ffi_prep_cif(/*@out@*/ /*@partial@*/ ffi_cif *cif,
|
ffi_status ffi_prep_cif(/*@out@*/ /*@partial@*/ ffi_cif *cif,
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
/* -----------------------------------------------------------------------
|
/* -----------------------------------------------------------------------
|
||||||
ffi.c - Copyright (c) 1996, 1998 Cygnus Solutions
|
ffi.c - Copyright (c) 1996, 1998, 1999 Cygnus Solutions
|
||||||
|
|
||||||
x86 Foreign Function Interface
|
x86 Foreign Function Interface
|
||||||
|
|
||||||
$Id: ffi.c,v 1.1 1998/11/29 16:48:16 green Exp $
|
$Id: ffi.c,v 1.2 1999/08/04 18:00:05 green Exp $
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
a copy of this software and associated documentation files (the
|
a copy of this software and associated documentation files (the
|
||||||
@@ -127,7 +127,6 @@ ffi_status ffi_prep_cif_machdep(ffi_cif *cif)
|
|||||||
{
|
{
|
||||||
case FFI_TYPE_VOID:
|
case FFI_TYPE_VOID:
|
||||||
case FFI_TYPE_STRUCT:
|
case FFI_TYPE_STRUCT:
|
||||||
case FFI_TYPE_UINT64:
|
|
||||||
case FFI_TYPE_SINT64:
|
case FFI_TYPE_SINT64:
|
||||||
case FFI_TYPE_FLOAT:
|
case FFI_TYPE_FLOAT:
|
||||||
case FFI_TYPE_DOUBLE:
|
case FFI_TYPE_DOUBLE:
|
||||||
@@ -135,6 +134,10 @@ ffi_status ffi_prep_cif_machdep(ffi_cif *cif)
|
|||||||
cif->flags = (unsigned) cif->rtype->type;
|
cif->flags = (unsigned) cif->rtype->type;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case FFI_TYPE_UINT64:
|
||||||
|
cif->flags = FFI_TYPE_SINT64;
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
cif->flags = FFI_TYPE_INT;
|
cif->flags = FFI_TYPE_INT;
|
||||||
break;
|
break;
|
||||||
@@ -190,3 +193,317 @@ void ffi_call(/*@dependent@*/ ffi_cif *cif,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/** private members **/
|
||||||
|
|
||||||
|
static void ffi_prep_incoming_args_SYSV (char *stack, void **ret,
|
||||||
|
void** args, ffi_cif* cif);
|
||||||
|
static void ffi_closure_SYSV ();
|
||||||
|
static void ffi_closure_raw_SYSV ();
|
||||||
|
|
||||||
|
/* This function is jumped to by the trampoline, on entry, %ecx (a
|
||||||
|
* caller-save register) holds the address of the closure.
|
||||||
|
* Clearly, this requires __GNUC__, so perhaps we should translate this
|
||||||
|
* into an assembly file if this is to be distributed with ffi.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static void
|
||||||
|
ffi_closure_SYSV ()
|
||||||
|
{
|
||||||
|
// this is our return value storage
|
||||||
|
long double res;
|
||||||
|
|
||||||
|
// our various things...
|
||||||
|
void *args;
|
||||||
|
ffi_cif *cif;
|
||||||
|
void **arg_area;
|
||||||
|
ffi_closure *closure;
|
||||||
|
unsigned short rtype;
|
||||||
|
void *resp = (void*)&res;
|
||||||
|
|
||||||
|
/* grab the trampoline context pointer */
|
||||||
|
asm ("movl %%ecx,%0" : "=r" (closure));
|
||||||
|
|
||||||
|
cif = closure->cif;
|
||||||
|
arg_area = (void**) alloca (cif->nargs * sizeof (void*));
|
||||||
|
asm ("leal 8(%%ebp),%0" : "=q" (args));
|
||||||
|
|
||||||
|
/* this call will initialize ARG_AREA, such that each
|
||||||
|
* element in that array points to the corresponding
|
||||||
|
* value on the stack; and if the function returns
|
||||||
|
* a structure, it will re-set RESP to point to the
|
||||||
|
* structure return address. */
|
||||||
|
|
||||||
|
ffi_prep_incoming_args_SYSV(args, (void**)&resp, arg_area, cif);
|
||||||
|
|
||||||
|
(closure->fun) (cif, resp, arg_area, closure->user_data);
|
||||||
|
|
||||||
|
rtype = cif->flags;
|
||||||
|
|
||||||
|
/* now, do a generic return based on the value of rtype */
|
||||||
|
if (rtype == FFI_TYPE_INT)
|
||||||
|
{
|
||||||
|
asm ("movl (%0),%%eax" : : "r" (resp) : "eax");
|
||||||
|
}
|
||||||
|
else if (rtype == FFI_TYPE_FLOAT)
|
||||||
|
{
|
||||||
|
asm ("flds (%0)" : : "r" (resp) : "st" );
|
||||||
|
}
|
||||||
|
else if (rtype == FFI_TYPE_DOUBLE)
|
||||||
|
{
|
||||||
|
asm ("fldl (%0)" : : "r" (resp) : "st", "st(1)" );
|
||||||
|
}
|
||||||
|
else if (rtype == FFI_TYPE_LONGDOUBLE)
|
||||||
|
{
|
||||||
|
asm ("fldt (%0)" : : "r" (resp) : "st", "st(1)" );
|
||||||
|
}
|
||||||
|
else if (rtype == FFI_TYPE_SINT64)
|
||||||
|
{
|
||||||
|
asm ("movl 0(%0),%%eax;"
|
||||||
|
"movl 4(%0),%%edx"
|
||||||
|
: : "r"(resp)
|
||||||
|
: "eax", "edx");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*@-exportheader@*/
|
||||||
|
static void
|
||||||
|
ffi_prep_incoming_args_SYSV(char *stack, void **rvalue,
|
||||||
|
void **avalue, ffi_cif *cif)
|
||||||
|
/*@=exportheader@*/
|
||||||
|
{
|
||||||
|
register unsigned int i;
|
||||||
|
register int tmp;
|
||||||
|
register unsigned int avn;
|
||||||
|
register void **p_argv;
|
||||||
|
register char *argp;
|
||||||
|
register ffi_type **p_arg;
|
||||||
|
|
||||||
|
tmp = 0;
|
||||||
|
argp = stack;
|
||||||
|
|
||||||
|
if ( cif->rtype->type == FFI_TYPE_STRUCT ) {
|
||||||
|
*rvalue = *(void **) argp;
|
||||||
|
argp += 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
avn = cif->nargs;
|
||||||
|
p_argv = avalue;
|
||||||
|
|
||||||
|
for (i = cif->nargs, p_arg = cif->arg_types;
|
||||||
|
(i != 0) && (avn != 0);
|
||||||
|
i--, p_arg++)
|
||||||
|
{
|
||||||
|
size_t z;
|
||||||
|
|
||||||
|
/* Align if necessary */
|
||||||
|
if (((*p_arg)->alignment - 1) & (unsigned) argp) {
|
||||||
|
argp = (char *) ALIGN(argp, (*p_arg)->alignment);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (avn != 0)
|
||||||
|
{
|
||||||
|
avn--;
|
||||||
|
z = (*p_arg)->size;
|
||||||
|
|
||||||
|
/* because we're little endian, this is
|
||||||
|
what it turns into. */
|
||||||
|
|
||||||
|
*p_argv = (void*) argp;
|
||||||
|
|
||||||
|
p_argv++;
|
||||||
|
argp += z;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* How to make a trampoline. Derived from gcc/config/i386/i386.c. */
|
||||||
|
|
||||||
|
#define FFI_INIT_TRAMPOLINE(TRAMP,FUN,CTX) \
|
||||||
|
({ unsigned char *__tramp = (unsigned char*)(TRAMP); \
|
||||||
|
unsigned int __fun = (unsigned int)(FUN); \
|
||||||
|
unsigned int __ctx = (unsigned int)(CTX); \
|
||||||
|
unsigned int __dis = __fun - ((unsigned int) __tramp + 10); \
|
||||||
|
*(unsigned char*) &__tramp[0] = 0xb9; \
|
||||||
|
*(unsigned int*) &__tramp[1] = __ctx; \
|
||||||
|
*(unsigned char*) &__tramp[5] = 0xe9; \
|
||||||
|
*(unsigned int*) &__tramp[6] = __dis; \
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
/* the cif must already be prep'ed */
|
||||||
|
|
||||||
|
ffi_status
|
||||||
|
ffi_prep_closure (ffi_closure* closure,
|
||||||
|
ffi_cif* cif,
|
||||||
|
void (*fun)(ffi_cif*,void*,void**,void*),
|
||||||
|
void *user_data)
|
||||||
|
{
|
||||||
|
FFI_ASSERT (cif->abi == FFI_SYSV);
|
||||||
|
|
||||||
|
FFI_INIT_TRAMPOLINE (&closure->tramp[0], \
|
||||||
|
&ffi_closure_SYSV, \
|
||||||
|
(void*)closure);
|
||||||
|
|
||||||
|
closure->cif = cif;
|
||||||
|
closure->user_data = user_data;
|
||||||
|
closure->fun = fun;
|
||||||
|
|
||||||
|
return FFI_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ------- Native raw API support -------------------------------- */
|
||||||
|
|
||||||
|
#if !FFI_NO_RAW_API
|
||||||
|
|
||||||
|
static void
|
||||||
|
ffi_closure_raw_SYSV ()
|
||||||
|
{
|
||||||
|
// this is our return value storage
|
||||||
|
long double res;
|
||||||
|
|
||||||
|
// our various things...
|
||||||
|
void *args;
|
||||||
|
ffi_raw *raw_args;
|
||||||
|
ffi_cif *cif;
|
||||||
|
ffi_raw_closure *closure;
|
||||||
|
unsigned short rtype;
|
||||||
|
void *resp = (void*)&res;
|
||||||
|
|
||||||
|
/* grab the trampoline context pointer */
|
||||||
|
asm ("movl %%ecx,%0" : "=r" (closure));
|
||||||
|
|
||||||
|
/* take the argument pointer */
|
||||||
|
asm ("leal 8(%%ebp),%0" : "=q" (args));
|
||||||
|
|
||||||
|
/* get the cif */
|
||||||
|
cif = closure->cif;
|
||||||
|
|
||||||
|
/* the SYSV/X86 abi matches the RAW API exactly, well.. almost */
|
||||||
|
raw_args = (ffi_raw*) args;
|
||||||
|
|
||||||
|
(closure->fun) (cif, resp, raw_args, closure->user_data);
|
||||||
|
|
||||||
|
rtype = cif->flags;
|
||||||
|
|
||||||
|
/* now, do a generic return based on the value of rtype */
|
||||||
|
if (rtype == FFI_TYPE_INT)
|
||||||
|
{
|
||||||
|
asm ("movl (%0),%%eax" : : "r" (resp) : "eax");
|
||||||
|
}
|
||||||
|
else if (rtype == FFI_TYPE_FLOAT)
|
||||||
|
{
|
||||||
|
asm ("flds (%0)" : : "r" (resp) : "st" );
|
||||||
|
}
|
||||||
|
else if (rtype == FFI_TYPE_DOUBLE)
|
||||||
|
{
|
||||||
|
asm ("fldl (%0)" : : "r" (resp) : "st", "st(1)" );
|
||||||
|
}
|
||||||
|
else if (rtype == FFI_TYPE_LONGDOUBLE)
|
||||||
|
{
|
||||||
|
asm ("fldt (%0)" : : "r" (resp) : "st", "st(1)" );
|
||||||
|
}
|
||||||
|
else if (rtype == FFI_TYPE_SINT64)
|
||||||
|
{
|
||||||
|
asm ("movl 0(%0),%%eax; movl 4(%0),%%edx"
|
||||||
|
: : "r"(resp)
|
||||||
|
: "eax", "edx");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ffi_status
|
||||||
|
ffi_prep_raw_closure (ffi_raw_closure* closure,
|
||||||
|
ffi_cif* cif,
|
||||||
|
void (*fun)(ffi_cif*,void*,ffi_raw*,void*),
|
||||||
|
void *user_data)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
FFI_ASSERT (cif->abi == FFI_SYSV);
|
||||||
|
|
||||||
|
// we currently don't support certain kinds of arguments for raw
|
||||||
|
// closures. This should be implemented by a seperate assembly language
|
||||||
|
// routine, since it would require argument processing, something we
|
||||||
|
// don't do now for performance.
|
||||||
|
|
||||||
|
for (i = cif->nargs-1; i >= 0; i--)
|
||||||
|
{
|
||||||
|
FFI_ASSERT (cif->arg_types[i]->type != FFI_TYPE_STRUCT);
|
||||||
|
FFI_ASSERT (cif->arg_types[i]->type != FFI_TYPE_LONGDOUBLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
FFI_INIT_TRAMPOLINE (&closure->tramp[0], &ffi_closure_raw_SYSV,
|
||||||
|
(void*)closure);
|
||||||
|
|
||||||
|
closure->cif = cif;
|
||||||
|
closure->user_data = user_data;
|
||||||
|
closure->fun = fun;
|
||||||
|
|
||||||
|
return FFI_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
ffi_prep_args_raw(char *stack, extended_cif *ecif)
|
||||||
|
{
|
||||||
|
memcpy (stack, ecif->avalue, ecif->cif->bytes);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* we borrow this routine from libffi (it must be changed, though, to
|
||||||
|
* actually call the function passed in the first argument. as of
|
||||||
|
* libffi-1.20, this is not the case.)
|
||||||
|
*/
|
||||||
|
|
||||||
|
extern void
|
||||||
|
ffi_call_SYSV(void (*)(char *, extended_cif *),
|
||||||
|
/*@out@*/ extended_cif *,
|
||||||
|
unsigned, unsigned,
|
||||||
|
/*@out@*/ unsigned *,
|
||||||
|
void (*fn)());
|
||||||
|
|
||||||
|
void
|
||||||
|
ffi_call_raw(/*@dependent@*/ ffi_cif *cif,
|
||||||
|
void (*fn)(),
|
||||||
|
/*@out@*/ void *rvalue,
|
||||||
|
/*@dependent@*/ void **avalue)
|
||||||
|
{
|
||||||
|
extended_cif ecif;
|
||||||
|
|
||||||
|
ecif.cif = cif;
|
||||||
|
ecif.avalue = avalue;
|
||||||
|
|
||||||
|
/* If the return value is a struct and we don't have a return */
|
||||||
|
/* value address then we need to make one */
|
||||||
|
|
||||||
|
if ((rvalue == NULL) &&
|
||||||
|
(cif->rtype->type == FFI_TYPE_STRUCT))
|
||||||
|
{
|
||||||
|
/*@-sysunrecog@*/
|
||||||
|
ecif.rvalue = alloca(cif->rtype->size);
|
||||||
|
/*@=sysunrecog@*/
|
||||||
|
}
|
||||||
|
else
|
||||||
|
ecif.rvalue = rvalue;
|
||||||
|
|
||||||
|
|
||||||
|
switch (cif->abi)
|
||||||
|
{
|
||||||
|
case FFI_SYSV:
|
||||||
|
/*@-usedef@*/
|
||||||
|
ffi_call_SYSV(ffi_prep_args_raw, &ecif, cif->bytes,
|
||||||
|
cif->flags, ecif.rvalue, fn);
|
||||||
|
/*@=usedef@*/
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
FFI_ASSERT(0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
X86 Foreign Function Interface
|
X86 Foreign Function Interface
|
||||||
|
|
||||||
$Id: sysv.S,v 1.1 1998/11/29 16:48:16 green Exp $
|
$Id: sysv.S,v 1.2 1999/08/04 18:00:05 green Exp $
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
a copy of this software and associated documentation files (the
|
a copy of this software and associated documentation files (the
|
||||||
@@ -50,7 +50,7 @@ ffi_call_SYSV:
|
|||||||
# Place all of the ffi_prep_args in position
|
# Place all of the ffi_prep_args in position
|
||||||
pushl 12(%ebp)
|
pushl 12(%ebp)
|
||||||
pushl %eax
|
pushl %eax
|
||||||
call ffi_prep_args
|
call *8(%ebp)
|
||||||
|
|
||||||
# Return stack to previous state and call the function
|
# Return stack to previous state and call the function
|
||||||
addl $8,%esp
|
addl $8,%esp
|
||||||
|
|||||||
Reference in New Issue
Block a user