## -*-makefile-*-
#******************************************************************************
#   Copyright (C) 1999, International Business Machines
#   Corporation and others.  All Rights Reserved.
# $Revision: 1.4 $
#******************************************************************************
# This Makefile is designed to be included into projects which make use
# of the ICU.


SHELL=@SHELL@
CFLAGS=@CFLAGS@ 
CPPFLAGS=@CPPFLAGS@ -I$(prefix)/include
CXXFLAGS=@CXXFLAGS@ 
FFLAGS=@FFLAGS@
DEFS=@DEFS@ 
LDFLAGS=@LDFLAGS@ -L$(prefix)/lib $(LD_RPATH)$(LD_RPATH_PRE)$(libdir)
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@

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@


# begin host fragment
@host_frag@
# end host fragment




GENCCODE=$(sbindir)/genccode
GENCMN=$(sbindir)/gencmn

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

# Try to optimize the path

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

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

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

ifeq ($(strip $(PLATFORM)),U_SOLARIS)
  TOOL=env LD_LIBRARY_PATH=$(libdir)
endif

