## Makefile.in for ICU - tools/genprops
## Copyright (c) 1999, International Business Machines Corporation and
## others. All Rights Reserved.
## Steven R. Loomis

## Shell to use
SHELL = @SHELL@
VERSION = @VERSION@
UNICODE_VERSION = @UNICODE_VERSION@

ICUDATADIR=$(top_builddir)/../data/
UNICODEFILE=$(top_builddir)/../data/UnicodeData-$(UNICODE_VERSION).txt

## 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 = tools/genprops

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

## Target information
TARGET = genprops

DEFS = @DEFS@
CPPFLAGS = @CPPFLAGS@ -I$(top_srcdir)/common -I../toolutil
CFLAGS = @CFLAGS@
CXXFLAGS = @CXXFLAGS@
LDFLAGS = @LDFLAGS@ \
$(LD_RPATH)$(LD_RPATH_PRE)$(libdir)@ld_rpath_suf@$(LD_RPATH_PRE)$(top_builddir)/common@ld_rpath_suf@$(LD_RPATH_PRE)$(top_builddir)/tools/toolutil
LIBS = $(LIBICU-UC)  @LIBS@ @LIB_M@  $(LIBICU-TOOLUTIL)

OBJECTS = genprops.o

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


## List of phony targets
.PHONY : all all-local install install-local clean clean-local		\
distclean distclean-local target-clean-local dist dist-local check	\
check-local build-data

## 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) build-data

install-local: target-clean-local all-local build-data
	$(mkinstalldirs) $(sbindir)
	$(INSTALL) $(TARGET) $(sbindir)/$(TARGET)

build-data: $(ICUDATADIR)/unames.dat

# we set the ICU_DATA directory here so that unames.dat ends up in 
# icu/data rather than PREFIX/share/icu/VERSION/
$(ICUDATADIR)/unames.dat: $(UNICODEFILE) $(TARGET)
	ICU_DATA=$(ICUDATADIR) ./$(TARGET) -v- -c- $(UNICODEFILE)

dist-local:

target-clean-local:
	rm -f $(TARGET)

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

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

check-local:

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

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

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


