# Copyright (c) 1999-2001 by Red Hat, Inc. All rights reserved.
# 
# THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
# OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
# 
# Permission is hereby granted to use or copy this program
# for any purpose,  provided the above notices are retained on all copies.
# Permission to modify the code and to distribute modified code is granted,
# provided the above notices are retained, and a notice that the code was
# modified is included with the above copyright notice.
#
# Original author: Tom Tromey
# Severely truncated by Hans-J. Boehm
# Modified by: Grzegorz Jakacki <jakacki at acm dot org>
# Modified by: Petter Urkedal <petter.urkedal@nordita.dk> (2005-04)

## Process this file with automake to produce Makefile.in.

## FIXME: `make distcheck' in this directory will not currently work.
##     This is most likely to the explicit flags passed to submakes.

# We currently use the source files directly from libatomic_ops, if we
# use the internal version.  This is done since libatomic_ops doesn't
# use libtool, since it has no real use for it.  But that seems to make
# it hard to use either the resulting object files or libraries.
# Thus there seems too be no real reason to recusively build in the
# libatomic_ops directory.
# if USE_INTERNAL_LIBATOMICS_OPS
# SUBDIRS = @maybe_libatomic_ops@
# else
# SUBDIRS =
# endif
SUBDIRS =

# Initialize variables so that we can declare files locally.
EXTRA_DIST = 
lib_LTLIBRARIES =
include_HEADERS =
pkginclude_HEADERS =
dist_noinst_HEADERS =
check_PROGRAMS =
TESTS =

pkgconfigdir = $(libdir)/pkgconfig
dist_pkgconfig_DATA = bdw-gc.pc

# C Library
# ---------

lib_LTLIBRARIES += libgc.la
libgc_la_SOURCES = \
	allchblk.c alloc.c blacklst.c checksums.c dbg_mlc.c \
	dyn_load.c finalize.c gc_dlopen.c gcj_mlc.c headers.c \
	malloc.c mallocx.c mark.c mark_rts.c misc.c new_hblk.c \
	obj_map.c os_dep.c pcr_interface.c ptr_chck.c real_malloc.c reclaim.c \
	specific.c stubborn.c typd_mlc.c \
	backgraph.c thread_local_alloc.c

# C Library: Architecture Dependent
# ---------------------------------

if PTHREADS
libgc_la_SOURCES += pthread_support.c pthread_stop_world.c
endif

if DARWIN_THREADS
libgc_la_SOURCES += darwin_stop_world.c
endif

if WIN32_THREADS
libgc_la_SOURCES += win32_threads.c
endif

if USE_INTERNAL_LIBATOMIC_OPS
nodist_libgc_la_SOURCES = atomic_ops.c
endif

if NEED_ATOMIC_OPS_ASM
nodist_libgc_la_SOURCES = atomic_ops_sysdeps.S
endif

# Include THREADDLLIBS here to ensure that the correct versions of
# linuxthread semaphore functions get linked:
libgc_la_LIBADD = @addobjs@ $(THREADDLLIBS) $(UNWINDLIBS)
libgc_la_DEPENDENCIES = @addobjs@
libgc_la_LDFLAGS = $(extra_ldflags_libgc) -version-info 1:3:0 -no-undefined

EXTRA_libgc_la_SOURCES = alpha_mach_dep.S \
    mips_sgi_mach_dep.s mips_ultrix_mach_dep.s \
    rs6000_mach_dep.s sparc_mach_dep.S sparc_netbsd_mach_dep.s \
    sparc_sunos4_mach_dep.s ia64_save_regs_in_stack.s


# C++ Interface
# -------------

if CPLUSPLUS
lib_LTLIBRARIES += libgccpp.la
pkginclude_HEADERS += include/gc_cpp.h include/gc_allocator.h
libgccpp_la_SOURCES = gc_cpp.cc
libgccpp_la_LIBADD = $(top_builddir)/libgc.la
libgccpp_la_LDFLAGS = -version-info 1:3:0 -no-undefined
endif

# FIXME: If Visual C++ users use Makefile.am, this should go into
# pkginclude_HEADERS with proper AM_CONDITIONALization.  Otherwise
# delete this comment.
EXTRA_DIST += gc_cpp.cpp


# Misc
# ----

AM_CXXFLAGS = @GC_CFLAGS@
AM_CFLAGS = @GC_CFLAGS@

## FIXME: relies on internal code generated by automake.
## FIXME: ./configure --enable-dependency-tracking should be used 
#all_objs = @addobjs@ $(libgc_la_OBJECTS)
#$(all_objs) : include/private/gcconfig.h include/private/gc_priv.h \
#include/private/gc_hdrs.h include/gc.h include/gc_gcj.h \
#include/gc_pthread_redirects.h include/gc_config_macros.h \
#include/private/thread_local_alloc.h include/private_support.h \
#include/private/pthread_stop_world.h \
#include/gc_mark.h @addincludes@

## FIXME: we shouldn't have to do this, but automake forces us to.
## We use -Wp,-P to strip #line directives.  Irix `as' chokes on
## these.
if COMPILER_XLC
  ## XLC neither requires nor tolerates the unnecessary assembler goop
  ASM_CPP_OPTIONS =
else
  ## We use -Wp,-P to strip #line directives.  Irix `as' chokes on
  ## these.
  ASM_CPP_OPTIONS = -Wp,-P -x assembler-with-cpp
endif
.s.lo:
	$(LTCOMPILE) $(ASM_CPP_OPTIONS) -c $<

.S.lo:
	$(LTCOMPILE) $(ASM_CPP_OPTIONS) -c $<

## We need to add DEFS to assembler flags
## :FIXME: what if assembler does not accept -D... ?
##     (use Autoconf to prepare ASDEFS ???)

CCASFLAGS += $(DEFS)

dist_noinst_SCRIPTS = callprocs configure.host
    ## callprocs --- used by Makefile.{dj,direct}
    ## configure.host --- used by Makefile.{am,dj,direct}

# headers which are not installed
# (see include/include.am for more)
#
dist_noinst_HEADERS += version.h

# documentation which is not installed
#
EXTRA_DIST += README.QUICK

# other makefiles
# :GOTCHA: deliberately we do not include 'Makefile'
EXTRA_DIST += BCC_MAKEFILE NT_MAKEFILE NT_THREADS_MAKEFILE \
    OS2_MAKEFILE PCR-Makefile digimars.mak EMX_MAKEFILE	\
    Makefile.direct Makefile.dj	Makefile.DLLs SMakefile.amiga \
    WCC_MAKEFILE configure_atomic_ops.sh \
    NT_STATIC_THREADS_MAKEFILE NT_X64_STATIC_THREADS_MAKEFILE

# files used by makefiles other than Makefile.am
#
EXTRA_DIST += add_gc_prefix.c gcname.c if_mach.c if_not_there.c \
    hpux_test_and_clear.s gc.mak MacOS.c \
    MacProjects.sit.hqx mach_dep.c setjmp_t.c \
    threadlibs.c AmigaOS.c \
    Mac_files/datastart.c Mac_files/dataend.c \
    Mac_files/MacOS_config.h Mac_files/MacOS_Test_config.h \
    include/private/msvc_dbg.h msvc_dbg.c

# The libatomic_ops library.  This is not ideal, since we pick up junk from
# there.  The hard-coded version number should also go.
EXTRA_DIST += libatomic_ops-1.2

# this is an auxiliary shell file used by Makefile and Makefile.direct
#
CONFIG_STATUS_DEPENDENCIES = $(srcdir)/configure.host

# :FIXME: why do we distribute this one???
#
EXTRA_DIST += libtool.m4

#
# :GOTCHA: GNU make rule for making .s out of .S is flawed, 
# it will not remove dest if building fails
.S.s:
	if $(CPP) $< >$@ ; then :; else rm -f $@; fi

include include/include.am
include cord/cord.am
include tests/tests.am
include doc/doc.am
# Putting these at the top causes cord to be built first, and not find libgc.a
# on HP/UX.  There may be a better fix.


