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

## Source directory information
srcdir = @srcdir@
top_srcdir = @top_srcdir@

top_builddir = ../..

include $(top_builddir)/icudefs.mk

include @platform_make_fragment@

## Build directory information
subdir = data/build

# OBJDATADIR must be a short path (with ..'s) to the data.


SRCDATADIR=$(top_srcdir)/../data
UNICODEDATADIR=$(SRCDATADIR)/unidata
TESTSRCDATADIR=$(top_srcdir)/test/testdata
TESTOBJDATADIR=$(top_builddir)/test/testdata
SRCLISTDEPS=Makefile $(srcdir)/Makefile.in $(SRCDATADIR)/resfiles.mk $(SRCDATADIR)/ucmfiles.mk

OBJDATADIR=.

# relative lib links from pkgdata are the same as for tmp
INVOKE = $(LDLIBRARYPATH_ENVVAR)=$(top_builddir)/common:$(top_builddir)/i18n:$(top_builddir)/tools/toolutil:$(top_builddir)/extra/ustdio:$$$(LDLIBRARYPATH_ENVVAR)
TOOLDIR=$(top_builddir)/tools

## List of phony targets
.PHONY : all all-local all-recursive install install-local install-files install-dlls build-cmnfile build-dll		\
install-recursive clean clean-local clean-recursive distclean		\
distclean-local distclean-recursive dist dist-local dist-recursive	\
check check-local check-recursive build-testdlls build-basetestdata build-local

## Clear suffix list
.SUFFIXES :

## List of standard targets
all: all-local
install: 
clean: clean-local
distclean : distclean
dist: 
check: all

all-local: thaidict.brk build-local 


##### Define all the data files. the build rule that depends on them is below.

## DAT files - Misc. data files.
DAT_FILES=qchk.dat fchk.dat uprops.dat unames.dat cnvalias.dat tz.dat ucadata.dat invuca.dat
TEST_DAT_FILES=$(TESTOBJDATADIR)/test.dat

## BRK files
# ALL of these files can be deleted (the following BRK files) - they are copied
BRK_FILES=char.brk line.brk line_th.brk sent.brk word.brk word_th.brk
# don't include thaidict.brk - it goes into a resource bundle - plus it isn't deleted

## UCM files 
include $(SRCDATADIR)/ucmfiles.mk
-include $(SRCDATADIR)/ucmebcdic.mk
-include $(SRCDATADIR)/ucmlocal.mk
ALL_UCM_SOURCE= $(UCM_SOURCE) $(UCM_SOURCE_EBCDIC) $(UCM_SOURCE_LOCAL)
UCM_FILES = $(ALL_UCM_SOURCE:%=$(SRCDATADIR)/%)
CNV_FILES = $(ALL_UCM_SOURCE:%.ucm=%.cnv)

TEST_UCM_SOURCE= test1.ucm test3.ucm test4.ucm
TEST_UCM_FILES=$(TEST_UCM_SOURCE:%=$(TESTSRCDATADIR)/data/%)
TEST_CNV_FILES=$(TEST_UCM_SOURCE:%.ucm=%.cnv)

## RES files
include $(SRCDATADIR)/resfiles.mk
-include $(SRCDATADIR)/reslocal.mk
ALL_RES_SOURCE= $(GENRB_SOURCE) $(TRANSLIT_SOURCE) $(RESOURCE_SRC) $(GENRB_SOURCE_LOCAL)
RES_SRC_FILES = $(ALL_RES_SOURCE:%=$(SRCDATADIR)/%)
RES_FILES = $(ALL_RES_SOURCE:%.txt=%.res)

TEST_RES = root.txt te.txt te_IN.txt testtypes.txt
TEST_RES_SRC_FILES=$(ALL_TEST_RES_SOURCE:%=$(TESTSRCDATADIR)/%)
TEST_RES_FILES=$(TEST_RES:%.txt=$(TESTOBJDATADIR)/%.res)

## All generated files
ALL_FILES = $(DAT_FILES) $(BRK_FILES) $(CNV_FILES) $(RES_FILES)

ALL_TEST_FILES = $(TEST_DAT_FILES) $(TEST_BRK_FILES) $(TEST_CNV_FILES) $(TEST_RES_FILES)

#####################################################
# General data build rules

## Files to remove for 'make clean'
CLEANFILES = *~ $(ALL_FILES) $(ALL_TEST_FILES)

icudata.lst: $(SRCLISTDEPS)
	@echo Generating $@ list of data files
	@-$(RMV) $@
	@for file in $(ALL_FILES); do \
	  echo $$file >> $@; \
	done;

$(TESTOBJDATADIR)/testdata.lst: $(SRCLISTDEPS)
	@echo Generating $@ list of data files
	@-$(RMV) $@
	@for file in $(TEST_RES_FILES) $(TEST_DAT_FILES); do \
	  echo $$file >> $@; \
	done;

build-local: build-data build-testdata

# Additional data for 390
ifeq ($(OS390DATA),1)
OS390LIST= icudata390.lst
endif
#

build-data: $(ALL_FILES) icudata.lst  $(OS390LIST)
	@echo "ICU data files are up to date."

clean-local:
	@echo '#' removing built files: .brk .dat .cnv .res ...
	@$(RMV) $(CLEANFILES) thaidict.brk
	@echo Cleaning up..

#$(ALL_TEST_FILES)

build-testdata:  $(ALL_TEST_FILES) $(TESTOBJDATADIR)/testdata.lst
	@echo "ICU test data files are up to date."

# Now, sections for building each kind of data.

####################################################    DAT
# DAT FILES

# qchk.dat
qchk.dat: $(UNICODEDATADIR)/QuickCheck.txt $(TOOLDIR)/genqchk/genqchk
	@echo Creating qchk.dat
	@ICU_DATA=. $(INVOKE) $(TOOLDIR)/genqchk/genqchk -s $(UNICODEDATADIR) -d . -u $(UNICODE_VERSION)
	
# fchk.dat
fchk.dat: $(UNICODEDATADIR)/FCDCheck.txt $(TOOLDIR)/genfchk/genfchk
	@echo Creating fchk.dat
	@ICU_DATA=. $(INVOKE) $(TOOLDIR)/genfchk/genfchk -s $(UNICODEDATADIR) -d . -u $(UNICODE_VERSION)

# uprops.dat
uprops.dat: $(UNICODEDATADIR)/UnicodeData.txt $(UNICODEDATADIR)/Mirror.txt $(TOOLDIR)/genprops/genprops
	@echo Creating uprops.dat
	@ICU_DATA=. $(INVOKE) $(TOOLDIR)/genprops/genprops -s $(UNICODEDATADIR) -d . -u $(UNICODE_VERSION)

# ucadata.dat
ucadata.dat: $(UNICODEDATADIR)/FractionalUCA.txt $(TOOLDIR)/genuca/genuca
	@echo Creating ucadata.dat and invuca.dat
	@ICU_DATA=. $(INVOKE) $(TOOLDIR)/genuca/genuca -s $(UNICODEDATADIR) -d .

# unames.dat
unames.dat: $(UNICODEDATADIR)/UnicodeData.txt $(TOOLDIR)/gennames/gennames
	@echo Creating unames.dat
	@ICU_DATA=. $(INVOKE) $(TOOLDIR)/gennames/gennames -d . $(UNICODEDATADIR)/UnicodeData.txt -u $(UNICODE_VERSION)

# cnvalias.dat
cnvalias.dat: $(SRCDATADIR)/convrtrs.txt $(TOOLDIR)/gencnval/gencnval
	@echo Creating $@
	@ICU_DATA=. $(INVOKE) $(TOOLDIR)/gencnval/gencnval -d . $(SRCDATADIR)/convrtrs.txt

# tz.dat
tz.dat: $(SRCDATADIR)/timezone.txt $(TOOLDIR)/gentz/gentz
	@echo Creating $@
	@ICU_DATA=. $(INVOKE) $(TOOLDIR)/gentz/gentz -d . $(SRCDATADIR)/timezone.txt

# test.dat
$(TESTOBJDATADIR)/test.dat: $(TOOLDIR)/gentest/gentest
	@echo Creating $@
	@ICU_DATA=. $(INVOKE) $(TOOLDIR)/gentest/gentest -d $(TESTOBJDATADIR) 

####################################################    BRK
# BRK FILES

thaidict.brk: $(SRCDATADIR)/thaidict.brk
	@echo $@
	@$(RMV) $@ && ln -s $< $@

# copy the right endianness

ifeq (@U_IS_BIG_ENDIAN@,1)
%.brk: $(SRCDATADIR)/%BE.brk
	cp $< $@
else
%.brk: $(SRCDATADIR)/%LE.brk
	cp $< $@
endif

####################################################    CNV
# CNV FILES
%.cnv: $(SRCDATADIR)/%.ucm $(TOOLDIR)/makeconv/makeconv
	@ICU_DATA=. $(INVOKE) $(TOOLDIR)/makeconv/makeconv -c -d . $(SRCDATADIR)/$(<F)

%.cnv: $(TESTSRCDATADIR)/%.ucm $(TOOLDIR)/makeconv/makeconv
	@ICU_DATA=. $(INVOKE) $(TOOLDIR)/makeconv/makeconv -c -d . $(TESTSRCDATADIR)/$(<F)

####################################################    RES
# RES FILES
$(TESTOBJDATADIR)/%.res: $(TESTSRCDATADIR)/%.txt $(TOOLDIR)/genrb/genrb
	@ICU_DATA=. $(INVOKE) $(TOOLDIR)/genrb/genrb -s $(TESTSRCDATADIR) -d $(TESTOBJDATADIR) $(<F)

%.res: $(SRCDATADIR)/%.txt $(TOOLDIR)/genrb/genrb ucadata.dat
	@ICU_DATA=. $(INVOKE) $(TOOLDIR)/genrb/genrb -s $(SRCDATADIR) -d . $(<F)


###################################################################

Makefile: $(srcdir)/Makefile.in  $(top_builddir)/config.status
	cd $(top_builddir) \
	&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status


###########
########### 390 support
UCMFILES390=ebcdic-xml-us.ucm ibm-37-s390.ucm ibm-1047-s390.ucm ibm-4909.ucm
ALLFILES390=qchk.dat fchk.dat uprops.dat cnvalias.dat $(UCMFILES390:.ucm=.cnv)

icudata390.lst:  $(SRCLISTDEPS)
	@echo Generating $@ list of 390 data files
	@-$(RMV) $@
	@for file in $(ALLFILES390); do \
	  echo $$file >> $@; \
	done;
