#################################################################################
## Makefile.in for ICU - tools/genrb						#
## Copyright (c) 1999-2008, International Business Machines Corporation and	#
## others. All Rights Reserved.							#
#################################################################################
#
#
# For Help with this Makefile and the procedures for generating ICU4J data, please see
# "icu4j-readme.txt" in $icu4c_root/source/data
#
#


## 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 = $(LIBICUTOOLUTIL) $(LIBICUI18N) $(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

##Added by Brian Rower 6/25/08
##if JAVA_HOME was not set, try to set it by finding jar
ifeq (,$(JAVA_HOME))
JAVA_HOME=$(shell dirname `which jar`)
endif

##if GENDTJAR_JARHOME (the directory that "jar" lives in) is not set
##set it equal to $JAVA_HOME/bin
ifeq (,$(GENDTJAR_JARHOME))
GENDTJAR_JARHOME=""$(JAVA_HOME)"/bin"
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.cc) $(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.


#Removed GENDTJAR_JARHOME dependancy. If the file path happens to contain a space in it, 
#having it as a target will cause it to error out when it thinks that there are TWO targets. - Brian Rower 6/25/08
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

