# Makefile for GNU Objective C runtime library.
# Copyright 1993, 1995, 1996, 1997, 1998, 1999, 2001, 2002, 2003, 2004
# Free Software Foundation, Inc.

#This file is part of GCC.

#GCC is free software; you can redistribute it and/or modify
#it under the terms of the GNU General Public License as published by
#the Free Software Foundation; either version 2, or (at your option)
#any later version.

#GCC is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#GNU General Public License for more details.

#You should have received a copy of the GNU General Public License
#along with GCC; see the file COPYING.  If not, write to
#the Free Software Foundation, 59 Temple Place - Suite 330,
#Boston, MA 02111-1307, USA.  */

#This was cribbed from the libchill, libiberty and libstdc++
#Makefile.in files.  Some of this stuff may be unnecessary and
#worthless.

SHELL = @SHELL@
MAKEOVERRIDES=

#### Start of system configuration section. ####

srcdir = @glibcpp_srcdir@
VPATH = @glibcpp_srcdir@
prefix = @prefix@
exec_prefix = @exec_prefix@
target_noncanonical = @target_noncanonical@
gcc_version = @gcc_version@
top_srcdir = @top_srcdir@
toplevel_srcdir = @toplevel_srcdir@
toolexecdir = @toolexecdir@
# Toolexecdir is used only by toolexeclibdir
toolexeclibdir = @toolexeclibdir@

includedirname = @includedirname@
libext = @libext@

top_builddir = .

libdir = $(exec_prefix)/lib
libsubdir = $(libdir)/gcc/$(target_noncanonical)/$(gcc_version)

# Multilib support variables.
MULTISRCTOP =
MULTIBUILDTOP =
MULTIDIRS =
MULTISUBDIR =
MULTIDO = true
MULTICLEAN = true

# Not configured per top-level version, since that doesn't get passed
# down at configure time, but overrridden by the top-level install
# target.
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@

AR = @AR@
AR_FLAGS = rc

RANLIB = @RANLIB@

CC = @CC@
CFLAGS = @CFLAGS@
WARN_CFLAGS = -W -Wall -Wwrite-strings -Wstrict-prototypes
GTHREAD_FLAGS=@GTHREAD_FLAGS@
ALL_CFLAGS = -I. -I$(srcdir) $(CPPFLAGS) $(DEFS) $(CFLAGS) $(WARN_CFLAGS) \
	$(GTHREAD_FLAGS) -DIN_GCC -DIN_TARGET_LIBS -fno-strict-aliasing

# Libtool
# The following strings describe the version of the obj-C library 
# begin compiled and compatibility issues.
# Please refer to Libtool documentation about how to manage these 
# numbers.
LIBOBJC_VERSION = @VERSION@
LIBOBJC_GC_VERSION = @VERSION@
LIBTOOL = @LIBTOOL@
LIBTOOL_COMPILE = $(LIBTOOL) --mode=compile
LIBTOOL_LINK    = $(LIBTOOL) --mode=link 
LIBTOOL_INSTALL = $(LIBTOOL) --mode=install
LIBTOOL_CLEAN   = $(LIBTOOL) --mode=clean
#LIBTOOL_UNINSTALL = $(LIBTOOL) --mode=uninstall

INCLUDES = -I$(srcdir)/objc  -I$(srcdir)/$(MULTISRCTOP)../gcc \
  -I$(srcdir)/$(MULTISRCTOP)../gcc/config -I$(MULTIBUILDTOP)../../gcc \
  -I$(srcdir)/$(MULTISRCTOP)../include

OBJC_GCFLAGS=-DOBJC_WITH_GC=1
OBJC_THREAD_FILE=thr-objc
OBJC_BOEHM_GC=@OBJC_BOEHM_GC@

.SUFFIXES:
.SUFFIXES: .c .m .lo

.c.lo:
	$(LIBTOOL_COMPILE) $(CC) -c $(ALL_CFLAGS) $(INCLUDES) $<

.m.lo:
	$(LIBTOOL_COMPILE) $(CC) -c $(ALL_CFLAGS) $(INCLUDES) $<

# Flags to pass to a recursive make.
FLAGS_TO_PASS = \
	"AR=$(AR)" \
	"AR_FLAGS=$(AR_FLAGS)" \
	"CC=$(CC)" \
	"CFLAGS=$(CFLAGS)" \
	"DESTDIR=$(DESTDIR)" \
	"LIBCFLAGS=$(LIBCFLAGS)" \
	"EXTRA_OFILES=$(EXTRA_OFILES)" \
	"HDEFINES=$(HDEFINES)" \
	"INSTALL=$(INSTALL)" \
	"INSTALL_DATA=$(INSTALL_DATA)" \
	"INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \
	"LDFLAGS=$(LDFLAGS)" \
	"LIBTOOL=$(LIBTOOL)" \
	"LOADLIBES=$(LOADLIBES)" \
	"PICFLAG=$(PICFLAG)" \
	"RANLIB=$(RANLIB)" \
	"SHELL=$(SHELL)" \
	"prefix=$(prefix)" \
	"exec_prefix=$(exec_prefix)" \
	"libdir=$(libdir)" \
	"libsubdir=$(libsubdir)" \
	"tooldir=$(tooldir)"

all: libobjc$(libext).la $(OBJC_BOEHM_GC)
	: $(MAKE) ; exec $(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=all

# User-visible header files.

OBJC_H = hash.h objc-list.h sarray.h objc.h objc-api.h \
	 NXConstStr.h Object.h Protocol.h encoding.h typedstream.h \
	 thr.h objc-decls.h

# Modules that comprise the runtime library.

OBJS =    archive.lo class.lo encoding.lo gc.lo hash.lo init.lo linking.lo \
	  misc.lo nil_method.lo NXConstStr.lo Object.lo objects.lo \
	  Protocol.lo sarray.lo selector.lo sendmsg.lo thr.lo \
	  $(OBJC_THREAD_FILE).lo exception.lo hash_compat.lo

OBJS_GC = archive_gc.lo class_gc.lo encoding_gc.lo gc_gc.lo hash_gc.lo \
	  init_gc.lo linking_gc.lo misc_gc.lo nil_method_gc.lo \
	  NXConstStr_gc.lo Object_gc.lo objects_gc.lo Protocol_gc.lo \
	  sarray_gc.lo selector_gc.lo sendmsg_gc.lo thr_gc.lo \
	  $(OBJC_THREAD_FILE)_gc.lo exception_gc.lo hash_compat_gc.lo

runtime-info.h: 
	echo "" > tmp-runtime.m
	echo "/* This file is automatically generated */" > $@
	$(CC) $(MULTIFLAGS) -print-objc-runtime-info -S tmp-runtime.m >> $@
	rm -f tmp-runtime.m tmp-runtime.s

archive_gc.lo: archive.c
	$(LIBTOOL_COMPILE) $(CC) -c  -o $@ $(ALL_CFLAGS) $(OBJC_GCFLAGS) \
		$(INCLUDES) $<

class_gc.lo: class.c
	$(LIBTOOL_COMPILE) $(CC) -c -o $@ $(ALL_CFLAGS) $(OBJC_GCFLAGS) \
		$(INCLUDES) $<

encoding_gc.lo: encoding.c
	$(LIBTOOL_COMPILE) $(CC) -c -o $@ $(ALL_CFLAGS) $(OBJC_GCFLAGS) \
		$(INCLUDES) $<

gc.lo: gc.c
	$(LIBTOOL_COMPILE) $(CC) -c -o $@ $(ALL_CFLAGS) $(INCLUDES) $<

gc_gc.lo: gc.c
	$(LIBTOOL_COMPILE) $(CC) -c -o $@ $(ALL_CFLAGS) $(OBJC_GCFLAGS) \
		$(INCLUDES) $<

hash_gc.lo: hash.c
	$(LIBTOOL_COMPILE) $(CC) -c -o $@ $(ALL_CFLAGS) $(OBJC_GCFLAGS) \
		$(INCLUDES) $<

hash_compat_gc.lo: hash_compat.c
	$(LIBTOOL_COMPILE) $(CC) -c -o $@ $(ALL_CFLAGS) $(OBJC_GCFLAGS) \
		$(INCLUDES) $<

init_gc.lo: init.c
	$(LIBTOOL_COMPILE) $(CC) -c -o $@ $(ALL_CFLAGS) $(OBJC_GCFLAGS) \
		$(INCLUDES) $<

linking.lo: linking.m
	$(LIBTOOL_COMPILE) $(CC) -fgnu-runtime -c -o $@ $(ALL_CFLAGS) \
		$(INCLUDES) $<

linking_gc.lo: linking.m
	$(LIBTOOL_COMPILE) $(CC) -fgnu-runtime -c -o $@ $(ALL_CFLAGS) \
		$(OBJC_GCFLAGS) $(INCLUDES) $<

misc_gc.lo: misc.c
	$(LIBTOOL_COMPILE) $(CC) -c $(ALL_CFLAGS) -o $@ $(OBJC_GCFLAGS) \
		$(INCLUDES) $<

nil_method_gc.lo: nil_method.c
	$(LIBTOOL_COMPILE) $(CC) -c $(ALL_CFLAGS) -o $@ $(OBJC_GCFLAGS) \
		$(INCLUDES) $<

NXConstStr.lo: NXConstStr.m
	$(LIBTOOL_COMPILE) $(CC) -fgnu-runtime -c -o $@ $(ALL_CFLAGS) \
		$(INCLUDES) $<

NXConstStr_gc.lo: NXConstStr.m
	$(LIBTOOL_COMPILE) $(CC) -fgnu-runtime -c -o $@ $(ALL_CFLAGS) \
		$(OBJC_GCFLAGS) $(INCLUDES) $<

Object.lo: Object.m
	$(LIBTOOL_COMPILE) $(CC) -fgnu-runtime -c -o $@ $(ALL_CFLAGS) \
		$(INCLUDES) $<

Object_gc.lo: Object.m
	$(LIBTOOL_COMPILE) $(CC) -fgnu-runtime -c -o $@ $(ALL_CFLAGS) \
		$(OBJC_GCFLAGS) $(INCLUDES) $<

objects_gc.lo: objects.c
	$(LIBTOOL_COMPILE) $(CC) -c $(ALL_CFLAGS) -o $@ $(OBJC_GCFLAGS) \
		$(INCLUDES) $<

Protocol.lo: Protocol.m
	$(LIBTOOL_COMPILE) $(CC) -fgnu-runtime -c -o $@ $(ALL_CFLAGS) \
		$(INCLUDES) $<

Protocol_gc.lo: Protocol.m
	$(LIBTOOL_COMPILE) $(CC) -fgnu-runtime -c -o $@ $(ALL_CFLAGS) \
		$(OBJC_GCFLAGS) $(INCLUDES) $<

sarray_gc.lo: sarray.c
	$(LIBTOOL_COMPILE) $(CC) -c -o $@ $(ALL_CFLAGS) $(OBJC_GCFLAGS) \
		$(INCLUDES) $<

selector_gc.lo: selector.c
	$(LIBTOOL_COMPILE) $(CC) -c -o $@ $(ALL_CFLAGS) $(OBJC_GCFLAGS) \
		$(INCLUDES) $<

sendmsg.lo: sendmsg.c runtime-info.h
	$(LIBTOOL_COMPILE) $(CC) -c -o $@ $(ALL_CFLAGS) $(INCLUDES) $<

sendmsg_gc.lo: sendmsg.c runtime-info.h
	$(LIBTOOL_COMPILE) $(CC) -c -o $@ $(ALL_CFLAGS) $(OBJC_GCFLAGS) \
		$(INCLUDES) $<

thr_gc.lo: thr.c
	$(LIBTOOL_COMPILE) $(CC) -c -o $@ $(ALL_CFLAGS) $(OBJC_GCFLAGS) \
		$(INCLUDES) $<

$(OBJC_THREAD_FILE)_gc.lo: $(OBJC_THREAD_FILE).c
	$(LIBTOOL_COMPILE) $(CC) -c -o $@ $(ALL_CFLAGS) $(OBJC_GCFLAGS) \
		$(INCLUDES) $<

exception.lo: exception.c
	$(LIBTOOL_COMPILE) $(CC) -c -o $@ $(ALL_CFLAGS) \
		-fexceptions $(INCLUDES) $<

exception_gc.lo: exception.c
	$(LIBTOOL_COMPILE) $(CC) -c -o $@ $(ALL_CFLAGS) $(OBJC_GCFLAGS) \
		-fexceptions $(INCLUDES) $<

doc: info dvi html

libobjc$(libext).la: $(OBJS)
	$(LIBTOOL_LINK) $(CC) -o $@ $(OBJS) \
		-rpath $(toolexeclibdir) \
		-version-info $(LIBOBJC_VERSION)

libobjc_gc$(libext).la: $(OBJS_GC)
	$(LIBTOOL_LINK) $(CC) -o $@ $(OBJS_GC) \
		-rpath $(toolexeclibdir) \
		-version-info $(LIBOBJC_GC_VERSION)

#
# FIXME -- The following part does not fit in the libtool context. 
# Libtool is supposed to [going to] be able to create a win 32 DLL 
# without extra code but since I don't have a win machine to test 
# if it already works, I leave the old code here.
#
libobjc_s.a: libobjc.la
	mv libobjc.a libobjc_s.a

# Create a relocatable DLL
libobjc.dll: libobjc_s.a libobjc_entry.o
	$(CC) -mdll -Wl,--base-file -Wl,libobjc.base \
		-o libobjc.dll libobjc_s.a libobjc_entry.o -lkernel32
	$(DLLTOOL) --dllname libobjc.dll --def $(srcdir)/libobjc.def \
		--base-file libobjc.base --output-exp libobjc.exp
	$(GCC_FOR_TARGET) -mdll -Wl,--base-file libobjc.base libobjc.exp \
		-o libobjc.dll libobjc_s.a libobjc_entry.o -lkernel32
	$(DLLTOOL) --dllname libobjc.dll --def $(srcdir)/libobjc.def \
		--base-file libobjc.base --output-exp libobjc.exp
	$(GCC_FOR_TARGET) libobjc.exp -mdll \
		-o libobjc.dll libobjc_s.a libobjc_entry.o -lkernel32
	$(DLLTOOL) --dllname libobjc.dll --def $(srcdir)/libobjc.def \
		--output-lib libobjc.a
#
#
#
#
#

info:
dvi:
html:

Makefile: Makefile.in config.status
	$(SHELL) config.status

config.status: configure
	rm -f config.cache
	CONFIG_SITE=no-such-file CC='$(CC)' AR='$(AR)' CFLAGS='$(CFLAGS)' \
	CPPFLAGS='$(CPPFLAGS)' $(SHELL) config.status --recheck

${srcdir}/configure: @MAINT@ configure.ac
	rm -f config.cache
	cd ${srcdir} && autoconf

install: install-libs install-headers

install-libs: installdirs
	$(SHELL) $(toplevel_srcdir)/mkinstalldirs $(DESTDIR)$(toolexeclibdir)
	$(LIBTOOL_INSTALL) $(INSTALL) libobjc$(libext).la $(DESTDIR)$(toolexeclibdir);
	if [ "$(OBJC_BOEHM_GC)" ]; then \
	  $(LIBTOOL_INSTALL) $(INSTALL) libobjc_gc$(libext).la \
				$(DESTDIR)$(toolexeclibdir);\
	fi
	$(MULTIDO) $(FLAGS_TO_PASS) multi-do DO="$@"
	@-$(LIBTOOL) --mode=finish $(DESTDIR)$(toolexeclibdir)

# Copy Objective C headers to installation include directory.
install-headers:
	$(SHELL) $(toplevel_srcdir)/mkinstalldirs $(DESTDIR)$(libsubdir)/$(includedirname)/objc
	for file in $(OBJC_H); do \
	  realfile=$(srcdir)/objc/$${file}; \
	  $(INSTALL_DATA) $${realfile} $(DESTDIR)$(libsubdir)/$(includedirname)/objc; \
	done

check uninstall install-strip dist installcheck installdirs:

mostlyclean:
	-$(LIBTOOL_CLEAN) rm -f libobjc$(libext).la libobjc_gc$(libext).la *.lo
	-rm -f runtime-info.h tmp-runtime.s *.o *.lo libobjc* xforward \
		fflags *.aux *.cp *.dvi *.fn *.info *.ky *.log *.pg \
		*.toc *.tp *.vr *.html libobj.exp
	@$(MULTICLEAN) multi-clean DO=mostlyclean

clean: mostlyclean
	rm -f config.log
	@$(MULTICLEAN) multi-clean DO=clean

distclean: clean
	@$(MULTICLEAN) multi-clean DO=distclean
	rm -f config.cache config.status Makefile configure

maintainer-clean realclean: distclean

.PHONY: mostlyclean clean distclean maintainer-clean all check uninstall \
	install-strip dist installcheck installdirs 

# Don't export variables to the environment, in order to not confuse
# configure.
.NOEXPORT:
