#
# Makefile
#   Copyright (C) 1990, 91, 92, 93, 94, 95, 96, 1997 Free Software Foundation
#
# This file is part of the libiberty library.
# Libiberty is free software; you can redistribute it and/or
# modify it under the terms of the GNU Library General Public
# License as published by the Free Software Foundation; either
# version 2 of the License, or (at your option) any later version.
#
# Libiberty 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
# Library General Public License for more details.
#
# You should have received a copy of the GNU Library General Public
# License along with libiberty; see the file COPYING.LIB.  If not,
# write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA.
#

# This file was written, and is maintained by K. Richard Pixley
# <rich@cygnus.com>.

#
# Makefile for libiberty directory
#

srcdir = .

prefix = /usr/local

exec_prefix = $(prefix)
bindir = $(exec_prefix)/bin
libdir = $(exec_prefix)/lib

datadir = $(prefix)/share

mandir = $(prefix)/man
man1dir = $(mandir)/man1
man2dir = $(mandir)/man2
man3dir = $(mandir)/man3
man4dir = $(mandir)/man4
man5dir = $(mandir)/man5
man6dir = $(mandir)/man6
man7dir = $(mandir)/man7
man8dir = $(mandir)/man8
man9dir = $(mandir)/man9
infodir = $(prefix)/info
includedir = $(prefix)/include

SHELL = /bin/sh

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

INSTALL = install -c
INSTALL_PROGRAM = $(INSTALL)
INSTALL_DATA = $(INSTALL)

AR = ar
AR_FLAGS = rc

ERRORS_CC = $(CC)
CC = cc
CFLAGS = -g
LIBCFLAGS = $(CFLAGS)
MAKEINFO = makeinfo
RANLIB = ranlib

PICFLAG =

MAKEOVERRIDES =

TARGETLIB = libiberty.a

CONFIG_H = lconfig.h
NEEDED_LIST = lneeded-list

# HOST_OFILES contains the list of objects that should be in the
# library (in addition to the REQUIRED_OFILES and EXTRA_OFILES).
# A configuration may override this with a fixed list a object files
# names (hard to maintain), or some other way to generate a list.
HOST_OFILES=`cat needed-list`

# Extra targets that the top-level target depends on.
# Specifically, what needs to be made before HOST_OFILES can be used.
# Can be empty if HOST_OFILES is just a list of file names.
DO_ALSO = needed-list

# A configuration can specify extra .o files that should be included,
# even if they are in libc. (Perhaps the libc version is buggy.)
EXTRA_OFILES = 

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

all: stamp-picdir $(TARGETLIB) required-list
	@if [ "$(RULE1)" != "not-used" ]; then \
	  $(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=all; \
	else true; \
	fi

.PHONY: check installcheck
check installcheck:


#### Host, target, and site specific Makefile fragments come in here.
###

INCDIR=$(srcdir)/$(MULTISRCTOP)../include

COMPILE.c = $(CC) -c $(LIBCFLAGS) -I. -I$(INCDIR) $(HDEFINES)
.c.o:
	test -z "$(PICFLAG)" || \
	  $(COMPILE.c) $(PICFLAG) $< -o pic/$@
	$(COMPILE.c) $<

# The default target just invokes make recursively.
# However, the automatic configuration (in config/mh_default).
# first causes it to figure out the objects missing in libc.
info install-info clean-info dvi:

# Include files that are in this directory.
HFILES =

# NOTE: If you add new files to the library, add them to this list
# (alphabetical), and add them to REQUIRED_OFILES or 'functions.def'.
CFILES = asprintf.c alloca.c argv.c atexit.c basename.c bcmp.c bcopy.c bzero.c \
	 choose-temp.c clock.c concat.c cplus-dem.c fdmatch.c fnmatch.c \
	 getcwd.c getopt.c getopt1.c getpagesize.c getruntime.c \
         floatformat.c hex.c index.c insque.c \
	 memchr.c memcmp.c memcpy.c memmove.c memset.c objalloc.c \
         obstack.c pexecute.c random.c rename.c rindex.c sigsetmask.c spaces.c \
	 strcasecmp.c strncasecmp.c \
         strchr.c strdup.c strerror.c strrchr.c strsignal.c \
         strstr.c strtod.c strtol.c strtoul.c tmpnam.c \
	 vasprintf.c vfork.c vfprintf.c vprintf.c vsprintf.c waitpid.c \
	 xatexit.c xexit.c xmalloc.c xstrdup.c xstrerror.c
# These are always included in the library.
REQUIRED_OFILES = argv.o basename.o choose-temp.o concat.o cplus-dem.o \
  fdmatch.o fnmatch.o getopt.o getopt1.o getruntime.o hex.o \
  floatformat.o objalloc.o obstack.o pexecute.o spaces.o strerror.o \
  strsignal.o xatexit.o xexit.o xmalloc.o xstrdup.o xstrerror.o

# Do we want/need any config overrides?
#	 

STAGESTUFF = $(TARGETLIB) *.o

INSTALL_DEST = libdir
install: install_to_$(INSTALL_DEST)

install_to_libdir: all
	$(INSTALL_DATA) $(TARGETLIB) $(libdir)$(MULTISUBDIR)/$(TARGETLIB).n
	( cd $(libdir)$(MULTISUBDIR) ; $(RANLIB) $(TARGETLIB).n )
	mv -f $(libdir)$(MULTISUBDIR)/$(TARGETLIB).n $(libdir)$(MULTISUBDIR)/$(TARGETLIB)
	@$(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=install

install_to_tooldir: all
	$(INSTALL_DATA) $(TARGETLIB) $(tooldir)/lib$(MULTISUBDIR)/$(TARGETLIB).n
	( cd $(tooldir)/lib$(MULTISUBDIR) ; $(RANLIB) $(TARGETLIB).n )
	mv -f $(tooldir)/lib$(MULTISUBDIR)/$(TARGETLIB).n $(tooldir)/lib$(MULTISUBDIR)/$(TARGETLIB)
	@$(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=install

# The default configuration adds to libiberty all those functions that are
# missing in libc.  More precisely, it includes whatever $(CC) fails to find.
# Then a sed+awk combination translates the ld error messages into
# a list of .o files.

stamp-needed: stamp-picdir $(NEEDED_LIST)
	cp $(NEEDED_LIST) needed-tmp
	$(SHELL) $(srcdir)/$(MULTISRCTOP)../move-if-change needed-tmp needed-list
	touch stamp-needed

needed-list: stamp-needed ; @true

lneeded-list: $(EXTRA_OFILES) needed.awk errors
	rm -f lneeded-list
	f=""; \
	for i in `awk -f needed.awk <errors` $(EXTRA_OFILES) ; do \
	  case " $$f " in \
	    *" $$i "*) ;; \
	    *) f="$$f $$i" ;; \
	  esac ; \
	done ; \
	case $$f in \
	    *alloca.o*) f="$$f xmalloc.o xexit.o" ;; \
	esac ; \
	echo $$f >>lneeded-list

# Generate an awk script that looks for functions in functions.def

needed.awk: $(srcdir)/functions.def Makefile
	echo "# !Automatically generated from $(srcdir)/functions.def"\
	  "- DO NOT EDIT!" >needed.awk
	grep '^DEF(' < $(srcdir)/functions.def \
	    | sed -e '/DEF/s|DEF.\([^,]*\).*|/\1/ { printf "\1.o " }|' \
	    >>needed.awk

stamp-config: $(CONFIG_H)
	cp $(CONFIG_H) config.tmp
	$(SHELL) $(srcdir)/$(MULTISRCTOP)../move-if-change config.tmp config.h
	touch stamp-config

config.h: stamp-config ; @true

lconfig.h: needed2.awk errors
	echo "/* !Automatically generated from $(srcdir)/functions.def"\
	  "- DO NOT EDIT! */" >lconfig.h
	awk -f needed2.awk <errors >>lconfig.h

# Generate an awk script that looks for variables in functions.def

needed2.awk: $(srcdir)/functions.def Makefile
	echo "# !Automatically generated from $(srcdir)/functions.def"\
	  "- DO NOT EDIT!" >needed2.awk
	grep '^DEFVAR(' < $(srcdir)/functions.def \
	 | sed -e '/DEFVAR/s|DEFVAR.\([^,]*\).*|/\1/ { printf "#ifndef NEED_\1\\n#define NEED_\1\\n#endif\\n" }|' \
	 >>needed2.awk
	grep '^DEFFUNC(' < $(srcdir)/functions.def \
	 | sed -e '/DEFFUNC/s|DEFFUNC.\([^,]*\).*|/\1/ { printf "#ifndef NEED_\1\\n#define NEED_\1\\n#endif\\n" }|' \
	 >>needed2.awk

dummy.o: $(srcdir)/dummy.c $(srcdir)/functions.def
	$(CC) -c $(CFLAGS) -I. -I$(INCDIR) $(HDEFINES) $(srcdir)/dummy.c 2>/dev/null

errors: dummy.o $(EXTRA_OFILES)
	-($(ERRORS_CC) -o dummy $(CFLAGS) $(LDFLAGS) $(ERRORS_LDFLAGS) dummy.o $(EXTRA_OFILES) $(LOADLIBES)) >errors 2>&1 || true

# required-list is used when building a shared bfd/opcodes/libiberty library.
required-list: Makefile
	echo $(REQUIRED_OFILES) > required-list

$(HOST_OFILES) $(REQUIRED_OFILES) : config.h

RULE1 = $(TARGETLIB)
$(RULE1): $(REQUIRED_OFILES) $(DO_ALSO) .always.
	@$(MAKE) RULE1=not-used RULE2=$(TARGETLIB) $(FLAGS_TO_PASS) \
		"HOST_OFILES=$(HOST_OFILES)"

# Rule invoked by recursive make in $(RULE1).
RULE2 = not-used
$(RULE2): $(REQUIRED_OFILES) $(HOST_OFILES)
	rm -rf $(TARGETLIB)
	$(AR) $(AR_FLAGS) $(TARGETLIB) \
	  $(REQUIRED_OFILES) $(HOST_OFILES)
	$(RANLIB) $(TARGETLIB)

stamp-picdir:
	if [ -n "$(PICFLAG)" ] && [ ! -d pic ]; then \
	  mkdir pic; \
	else true; fi
	touch stamp-picdir

.always.:
# Do nothing.

.PHONY: all etags tags ls clean stage1 stage2 .always.

etags tags: TAGS

TAGS: $(CFILES) $(HFILES)
	etags `for i in $(HFILES) $(CFILES); do echo $(srcdir)/$$i ; done`

# The standalone demangler (c++filt) has been moved to binutils.
demangle:
	@echo "The standalone demangler, now named c++filt, is now"
	@echo "a part of binutils."
	@false

ls:
	@echo Makefile $(HFILES) $(CFILES)

# Need to deal with profiled libraries, too.

mostlyclean:
	rm -rf *.o pic core errs \#* *.E a.out
	rm -f needed.awk needed2.awk errors dummy needed-list config.h stamp-*
	rm -f $(CONFIG_H) $(NEEDED_LIST) stamp-picdir
	@$(MULTICLEAN) multi-clean DO=mostlyclean
clean: mostlyclean
	rm -f *.a required-list tmpmulti.out
	@$(MULTICLEAN) multi-clean DO=clean
distclean: clean
	@$(MULTICLEAN) multi-clean DO=distclean
	rm -f *~ Makefile config.status alloca-conf.h xhost-mkfrag TAGS multilib.out
maintainer-clean realclean: distclean

force:

Makefile: $(srcdir)/Makefile.in $(host_makefile_frag) $(target_makefile_frag)
	$(SHELL) ./config.status

argv.o: $(INCDIR)/libiberty.h
basename.o: $(INCDIR)/libiberty.h
concat.o: $(INCDIR)/libiberty.h
cplus-dem.o: $(INCDIR)/demangle.h
fdmatch.o: $(INCDIR)/libiberty.h
fnmatch.o: $(INCDIR)/fnmatch.h
getopt.o: $(INCDIR)/getopt.h
getopt1.o: $(INCDIR)/getopt.h
getruntime.o: $(INCDIR)/libiberty.h
hex.o: $(INCDIR)/libiberty.h
floatformat.o: $(INCDIR)/floatformat.h
objalloc.o: $(INCDIR)/objalloc.h
obstack.o: $(INCDIR)/obstack.h
pexecute.o: $(INCDIR)/libiberty.h
spaces.o: $(INCDIR)/libiberty.h
strerror.o: $(INCDIR)/libiberty.h
strsignal.o: $(INCDIR)/libiberty.h
xatexit.o: $(INCDIR)/libiberty.h
xexit.o: $(INCDIR)/libiberty.h
xmalloc.o: $(INCDIR)/libiberty.h
xstrdup.o: $(INCDIR)/libiberty.h
xstrerror.o: $(INCDIR)/libiberty.h
