## Process this with automake to create Makefile.in

AUTOMAKE_OPTIONS = foreign subdir-objects

ACLOCAL_AMFLAGS = -I m4

SUBDIRS = include testsuite man
if BUILD_DOCS
## This hack is needed because it doesn't seem possible to make a
## conditional info_TEXINFOS in Automake.  At least Automake 1.14
## either gives errors -- if this attempted in the most
## straightforward way -- or simply unconditionally tries to build the
## info file.
SUBDIRS += doc
endif

EXTRA_DIST = LICENSE ChangeLog.v1 ChangeLog.libgcj			\
	ChangeLog.libffi ChangeLog.libffi-3.1				\
	m4/libtool.m4 m4/lt~obsolete.m4					\
	 m4/ltoptions.m4 m4/ltsugar.m4 m4/ltversion.m4			\
	 m4/ltversion.m4 src/debug.c msvcc.sh				\
	generate-darwin-source-and-headers.py				\
	libffi.xcodeproj/project.pbxproj				\
	libtool-ldflags libtool-version configure.host README.md        \
	libffi.map.in

# local.exp is generated by configure
DISTCLEANFILES = local.exp

# Subdir rules rely on $(FLAGS_TO_PASS)
FLAGS_TO_PASS = $(AM_MAKEFLAGS)

MAKEOVERRIDES=

pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = libffi.pc

toolexeclib_LTLIBRARIES = libffi.la
noinst_LTLIBRARIES = libffi_convenience.la

libffi_la_SOURCES = src/prep_cif.c src/types.c \
		src/raw_api.c src/java_raw_api.c src/closures.c

if FFI_DEBUG
libffi_la_SOURCES += src/debug.c
endif

noinst_HEADERS = \
	src/aarch64/ffitarget.h src/aarch64/internal.h			\
	src/alpha/ffitarget.h src/alpha/internal.h			\
	src/arc/ffitarget.h						\
	src/arm/ffitarget.h src/arm/internal.h				\
	src/avr32/ffitarget.h						\
	src/bfin/ffitarget.h						\
	src/cris/ffitarget.h						\
	src/frv/ffitarget.h						\
	src/ia64/ffitarget.h src/ia64/ia64_flags.h			\
	src/m32r/ffitarget.h						\
	src/m68k/ffitarget.h						\
	src/m88k/ffitarget.h						\
	src/metag/ffitarget.h						\
	src/microblaze/ffitarget.h					\
	src/mips/ffitarget.h						\
	src/moxie/ffitarget.h						\
	src/nios2/ffitarget.h						\
	src/or1k/ffitarget.h						\
	src/pa/ffitarget.h						\
	src/powerpc/ffitarget.h src/powerpc/asm.h src/powerpc/ffi_powerpc.h \
	src/riscv/ffitarget.h						\
	src/s390/ffitarget.h src/s390/internal.h			\
	src/sh/ffitarget.h						\
	src/sh64/ffitarget.h						\
	src/sparc/ffitarget.h src/sparc/internal.h			\
	src/tile/ffitarget.h						\
	src/vax/ffitarget.h						\
	src/x86/ffitarget.h src/x86/internal.h src/x86/internal64.h src/x86/asmnames.h \
	src/xtensa/ffitarget.h						\
	src/dlmalloc.c

EXTRA_libffi_la_SOURCES = \
	src/aarch64/ffi.c src/aarch64/sysv.S				\
	src/alpha/ffi.c src/alpha/osf.S					\
	src/arc/ffi.c src/arc/arcompact.S				\
	src/arm/ffi.c src/arm/sysv.S					\
	src/avr32/ffi.c src/avr32/sysv.S				\
	src/bfin/ffi.c src/bfin/sysv.S					\
	src/cris/ffi.c src/cris/sysv.S					\
	src/frv/ffi.c src/frv/eabi.S					\
	src/ia64/ffi.c src/ia64/unix.S					\
	src/m32r/ffi.c src/m32r/sysv.S					\
	src/m68k/ffi.c src/m68k/sysv.S					\
	src/m88k/ffi.c src/m88k/obsd.S					\
	src/metag/ffi.c src/metag/sysv.S				\
	src/microblaze/ffi.c src/microblaze/sysv.S			\
	src/mips/ffi.c src/mips/o32.S src/mips/n32.S			\
	src/moxie/ffi.c src/moxie/eabi.S				\
	src/nios2/ffi.c src/nios2/sysv.S				\
	src/or1k/ffi.c src/or1k/sysv.S					\
	src/pa/ffi.c src/pa/linux.S src/pa/hpux32.S			\
	src/powerpc/ffi.c src/powerpc/ffi_sysv.c src/powerpc/ffi_linux64.c \
	 src/powerpc/sysv.S src/powerpc/linux64.S			\
	 src/powerpc/linux64_closure.S src/powerpc/ppc_closure.S	\
	 src/powerpc/aix.S src/powerpc/darwin.S src/powerpc/aix_closure.S \
	 src/powerpc/darwin_closure.S src/powerpc/ffi_darwin.c		\
	src/riscv/ffi.c src/riscv/sysv.S				\
	src/s390/ffi.c src/s390/sysv.S					\
	src/sh/ffi.c src/sh/sysv.S					\
	src/sh64/ffi.c src/sh64/sysv.S					\
	src/sparc/ffi.c src/sparc/ffi64.c src/sparc/v8.S src/sparc/v9.S	\
	src/tile/ffi.c src/tile/tile.S					\
	src/vax/ffi.c src/vax/elfbsd.S					\
	src/x86/ffi.c src/x86/sysv.S					\
	 src/x86/ffiw64.c src/x86/win64.S 				\
	 src/x86/ffi64.c src/x86/unix64.S				\
	src/xtensa/ffi.c src/xtensa/sysv.S

TARGET_OBJ = @TARGET_OBJ@
libffi_la_LIBADD = $(TARGET_OBJ)

libffi_convenience_la_SOURCES = $(libffi_la_SOURCES)
EXTRA_libffi_convenience_la_SOURCES = $(EXTRA_libffi_la_SOURCES)
libffi_convenience_la_LIBADD = $(libffi_la_LIBADD)
libffi_convenience_la_DEPENDENCIES = $(libffi_la_DEPENDENCIES)
nodist_libffi_convenience_la_SOURCES = $(nodist_libffi_la_SOURCES)

LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/libtool-ldflags $(LDFLAGS))

AM_CFLAGS =
if FFI_DEBUG
# Build debug. Define FFI_DEBUG on the commandline so that, when building with
# MSVC, it can link against the debug CRT.
AM_CFLAGS += -DFFI_DEBUG
endif

if LIBFFI_BUILD_VERSIONED_SHLIB
if LIBFFI_BUILD_VERSIONED_SHLIB_GNU
libffi_version_script = -Wl,--version-script,libffi.map
libffi_version_dep = libffi.map
endif
if LIBFFI_BUILD_VERSIONED_SHLIB_SUN
libffi_version_script = -Wl,-M,libffi.map-sun
libffi_version_dep = libffi.map-sun
libffi.map-sun : libffi.map $(top_srcdir)/../contrib/make_sunver.pl \
		 $(libffi_la_OBJECTS) $(libffi_la_LIBADD)
	perl $(top_srcdir)/../contrib/make_sunver.pl libffi.map \
	 `echo $(libffi_la_OBJECTS) $(libffi_la_LIBADD) | \
	    sed 's,\([^/        ]*\)\.l\([ao]\),.libs/\1.\2,g'` \
	 > $@ || (rm -f $@ ; exit 1)
endif
else
libffi_version_script =
libffi_version_dep =
endif
libffi_version_info = -version-info `grep -v '^\#' $(srcdir)/libtool-version`

libffi.map: $(top_srcdir)/libffi.map.in
	$(COMPILE) -D$(TARGET) -E -x assembler-with-cpp -o $@ $<

libffi_la_LDFLAGS = -no-undefined $(libffi_version_info) $(libffi_version_script) $(LTLDFLAGS) $(AM_LTLDFLAGS)
libffi_la_DEPENDENCIES = $(libffi_la_LIBADD) $(libffi_version_dep)

AM_CPPFLAGS = -I. -I$(top_srcdir)/include -Iinclude -I$(top_srcdir)/src
AM_CCASFLAGS = $(AM_CPPFLAGS)

dist-hook:
	if [ -d $(top_srcdir)/.git ] ; then (cd $(top_srcdir); git log --no-decorate) ; else echo 'See git log for history.' ; fi > $(distdir)/ChangeLog
