## 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: all-local 
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 uprops.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;
