#******************************************************************************
#
#   Copyright (C) 1999, International Business Machines
#   Corporation and others.  All Rights Reserved.
#
#******************************************************************************
## Makefile.in for ICU - icu.so
## 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@

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

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

## Compiler/tools information
CC = @CC@
CXX = @CXX@
PACKAGE = @PACKAGE@
VERSION = @VERSION@

## Platform-specific setup
@host_frag@

## Build directory information
top_builddir = ..
subdir = common

## Extra files to remove for 'make clean'
CLEANFILES = *~

## Target information
TARGET = libicu-uc.$(SO)

DEFS = @DEFS@
CPPFLAGS = @CPPFLAGS@ -DICU_DATA_DIR=\"$(pkgdatadir)/$(VERSION)/\" -DUDATA_SO_SUFFIX=\".$(SO)\" -DU_COMMON_LIBNAME=\"$(TARGET)\"
CFLAGS = @CFLAGS@
CXXFLAGS = @CXXFLAGS@
LDFLAGS = @LDFLAGS@
LIBS = @LIBS@

### use the "--enable-mapped=" option to configure, to get mapped file behavior.
# the case where '--enable-mapped=yes'
@USE_MAPPED_TRUE@CPPFLAGS += -DUDATA_MAP

# the case where '--enable-mapped=no'  (DEFAULT)
@USE_MAPPED_FALSE@CPPFLAGS += -DUDATA_DLL
###


OBJECTS = chariter.o umutex.o compdata.o compitr.o convert.o		\
cpputils.o cstring.o dcmpdata.o digitlst.o filestrm.o locid.o locmap.o	\
mutex.o normlzr.o putil.o rbcache.o resbund.o schriter.o scsu.o		\
uchar.o uchriter.o ucmp8.o ucmp16.o ucmp32.o ucnv.o ucnv_bld.o		\
ucnv_cnv.o ucnv_err.o ucnv_io.o uhash.o uloc.o unicode.o unistr.o	\
ures.o ustring.o rbread.o rbdata.o ubidi.o ubidiln.o bidi.o uvector.o udata.o unames.o

DEPS = $(OBJECTS:.o=.d)

## Header files to install
HEADERS = unicode/*.h

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

## Clear suffix list
.SUFFIXES :

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

all-local: $(TARGET)

install-local: install-headers install-library

install-library: all-local
	$(mkinstalldirs) $(libdir)
	$(INSTALL) $(TARGET) $(libdir)/$(TARGET)

install-headers:
	$(mkinstalldirs) $(includedir)/unicode
	@list='$(HEADERS)'; for file in $$list; do \
	 echo " $(INSTALL_DATA) $$file $(includedir)/$$file"; \
	 $(INSTALL_DATA) $$file $(includedir)/$$file; \
	done

dist-local:

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

distclean-local: clean-local
	rm -f Makefile $(DEPS)

check-local:

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

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

$(TARGET) : $(OBJECTS)
	$(SHLIB.cc) -o $@ $^ $(LIBS)

ifneq ($(MAKECMDGOALS),distclean)
-include $(DEPS)
endif



