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

## 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/genrb

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

## Target information
TARGET = genrb

DEFS = @DEFS@
CPPFLAGS = @CPPFLAGS@ -I$(top_srcdir)/common -I$(top_srcdir)/i18n -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)/i18n@ld_rpath_suf@$(LD_RPATH_PRE)$(top_builddir)/tools/toolutil
LIBS = $(LIBICU-UC) $(LIBICU-I18N) @LIBS@ @LIB_M@  $(LIBICU-TOOLUTIL)

OBJECTS = error.o genrb.o ustr.o parse.o read.o write.o list.o	\
rblist.o ufile.o ustdio.o util.o

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

## List of resource bundles to build
TXT_SOURCE = ar.txt ar_AE.txt ar_BH.txt ar_DZ.txt ar_EG.txt ar_IQ.txt	\
ar_JO.txt ar_KW.txt ar_LB.txt ar_LY.txt ar_MA.txt ar_OM.txt ar_QA.txt	\
ar_SA.txt ar_SD.txt ar_SY.txt ar_TN.txt ar_YE.txt be.txt be_BY.txt	\
bg.txt bg_BG.txt ca.txt ca_ES.txt ca_ES_EURO.txt cs.txt cs_CZ.txt	\
da.txt da_DK.txt de.txt de_AT.txt de_AT_EURO.txt de_CH.txt de_DE.txt	\
de_DE_EURO.txt de_LU.txt de_LU_EURO.txt el.txt el_GR.txt en.txt		\
en_AU.txt en_BE.txt en_CA.txt en_GB.txt en_IE.txt en_IE_EURO.txt	\
en_NZ.txt en_US.txt en_ZA.txt es.txt es_AR.txt es_BO.txt es_CL.txt	\
es_CO.txt es_CR.txt es_DO.txt es_EC.txt es_ES.txt es_ES_EURO.txt	\
es_GT.txt es_HN.txt es_MX.txt es_NI.txt es_PA.txt es_PE.txt es_PR.txt	\
es_PY.txt es_SV.txt es_UY.txt es_VE.txt et.txt et_EE.txt fi.txt		\
fi_FI.txt fi_FI_EURO.txt fr.txt fr_BE.txt fr_BE_EURO.txt fr_CA.txt	\
fr_CH.txt fr_FR.txt fr_FR_EURO.txt fr_LU.txt fr_LU_EURO.txt hr.txt	\
hr_HR.txt hu.txt hu_HU.txt is.txt is_IS.txt it.txt it_CH.txt it_IT.txt	\
it_IT_EURO.txt iw.txt iw_IL.txt ja.txt ja_JP.txt ko.txt ko_KR.txt	\
lt.txt lt_LT.txt lv.txt lv_LV.txt mk.txt mk_MK.txt nl.txt nl_BE.txt	\
nl_BE_EURO.txt nl_NL.txt nl_NL_EURO.txt no.txt no_NO.txt no_NO_NY.txt	\
pl.txt pl_PL.txt pt.txt pt_BR.txt pt_PT.txt pt_PT_EURO.txt ro.txt	\
ro_RO.txt ru.txt ru_RU.txt sh.txt sh_YU.txt sk.txt sk_SK.txt sl.txt	\
sl_SI.txt sq.txt sq_AL.txt sr.txt sr_YU.txt sv.txt sv_SE.txt th.txt	\
th_TH.txt tr.txt tr_TR.txt uk.txt uk_UA.txt vi.txt vi_VN.txt zh.txt	\
zh_CN.txt zh_HK.txt zh_TW.txt default.txt index.txt

TRANSLIT_SOURCE = kbdescl1.txt larabic.txt ldevan.txt \
lgreek.txt fullhalf.txt lhebrew.txt lkana.txt lcyril.txt       \
quotes.txt ucname.txt index.txt ljamo.txt

TXT_FILES = $(TXT_SOURCE:%=$(top_srcdir)/../data/%)
RES_FILES = $(TXT_FILES:.txt=.res)
TRANSLIT_FILES = $(TRANSLIT_SOURCE:%=$(top_srcdir)/../data/translit/%)
TRANSLIT_RES = $(TRANSLIT_FILES:.txt=.res)
TEST_FILES = $(top_srcdir)/test/testdata/default.res \
$(top_srcdir)/test/testdata/te.res \
$(top_srcdir)/test/testdata/te_IN.res

## 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)
	$(mkinstalldirs) $(pkgdatadir)/$(VERSION)
	@list='$(notdir $(RES_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
	$(mkinstalldirs) $(pkgdatadir)/$(VERSION)/translit
	@list='$(notdir $(TRANSLIT_RES))'; for file in $$list; do \
		echo $(INSTALL_DATA) $(top_srcdir)/../data/translit/$$file $(pkgdatadir)/$(VERSION)/translit/$$file; \
		$(INSTALL_DATA) $(top_srcdir)/../data/translit/$$file $(pkgdatadir)/$(VERSION)/translit/$$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) $(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)

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

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



