#******************************************************************************
#
#   Copyright (C) 2000, International Business Machines
#   Corporation and others.  All Rights Reserved.
#
#******************************************************************************
# This Makefile is used to build the ICU's data.
# It is included with the -O option to pkgdata.

PLATFORM=@platform@

top_srcdir=@top_srcdir@
srcdir=@srcdir@
top_builddir=..

SHELL=@SHELL@
CFLAGS=@CFLAGS@ 
CPPFLAGS=@CPPFLAGS@ -I$(top_builddir)/common -I$(top_srcdir)/common
CXXFLAGS=@CXXFLAGS@ 
LDFLAGS=@LDFLAGS@ 
FFLAGS=@FFLAGS@
DEFS=@DEFS@ 
ENABLE_RPATH=@ENABLE_RPATH@
ifeq ($(ENABLE_RPATH),YES)
RPATH_LDFLAGS=$(LD_RPATH)$(LD_RPATH_PRE)$(libdir)
endif
LIBS=@LIBS@ 
ICULIBS=$(LIBS) -licu-uc -licu-i18n
exec_prefix=@exec_prefix@
prefix=@prefix@
program_transform_name=@program_transform_name@
bindir=@bindir@
sbindir=@sbindir@
libexecdir=@libexecdir@
datadir=@datadir@
sysconfdir=@sysconfdir@
sharedstatedir=@sharedstatedir@
localstatedir=@localstatedir@
libdir=@libdir@
includedir=@includedir@
oldincludedir=@oldincludedir@
infodir=@infodir@
mandir=@mandir@
PACKAGE=@PACKAGE@
VERSION=@VERSION@
CC=@CC@
CXX=@CXX@
AIX_SHLIB = @AIX_SHLIB@
AR = @AR@
RANLIB = @RANLIB@

INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@

INSTALL_PROGRAM=@INSTALL_PROGRAM@
INSTALL_SCRIPT=@INSTALL_SCRIPT@
INSTALL_DATA=@INSTALL_DATA@
AUTOCONF=@AUTOCONF@
host=@host@
host_alias=@host_alias@
host_cpu=@host_cpu@
host_vendor=@host_vendor@
host_os=@host_os@
LIB_M=@LIB_M@
CPP=@CPP@
U_HAVE_INTTYPES_H=@U_HAVE_INTTYPES_H@
U_IS_BIG_ENDIAN=@U_IS_BIG_ENDIAN@
HAVE_INT8_T=@HAVE_INT8_T@
HAVE_UINT8_T=@HAVE_UINT8_T@
HAVE_INT16_T=@HAVE_INT16_T@
HAVE_UINT16_T=@HAVE_UINT16_T@
HAVE_INT32_T=@HAVE_INT32_T@
HAVE_UINT32_T=@HAVE_UINT32_T@
HAVE_BOOL_T=@HAVE_BOOL_T@
EXTRAS_TRUE=@EXTRAS_TRUE@
EXTRAS_FALSE=@EXTRAS_FALSE@
TESTS_TRUE=@TESTS_TRUE@
TESTS_FALSE=@TESTS_FALSE@
SAMPLES_TRUE=@SAMPLES_TRUE@
SAMPLES_FALSE=@SAMPLES_FALSE@
platform=@platform@


ld_rpath_suf=@ld_rpath_suf@

include $(top_builddir)/icudefs.mk
include @platform_make_fragment@

subdir = tools/tmp

##### Add the following to source/config/Makefile.in

GENCCODE=$(top_builddir)/tools/genccode/genccode
GENCMN=$(top_builddir)/tools/gencmn/gencmn

LPATHS=$(top_builddir)/common:$(top_builddir)/i18n:$(top_builddir)/tools/toolutil

TOOL=env LD_LIBRARY_PATH=$(LPATHS) LIBPATH=$(LPATHS) 

ifeq ($(strip $(PLATFORM)),OS390)
  TOOL=
endif

ifeq ($(strip $(PLATFORM)),AIX)
  TOOL=env LIBPATH=$(LPATHS)
endif

ifeq ($(strip $(PLATFORM)),HPUX)
  TOOL=env LD_LIBRARY_PATH=$(LPATHS)
endif

ifeq ($(strip $(PLATFORM)),U_LINUX)
  TOOL=env LD_LIBRARY_PATH=$(LPATHS)
endif

ifeq ($(strip $(PLATFORM)),U_BSD)
  TOOL=env LD_LIBRARY_PATH=$(LPATHS)
endif

