# Makefile for GNU Objective C runtime library.
# Copyright (C) 1993-2021 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 3, 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 COPYING3.  If not see
#<http://www.gnu.org/licenses/>.

#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 := $(shell @get_gcc_base_ver@ $(srcdir)/../gcc/BASE-VER)
host_subdir = @host_subdir@
top_srcdir = @top_srcdir@
multi_basedir = @multi_basedir@
toolexecdir = @toolexecdir@
# Toolexecdir is used only by toolexeclibdir
toolexeclibdir = @toolexeclibdir@

includedirname = @includedirname@
libsuffix = @libsuffix@

lt_host_flags = @lt_host_flags@
extra_ldflags_libobjc = @extra_ldflags_libobjc@

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@
XCFLAGS = @XCFLAGS@
WARN_CFLAGS = -W -Wall -Wwrite-strings -Wstrict-prototypes
ALL_CFLAGS = -I. -I$(srcdir) $(CPPFLAGS) $(DEFS) \
	$(XCFLAGS) $(CFLAGS) $(WARN_CFLAGS) \
	-DIN_GCC -DIN_TARGET_LIBS -fno-strict-aliasing -fexceptions

# 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@ $(LIBTOOLFLAGS)
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

OBJC_GCFLAGS=@OBJC_GCFLAGS@
OBJC_BOEHM_GC=@OBJC_BOEHM_GC@
OBJC_BOEHM_GC_INCLUDES=@OBJC_BOEHM_GC_INCLUDES@
OBJC_BOEHM_GC_LIBS=@OBJC_BOEHM_GC_LIBS@

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

##
## The list of header/source files
##

# User-visible header files, from the objc/ directory
OBJC_H = \
  objc.h \
  objc-exception.h \
  objc-sync.h \
  \
  NXConstStr.h \
  Object.h \
  Protocol.h \
  message.h \
  objc-decls.h \
  runtime.h \
  thr.h

# Objective-C source files to compile
OBJC_SOURCE_FILES = \
   NXConstStr.m \
   Object.m \
   Protocol.m \
   accessors.m \
   linking.m

# C source files to compile
C_SOURCE_FILES = \
   class.c \
   encoding.c \
   error.c \
   gc.c \
   hash.c \
   init.c \
   ivars.c \
   memory.c \
   methods.c \
   nil_method.c \
   objc-foreach.c \
   objc-sync.c \
   objects.c \
   protocols.c \
   sarray.c \
   selector.c \
   sendmsg.c \
   thr.c \
   exception.c

# Object files to link (when the library is linked with no GC (Garbage Collection))
OBJS = \
  $(patsubst %.m,%.lo,$(OBJC_SOURCE_FILES)) \
  $(patsubst %.c,%.lo,$(C_SOURCE_FILES))

# Object files to link (when the library is linked with GC (Garbage Collection))
OBJS_GC = \
  $(patsubst %.m,%_gc.lo,$(OBJC_SOURCE_FILES)) \
  $(patsubst %.c,%_gc.lo,$(C_SOURCE_FILES))


##
## The rules to build
##

# 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)"

# The 'all' rule must be the first one so that it is executed if
# nothing is specified on the command-line.
all: libobjc$(libsuffix).la $(OBJC_BOEHM_GC)
	: $(MAKE) ; exec $(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=all

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

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

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

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

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

# sendmsg has a special rule because it depends on runtime-info.h.
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

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

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

# These files have separate rules because they require special
# compiler flags.

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

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

doc: info dvi pdf html

# No install-html or install-pdf support
.PHONY: install-html install-pdf install-info
install-html:
install-pdf:
install-info:

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

libobjc$(libsuffix).la: $(OBJS)
	$(LIBTOOL_LINK) $(CC) -o $@ $(OBJS) \
		-Wc,-shared-libgcc -rpath $(toolexeclibdir) \
		-version-info $(LIBOBJC_VERSION) $(extra_ldflags_libobjc) \
		$(LTLDFLAGS)

libobjc_gc$(libsuffix).la: $(OBJS_GC)
	$(LIBTOOL_LINK) $(CC) -o $@ $(OBJS_GC) $(OBJC_BOEHM_GC_LIBS) \
		-Wc,-shared-libgcc -rpath $(toolexeclibdir) \
		-version-info $(LIBOBJC_GC_VERSION) $(extra_ldflags_libobjc) \
		$(LTLDFLAGS)

info:
dvi:
pdf:
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

AUTOCONF = autoconf
ACLOCAL = aclocal
ACLOCAL_AMFLAGS = -I ../config -I ..
aclocal_deps = \
	$(srcdir)/../config/multi.m4 \
	$(srcdir)/../config/override.m4 \
	$(srcdir)/../config/proginstall.m4 \
	$(srcdir)/../config/toolexeclibdir.m4 \
	$(srcdir)/../ltoptions.m4 \
	$(srcdir)/../ltsugar.m4 \
	$(srcdir)/../ltversion.m4 \
	$(srcdir)/../lt~obsolete.m4 \
	$(srcdir)/../config/cet.m4 \
	$(srcdir)/acinclude.m4

$(srcdir)/configure: @MAINT@ configure.ac $(srcdir)/aclocal.m4
	rm -f config.cache
	cd $(srcdir) && $(AUTOCONF)

$(srcdir)/aclocal.m4: @MAINT@ $(aclocal_deps)
	cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)

install: install-libs install-headers

install-libs: installdirs
	$(SHELL) $(multi_basedir)/mkinstalldirs $(DESTDIR)$(toolexeclibdir)
	$(LIBTOOL_INSTALL) $(INSTALL) libobjc$(libsuffix).la $(DESTDIR)$(toolexeclibdir);
	if [ "$(OBJC_BOEHM_GC)" ]; then \
	  $(LIBTOOL_INSTALL) $(INSTALL) libobjc_gc$(libsuffix).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) $(multi_basedir)/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$(libsuffix).la libobjc_gc$(libsuffix).la *.lo
	-rm -f runtime-info.h tmp-runtime.s *.o *.lo libobjc* xforward \
		fflags *.aux *.cp *.dvi *.pdf *.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:
