## Top-level Makefile.in for ICU
## Stephen F. Booth

## Shell to use
SHELL = @SHELL@

## Install directory information
srcdir = @srcdir@
top_srcdir = @top_srcdir@
prefix = @prefix@
exec_prefix = @exec_prefix@

bindir = @bindir@
sbindir = @sbindir@
datadir = @datadir@
libdir = @libdir@
includedir = @includedir@

pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@

## Build directory information
top_builddir = .

## Install program information
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs

INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_SCRIPT = @INSTALL_SCRIPT@

AUTOCONF = @AUTOCONF@

## Pacakge information
PACKAGE = @PACKAGE@
VERSION = @VERSION@

## Optional directory setup
@EXTRAS_TRUE@EXTRA = extra
@EXTRAS_FALSE@EXTRA = 
@TESTS_TRUE@TEST = test
@TESTS_FALSE@TEST = 
@SAMPLES_TRUE@SAMPLE = samples
@SAMPLES_FALSE@SAMPLE = 

## Files to remove for 'make clean'
CLEANFILES = *~

DOCDIRS = common i18n
SUBDIRS = common i18n $(EXTRA) tools $(TEST) $(SAMPLE)

## Extra files to install
EXTRA_DATA = convrtrs.txt UnicodeData-3.0.0d5.txt

## List of phony targets
.PHONY : all all-local all-recursive install install-local		\
install-recursive clean clean-local clean-recursive distclean		\
distclean-local distclean-recursive doc dist dist-local dist-recursive	\
check check-local check-recursive

## Clear suffix list
.SUFFIXES :

## List of standard targets
all: all-recursive all-local
install: install-recursive install-local
clean: clean-recursive clean-local
distclean : distclean-recursive distclean-local
dist: dist-recursive dist-local
check: check-recursive check-local

## Recursive targets
all-recursive install-recursive clean-recursive distclean-recursive dist-recursive check-recursive:
	@dot_seen=no; \
	target=`echo $@ | sed s/-recursive//`; \
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  echo "Making $$target in $$subdir"; \
	  if test "$$subdir" = "."; then \
	    dot_seen=yes; \
	    local_target="$$target-local"; \
	  else \
	    local_target="$$target"; \
	  fi; \
	  (cd $$subdir && $(MAKE) $$local_target); \
	done; \
	if test "$$dot_seen" = "no"; then \
	  $(MAKE) "$$target-local" || exit 1; \
	fi

all-local: configure

install-local:
	@for file in $(EXTRA_DATA); do \
	  echo $(INSTALL_DATA) $(top_builddir)/../data/$$file $(pkgdatadir)/$(VERSION)/$$file; \
	  $(INSTALL_DATA) $(top_builddir)/../data/$$file $(pkgdatadir)/$(VERSION)/$$file; \
	done

## Generate HTML documentation
doc:
	@uniq=`date '+%y%m%d8/20/99M%S'`; \
	tmpdir="/tmp/icu-$$uniq"; \
	list='$(DOCDIRS)'; for subdir in $$list; do \
	  echo "Making install-headers in $$subdir"; \
	  (cd $$subdir && \
		$(MAKE) includedir=$$tmpdir/include install-headers); \
	done; \
	echo "Generating html documentation..."; \
	doc++ -H -d $$tmpdir/html $$tmpdir/include/*.h > /dev/null 2>&1; \
	rm -rf $$tmpdir

dist-local:

clean-local:
	test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)

distclean-local:
	rm -f Makefile config.cache config.log config.status
	rm -f common/platform.h common/icucfg.h

check-local:

$(srcdir)/configure : $(srcdir)/configure.in $(top_srcdir)/aclocal.m4
	cd $(srcdir) && $(AUTOCONF)

Makefile: $(srcdir)/Makefile.in  $(top_builddir)/config.status
	cd $(top_builddir) \
		&& CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status

config.status: $(srcdir)/configure
	$(SHELL) ./config.status --recheck
