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

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

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

## Target information
TARGET = genccode

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 = genccode.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

## 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) $(RES_FILES) $(TRANSLIT_RES) $(TEST_FILES)

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

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.c) -o $@ $^ $(LIBS) 

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



