## 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 = $(LIBICU-UC) @LIBS@ @LIB_M@

OBJECTS = makeconv.o

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

## List of converter tables to build
UCM_SOURCE = ibm-1038.ucm ibm-1047.ucm ibm-1089.ucm ibm-1123.ucm	\
ibm-1140.ucm ibm-1141.ucm ibm-1142.ucm ibm-1143.ucm ibm-1144.ucm	\
ibm-1145.ucm ibm-1146.ucm ibm-1147.ucm ibm-1148.ucm ibm-1149.ucm	\
ibm-1153.ucm ibm-1154.ucm ibm-1155.ucm ibm-1156.ucm ibm-1157.ucm	\
ibm-1158.ucm ibm-1159.ucm ibm-1160.ucm ibm-1164.ucm ibm-1252.ucm	\
ibm-12712.ucm ibm-1275.ucm ibm-1276.ucm ibm-1277.ucm ibm-1280.ucm	\
ibm-1281.ucm ibm-1282.ucm ibm-1283.ucm ibm-1361.ucm ibm-1362.ucm	\
ibm-1363.ucm ibm-1364.ucm ibm-1370.ucm ibm-1371.ucm ibm-1383.ucm	\
ibm-1386.ucm ibm-1390.ucm ibm-1399.ucm ibm-16684.ucm ibm-16804.ucm	\
ibm-17248.ucm ibm-21427.ucm ibm-420.ucm ibm-424.ucm ibm-437.ucm		\
ibm-4899.ucm ibm-4909.ucm ibm-4930.ucm ibm-4971.ucm ibm-5104.ucm	\
ibm-5123.ucm ibm-5210.ucm ibm-5346.ucm ibm-5347.ucm ibm-5349.ucm	\
ibm-5350.ucm ibm-5351.ucm ibm-5352.ucm ibm-5353.ucm ibm-5354.ucm	\
ibm-803.ucm ibm-808.ucm ibm-813.ucm ibm-834.ucm ibm-848.ucm		\
ibm-8482.ucm ibm-849.ucm ibm-852.ucm ibm-855.ucm ibm-856.ucm		\
ibm-857.ucm ibm-858.ucm ibm-859.ucm ibm-860.ucm ibm-861.ucm		\
ibm-863.ucm ibm-864.ucm ibm-865.ucm ibm-866.ucm ibm-867.ucm		\
ibm-868.ucm ibm-869.ucm ibm-872.ucm ibm-874.ucm ibm-878.ucm		\
ibm-901.ucm ibm-902.ucm ibm-9027.ucm ibm-9044.ucm ibm-9049.ucm		\
ibm-9061.ucm ibm-912.ucm ibm-913.ucm ibm-914.ucm ibm-915.ucm		\
ibm-916.ucm ibm-920.ucm ibm-921.ucm ibm-922.ucm ibm-923.ucm		\
ibm-9238.ucm ibm-924.ucm ibm-933.ucm ibm-935.ucm ibm-942.ucm		\
ibm-943.ucm ibm-949.ucm ibm-970.ucm ibm-1258.ucm ibm-273.ucm		\
ibm-277.ucm ibm-278.ucm ibm-280.ucm ibm-284.ucm ibm-285.ucm		\
ibm-297.ucm ibm-37.ucm ibm-500.ucm ibm-871.ucm ibm-937.ucm 	\
ibm-930.ucm ibm-1257.ucm ibm-1256.ucm ibm-1255.ucm ibm-1254.ucm ibm-1253.ucm ibm-1251.ucm		\
ibm-1250.ucm ibm-862.ucm ibm-850.ucm ibm-950.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)) convrtrs.txt'; 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



