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

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

## Target information
TARGET = genrb

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

TXT_FILES = $(TXT_SOURCE:%=$(top_srcdir)/../data/%)
RES_FILES = $(TXT_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) $(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

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



