# Makefile for standalone distribution of libglob.a (fnmatch, glob).

# Copyright (C) 1991, 92, 93, 94, 95 Free Software Foundation, Inc.
# This file is part of the GNU C Library.

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

# This library 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
# Lesser General Public License for more details.

# You should have received a copy of the GNU Lesser General Public
# License along with this library; see the file COPYING.LIB.  If
# not, write to the Free Software Foundation, Inc., 59 Temple Place, 
# Suite 330, Boston, MA 02111 USA.

# Ultrix 2.2 make doesn't expand the value of VPATH.
VPATH = @srcdir@
# This must repeat the value, because configure will remove `VPATH = .'.
srcdir = @srcdir@

CC = @CC@
CPPFLAGS = @CPPFLAGS@
CFLAGS = @CFLAGS@

# Information determined by configure.
DEFS = @DEFS@

# How to invoke ar.
AR = @AR@
ARFLAGS = rv

# How to invoke ranlib.
RANLIB = @RANLIB@

.PHONY: all
all: libglob.a

libglob.a: glob.o fnmatch.o
	$(AR) $(ARFLAGS) $@ glob.o fnmatch.o
	$(RANLIB) $@

# For some reason, Unix make wants the dependencies on the source files.
# Otherwise it refuses to use an implicit rule!
# And, get this: it doesn't work to use $(srcdir)/foo.c!!
glob.o: $(srcdir)/glob.h $(srcdir)/fnmatch.h glob.c
fnmatch.o: $(srcdir)/fnmatch.h fnmatch.c

.c.o:
	$(CC) -I. -I$(srcdir) -c \
	      $(DEFS) $(CPPFLAGS) $(CFLAGS) $< $(OUTPUT_OPTION)

.PHONY: clean realclean glob-clean glob-realclean distclean
clean glob-clean:
	-rm -f libglob.a *.o core
distclean glob-realclean: clean
	-rm -f TAGS tags Makefile config.status config.h config.log
realcean: distclean

# For inside the C library.
glob.tar glob.tar.Z:
	$(MAKE) -C .. $@
