## Makefile.in for ICU - tools/makeconv
## 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 = tools/makeconv

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

## Target information
TARGET = makeconv

DEFS = @DEFS@
CPPFLAGS = @CPPFLAGS@ -I$(top_srcdir)/common
CFLAGS = @CFLAGS@
CXXFLAGS = @CXXFLAGS@
LDFLAGS = @LDFLAGS@ \
$(LD_RPATH)$(LD_RPATH_PRE)$(libdir)@ld_rpath_suf@$(LD_RPATH_PRE)$(top_builddir)/common
LIBS = -L$(libdir) -L$(top_builddir)/common -licu-uc @LIBS@ @LIB_M@

OBJECTS = makeconv.o

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

## List of converter tables to build
UCM_SOURCE = ibm-1004.ucm ibm-1144.ucm ibm-1383.ucm ibm-865.ucm	\
ibm-923.ucm ibm-1006.ucm ibm-1145.ucm ibm-1386.ucm ibm-866.ucm	\
ibm-930.ucm ibm-1008.ucm ibm-1146.ucm ibm-290.ucm ibm-867.ucm	\
ibm-933.ucm ibm-1038.ucm ibm-1147.ucm ibm-37.ucm ibm-868.ucm	\
ibm-935.ucm ibm-1041.ucm ibm-1148.ucm ibm-420.ucm ibm-869.ucm	\
ibm-937.ucm ibm-1043.ucm ibm-1250.ucm ibm-424.ucm ibm-874.ucm	\
ibm-941.ucm ibm-1051.ucm ibm-1251.ucm ibm-437.ucm ibm-878.ucm	\
ibm-942.ucm ibm-1088.ucm ibm-1252.ucm ibm-813.ucm ibm-891.ucm	\
ibm-943.ucm ibm-1089.ucm ibm-1253.ucm ibm-833.ucm ibm-897.ucm	\
ibm-944.ucm ibm-1098.ucm ibm-1254.ucm ibm-834.ucm ibm-903.ucm	\
ibm-946.ucm ibm-1112.ucm ibm-1255.ucm ibm-835.ucm ibm-904.ucm	\
ibm-947.ucm ibm-1114.ucm ibm-1256.ucm ibm-837.ucm ibm-907.ucm	\
ibm-948.ucm ibm-1115.ucm ibm-1257.ucm ibm-852.ucm ibm-909.ucm	\
ibm-949.ucm ibm-1116.ucm ibm-1258.ucm ibm-855.ucm ibm-910.ucm	\
ibm-950.ucm ibm-1117.ucm ibm-1275.ucm ibm-856.ucm ibm-912.ucm	\
ibm-953.ucm ibm-1118.ucm ibm-1276.ucm ibm-857.ucm ibm-913.ucm	\
ibm-1119.ucm ibm-1277.ucm ibm-858.ucm ibm-914.ucm	\
ibm-955.ucm ibm-1123.ucm ibm-1280.ucm ibm-859.ucm ibm-915.ucm	\
ibm-961.ucm ibm-1140.ucm ibm-1281.ucm ibm-860.ucm ibm-916.ucm	\
ibm-964.ucm ibm-1141.ucm ibm-1282.ucm ibm-861.ucm ibm-920.ucm	\
ibm-970.ucm ibm-1142.ucm ibm-1283.ucm ibm-863.ucm ibm-921.ucm	\
ibm-1143.ucm ibm-1361.ucm ibm-864.ucm ibm-922.ucm ibm-1047.ucm

UCM_FILES = $(UCM_SOURCE:%=$(top_srcdir)/../data/%)
CNV_FILES = $(UCM_FILES:.ucm=.cnv)

## 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) $(CNV_FILES)

install-local: target-clean-local all-local
	$(mkinstalldirs) $(sbindir)
	$(INSTALL) $(TARGET) $(sbindir)/$(TARGET)
	$(mkinstalldirs) $(pkgdatadir)/$(VERSION)
	@list='$(notdir $(CNV_FILES))'; for file in $$list; do \
		echo $(INSTALL_DATA) $(top_srcdir)/../data/$$file $(pkgdatadir)/$(VERSION)/$$file; \
		$(INSTALL_DATA) $(top_srcdir)/../data/$$file $(pkgdatadir)/$(VERSION)/$$file; \
	done

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) $(CNV_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)

## Rule to build a compiled cnv file
%.cnv : %.ucm
	@echo "Creating .cnv file for $<"
	@ICU_DATA=$(top_builddir)/../data/ ./makeconv $< > /dev/null 2>&1

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



