#******************************************************************************
#
#   Copyright (C) 1998-2000, International Business Machines
#   Corporation and others.  All Rights Reserved.
#
#******************************************************************************
## 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@


## Platform-specific setup
@host_frag@


## Pacakge information
PACKAGE = @PACKAGE@
VERSION = @VERSION@
UNICODE_VERSION = @UNICODE_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 [nothing at present]
EXTRA_DATA =

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

## Clear suffix list
.SUFFIXES :

## List of standard targets
all: all-local all-recursive
install: install-recursive install-local
clean: clean-recursive clean-local
distclean : distclean-recursive distclean-local
dist: dist-recursive dist-local
check: all 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) || exit; \
	done; \
	if test "$$dot_seen" = "no"; then \
	  $(MAKE) "$$target-local" || exit; \
	fi

all-local: $(srcdir)/configure builddata

install-local: $(top_builddir)/config/Makefile.inc $(EXTRA_DATA:%=$(DESTDIR)$(pkgdatadir)/$(VERSION)/%)
	@$(mkinstalldirs) $(DESTDIR)$(pkgdatadir)
	@$(mkinstalldirs) $(DESTDIR)$(sbindir)
	$(INSTALL_DATA) $(top_builddir)/config/Makefile.inc $(DESTDIR)$(pkgdatadir)/Makefile.inc
	$(INSTALL_SCRIPT) $(top_srcdir)/mkinstalldirs $(DESTDIR)$(sbindir)/mkinstalldirs

$(DESTDIR)$(pkgdatadir)/$(VERSION)/%: $(top_srcdir)/../data/%
	$(INSTALL_DATA) $< $@

## Generate HTML documentation
doc:
	@uniq=`date '+%y%m%d9/30/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; \
	$(RMV) $$tmpdir

dist-local:

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

distclean-local: clean-local
	$(RMV) Makefile config.cache config.log config.status config/Makefile
	$(RMV) common/unicode/platform.h common/icucfg.h
ifeq ($(patsubst ..%,,@RELATIVEDATADIR@),@RELATIVEDATADIR@)
	$(RMV) @DATABUILDDIR@/../source/test/testdata/*.goo @DATABUILDDIR@/../source/test/testdata/*.txt @DATABUILDDIR@/../source/test/testdata/*.bin @DATABUILDDIR@/../source/test/testdata/*.uni
	$(RMV) @DATABUILDDIR@/UnicodeData-$(UNICODE_VERSION).txt @DATABUILDDIR@/thaidict.brk
endif

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

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

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

builddata: @DATABUILDDIR@/UnicodeData-$(UNICODE_VERSION).txt @DATABUILDDIR@/thaidict.brk @DATABUILDDIR@/../source/test/testdata/default.goo

@DATABUILDDIR@/UnicodeData-$(UNICODE_VERSION).txt: $(srcdir)/../data/UnicodeData-$(UNICODE_VERSION).txt
	ln -sf $< @DATABUILDDIR@

@DATABUILDDIR@/thaidict.brk: $(srcdir)/../data/thaidict.brk
	ln -sf $< @DATABUILDDIR@

@DATABUILDDIR@/../source/test/testdata/default.goo: $(srcdir)/test/testdata/default.goo
	ln -sf $(srcdir)/test/testdata/*.goo $(srcdir)/test/testdata/*.txt $(srcdir)/test/testdata/*.bin $(srcdir)/test/testdata/*.uni @DATABUILDDIR@/../source/test/testdata/
	ln -sf $(srcdir)/../data/unidata @DATABUILDDIR@

