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

# SIMPLIFIED WAY TO BUILD ICU4J DATA FROM C
#
# Note: do NOT edit this file, Makefile or Makefile.in
# Create a new file, Makefile.local
#
# 1. Need to set the following variable in Makefile.local:
#
#   ICU4J_HOME      example:  ICU4J_HOME=/home/srl/icu4j
#        Path to your icu4j directory. Should contain build.xml
#        If not set, will create a 'icu4j' directory in source/tools/genrb/icu4j
#
# 2.  The next variable can be set by uncommenting and copying the following line to your Makefile.local.GENDTJAR_JARHOME 
#
## GENDTJAR_JARHOME:=$(shell dirname `which jar`)
## (uncomment the above line and copy to Makefile.local)
#
# GENDTJAR_JARHOME is the directory containing the 'jar' binary, such as /usr/bin
#
#
# 3. Now, you can run 'make build-icu4j'  from icu/source/data  (convenience) 
#        or icu/source/tools/genrb (this directory)


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

top_builddir = ../..

include $(top_builddir)/icudefs.mk

## Build directory information
subdir = tools/genrb

TARGET_STUB_NAME = genrb
DERB_STUB_NAME = derb

SECTION = 1

MAN_FILES = $(TARGET_STUB_NAME).$(SECTION) $(DERB_STUB_NAME).$(SECTION)


## Extra files to remove for 'make clean'
CLEANFILES = *~ $(MAN_FILES) $(DEPS) $(DERB_DEPS)

## Target information
TARGET = $(BINDIR)/$(TARGET_STUB_NAME)$(EXEEXT)
DERB = $(BINDIR)/$(DERB_STUB_NAME)$(EXEEXT)

ifneq ($(top_builddir),$(top_srcdir))
CPPFLAGS += -I$(top_builddir)/common
endif
CPPFLAGS += -I$(top_srcdir)/common -I$(top_srcdir)/i18n -I$(srcdir)/../toolutil
LIBS = $(LIBICUI18N) $(LIBICUTOOLUTIL) $(LIBICUUC) $(DEFAULT_LIBS) $(LIB_M)

OBJECTS = errmsg.o genrb.o parse.o read.o reslist.o ustr.o rbutil.o \
wrtjava.o rle.o wrtxml.o prscmnts.o
DERB_OBJ = derb.o

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

# build-icu4j  variables
GENDTJAR_ICUHOME=$(shell pwd)/../../..
GENDTJAR_OPTS=--icu-root="$(GENDTJAR_ICUHOME)" --jar="$(GENDTJAR_JARHOME)" --icu4j-root="$(ICU4J_HOME)" --verbose
GENDTJAR_TEMP=./temp/
GENDTJAR=$(srcdir)/gendtjar.pl

-include Makefile.local

ifeq (,$(ICU4J_HOME))
ICU4J_HOME=$(shell pwd)/icu4j
endif


## List of phony targets
.PHONY : all all-local install install-local clean clean-local	\
distclean distclean-local dist dist-local check check-local install-man \
build-icu4j

## Clear suffix list
.SUFFIXES :

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

all-local: $(TARGET) $(DERB) $(MAN_FILES) 

install-local: all-local install-man
	$(MKINSTALLDIRS) $(DESTDIR)$(bindir)
	$(INSTALL) $(TARGET) $(DESTDIR)$(bindir)
	$(INSTALL) $(DERB) $(DESTDIR)$(bindir)

install-man: $(MAN_FILES)
	$(MKINSTALLDIRS) $(DESTDIR)$(mandir)/man$(SECTION)
	$(INSTALL_DATA) $? $(DESTDIR)$(mandir)/man$(SECTION)

dist-local:

clean-local:
	test -z "$(CLEANFILES)" || $(RMV) $(CLEANFILES)
	$(RMV) $(TARGET) $(DERB) $(OBJECTS) $(DERB_OBJ) $(GENDTJAR_TEMP)

distclean-local: clean-local
	$(RMV) Makefile

check-local: all-local

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

$(TARGET) : $(OBJECTS)
	$(LINK.cc) $(OUTOPT)$@ $^ $(LIBS) 
	$(POST_BUILD_STEP)

$(DERB) : $(DERB_OBJ)
	$(LINK.c) $(OUTOPT)$@ $^ $(LIBS)
	$(POST_BUILD_STEP)

$(GENDTJAR_JARHOME)/jar:
	@echo $@ not found - make sure GENDTJAR_JARHOME is set. See Makefile.in
	exit 1

$(ICU4J_HOME)/build.xml:
	@echo warning: $@ not found - make sure ICU4J_HOME is set.

build-icu4j:	$(GENDTJAR) $(ICU4J_HOME)/build.xml $(GENDTJAR_JARHOME)/jar
	# clean up old temp files
	-$(RMV) $(GENDTJAR_TEMP)
	perl $(GENDTJAR) $(GENDTJAR_OPTS)
	@echo Finished building to $(ICU4J_HOME)


# This line is needed to serialize builds when the gmake -j option is used.
$(TARGET_STUB_NAME).$(SECTION): $(DERB_STUB_NAME).$(SECTION)

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


ifeq (,$(MAKECMDGOALS))
-include $(DEPS)
-include $(DERB_DEPS)
else
ifneq ($(patsubst %clean,,$(MAKECMDGOALS)),)
-include $(DEPS)
endif
endif

