#******************************************************************************
#
#   Copyright (C) 1998-2007, International Business Machines
#   Corporation and others.  All Rights Reserved.
#
#******************************************************************************
## Top-level Makefile.in for ICU
## Stephen F. Booth

srcdir = @srcdir@
top_srcdir = @top_srcdir@

top_builddir = .

include $(top_builddir)/icudefs.mk

docdir = $(datadir)/doc
docsubdir = $(PACKAGE)$(ICULIBDASHSUFFIX)/html

##

## Build directory information
subdir = .

#AUTOCONF = @AUTOCONF@

## Optional directory setup
@LAYOUT_TRUE@LAYOUT = layout layoutex
@ICUIO_TRUE@ICUIO = io
@EXTRAS_TRUE@EXTRA = extra
@TESTS_TRUE@TEST = test
@SAMPLES_TRUE@SAMPLE = samples

DOXYGEN = @DOXYGEN@

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

## Files built (autoconfed) and installed
INSTALLED_BUILT_FILES = $(top_builddir)/config/Makefile.inc $(top_builddir)/config/icu-config @platform_make_fragment@ $(EXTRA_DATA:%=$(DESTDIR)$(pkglibdir)/%)

## Files built (autoconfed) but not installed
LOCAL_BUILT_FILES = icudefs.mk

DOCDIRS = common i18n
SUBDIRS =  stubdata common i18n $(LAYOUT) tools data $(ICUIO) $(EXTRA) $(SAMPLE) $(TEST)

SECTION = 1

MANX_FILES = config/icu-config.$(SECTION)

ALL_MAN_FILES = $(MANX_FILES)

## 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 clean-recursive-with-twist install-icu \
doc install-doc tests

## Clear suffix list
.SUFFIXES :

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

ifeq ($(DOXYGEN),)
doc:
	@echo you need Doxygen to generate documentation. Doxygen can be found on the Web
	@echo at http://www.doxygen.org/
else
doc: doc/html/index.html

doc/html/index.html: Doxyfile $(wildcard ./common/unicode/platform.h $(srcdir)/common/unicode/*.h $(srcdir)/i18n/unicode/*.h $(srcdir)/layout/unicode/*.h $(srcdir)/io/unicode/*.h)
	$(DOXYGEN)

Doxyfile: $(srcdir)/Doxyfile.in
	CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
endif

LOCAL_SUBDIRS = $(SUBDIRS)
CLEAN_FIRST_SUBDIRS = tools

$(LIBDIR) $(BINDIR):
	-$(MKINSTALLDIRS) $@

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

clean-recursive-with-twist:
	$(MAKE) clean-recursive LOCAL_SUBDIRS='$(CLEAN_FIRST_SUBDIRS) $(filter-out $(CLEAN_FIRST_SUBDIRS),$(LOCAL_SUBDIRS))'

all-local: $(srcdir)/configure $(LOCAL_BUILT_FILES) $(INSTALLED_BUILT_FILES)

install-local: install-icu install-manx

install-icu: $(INSTALLED_BUILT_FILES)
	@$(MKINSTALLDIRS) $(DESTDIR)$(pkgdatadir)/config
	@$(MKINSTALLDIRS) $(DESTDIR)$(pkglibdir)
	@$(MKINSTALLDIRS) $(DESTDIR)$(bindir)
	@$(MKINSTALLDIRS) $(DESTDIR)$(sbindir)
	$(INSTALL_DATA) @platform_make_fragment@ $(DESTDIR)$(pkgdatadir)/config/@platform_make_fragment_name@
	$(INSTALL_SCRIPT) $(top_srcdir)/mkinstalldirs $(DESTDIR)$(pkgdatadir)/mkinstalldirs
	$(INSTALL_SCRIPT) $(top_srcdir)/install-sh $(DESTDIR)$(pkgdatadir)/install-sh
	$(INSTALL_DATA) $(top_srcdir)/../license.html $(DESTDIR)$(pkgdatadir)/license.html
	$(INSTALL_SCRIPT) $(top_builddir)/config/icu-config $(DESTDIR)$(bindir)/icu-config
	$(INSTALL_DATA) $(top_builddir)/config/Makefile.inc $(DESTDIR)$(pkglibdir)/Makefile.inc
	cd $(DESTDIR)$(pkglibdir)/..; \
	    $(RM) current && ln -s $(VERSION) current; \
	    $(RM) Makefile.inc && ln -s current/Makefile.inc Makefile.inc

ifeq ($(DOXYGEN),)
install-doc:
else
install-doc: doc
	$(RM) -r $(DESTDIR)$(docdir)/$(docsubdir)
	$(MKINSTALLDIRS) $(DESTDIR)$(docdir)/$(docsubdir)
	$(INSTALL_DATA) doc/html/* $(DESTDIR)$(docdir)/$(docsubdir)
endif

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

# Build the tests, but don't run them.
tests: all
	$(MAKE) -C $(top_builddir)/test

dist-local:

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

distclean-local: clean-local
	$(RMV) $(top_builddir)/config/Makefile.inc $(top_builddir)/config/icu-config
	$(RMV) config.cache config.log config.status
	$(RMV) Makefile config/Makefile icudefs.mk $(LIBDIR) $(BINDIR)

check-local:

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

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

Makefile: $(srcdir)/Makefile.in icudefs.mk $(top_builddir)/config.status
	cd $(top_builddir) \
		&& CONFIG_FILES=$(subdir)/$@ 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

$(top_builddir)/config/icu-config: $(top_builddir)/Makefile $(top_srcdir)/config/icu-config-top $(top_srcdir)/config/icu-config-bottom $(top_builddir)/config/Makefile.inc @platform_make_fragment@ $(top_srcdir)/config/make2sh.sed
	-$(RMV) $@
	$(INSTALL_SCRIPT) $(top_srcdir)/config/icu-config-top $@
	chmod u+w $@
	@echo "# Following from @platform_make_fragment@" >> $@
	sed -f $(top_srcdir)/config/make2sh.sed < $(top_builddir)/config/Makefile.inc | grep -v '#M#' | uniq >> $@
	sed -f $(top_srcdir)/config/make2sh.sed < @platform_make_fragment@ | grep -v '#M#' | uniq >> $@
	cat $(top_srcdir)/config/icu-config-bottom >> $@
	echo "# Rebuilt on "`date` >> $@
	chmod u-w $@

config.status: $(srcdir)/configure $(srcdir)/common/unicode/uversion.h
	@echo
	@echo
	@echo "*** config.status has become stale ***"
	@echo "   'configure' and/or 'uversion.h' have changed, please"
	@echo "  do 'runConfigureICU' (or 'configure') again, as per"
	@echo "  the readme.html."
	@echo
	@echo
	exit 1


install-manx: $(MANX_FILES)
	$(MKINSTALLDIRS) $(DESTDIR)$(mandir)/man$(SECTION)
	$(INSTALL_DATA) $? $(DESTDIR)$(mandir)/man$(SECTION)

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

