## -*-makefile-*-
## 390-specific setup 
## Copyright (c) 1999-2000, International Business Machines Corporation and
## others. All Rights Reserved.

###################################################################
#                    IMPORTANT NOTE                               #
###################################################################
# Before you try to run the Makefile, make sure you have the      #
# environment variables set.                                      #
#                                                                 #
# If you are going to do the OS390BATCH build, make sure you have #
# the OS390BATCH environment variable set.                        #
#                                                                 #
#   export OS390BATCH=1                                           #
#                                                                 #
# To build a version of ICU which uses IEEE Floating point        #
#                                                                 #
#   export IEEE390=1                                              #
#                                                                 #
###################################################################

ifeq (${IEEE390}, 1)
ICU_IEEE          = -Wc,"float(ieee)" -DIEEE_ON
else
ICU_IEEE          = 
endif

CFLAGS390=      -Wc,"langlvl(extended),spill(2000)"  $(ICU_IEEE) -Wc,dll,expo
## OS390BATCH
ifeq (${OS390BATCH},1)
DEFS390=        -D_OPEN_THREADS -D_XOPEN_SOURCE_EXTENDED -DOS390BATCH -D_SHARE_EXT_VARS
else
DEFS390=        -D_OPEN_THREADS -D_XOPEN_SOURCE_EXTENDED -D_SHARE_EXT_VARS
endif
ARFLAGS=        -cr


## Commands to generate dependency files
GEN_DEPS.c=	makedep                         
GEN_DEPS.cc=	makedep

## Commands to compile
COMPILE.c=	_CXX_CXXSUFFIX="cpp" _CXX_STEPS="-1" $(CXX) $(DEFS) $(CPPFLAGS) $(CFLAGS) $(CFLAGS390) $(DEFS390) -c
COMPILE.cc=	_CXX_CXXSUFFIX="cpp" _CXX_STEPS="-1" $(CXX) $(DEFS) $(CPPFLAGS) $(CPPFLAGS) $(CFLAGS390) $(DEFS390) -c

## Commands to link
LINK.c=		$(CC) $(DEFS) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS)
LINK.cc=	$(CXX) $(DEFS) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS)

## Commands for shared library (dll)
SHLIB.c=	$(LINK.c) -Wl,dll
SHLIB.cc=	$(LINK.cc) -Wl,dll

## Compiler switch to embed a runtime search path
LD_RPATH=	-I

## Shared object suffix (switch to dll for shared library build)
SO=		dll

## Link commands to link to ICU libs
LIBICU-UC= 	$(top_builddir)/common/libicu-uc.x
LIBICU-I18N= 	$(top_builddir)/i18n/libicu-i18n.x
LIBCTESTFW= 	$(top_builddir)/tools/ctestfw/libctestfw.x
LIBICU-TOOLUTIL=$(top_builddir)/tools/toolutil/libicu-toolutil.x

## Special 390 rules

## Build archive from object
%.a : $(OBJECTS)
	$(AR) $(ARFLAGS) $@ $(OBJECTS)

## Compilation rules
%.o :$(srcdir)/%.c
	$(COMPILE.c) -o $@ $<

%.o :$(srcdir)/%.cpp
	$(COMPILE.cc) -o $@ $<


## Dependency rules
%.d : %.u
	@$(SHELL) -ec 'cat $<  \
		| sed '\''s/\($*\)\.o[ :]*/\1.o $@ : /g'\'' > $@; \
		[ -s $@ ] || rm -f $@ ; rm -f $<'

%.u : $(srcdir)/%.c
	@echo "Generating dependency information for $<"
	@$(SHELL) -ec 'touch            $*.u  > /dev/null 2>&1'
	@$(SHELL) -ec '$(GEN_DEPS.c) -f $*.u $< > /dev/null 2>&1'

%.u : $(srcdir)/%.cpp
	@echo "Generating dependency information for $<"
	@$(SHELL) -ec 'touch              $*.u  > /dev/null 2>&1'
	@$(SHELL) -ec '$(GEN_DEPS.cc)  -f $*.u $< > /dev/null 2>&1'

## End 390-specific setup
