## -*-makefile-*-
## Aix-specific setup (for Visual Age 5+)
## Copyright (c) 1999-2003, International Business Machines Corporation and
## others. All Rights Reserved.
##
## $Id: mh-aix-va,v 1.31 2004/01/08 22:54:22 grhoten-oss Exp $

## Commands to generate dependency files
GEN_DEPS.c=	$(CC) -E -M $(DEFS) $(CPPFLAGS)
GEN_DEPS.cc=	$(CXX) -E -M $(DEFS) $(CPPFLAGS)

# -qroconst make the strings readonly, which is usually the default.
#           This helps in the data library,
# -qproto assumes all functions are prototyped (for optimization)
CFLAGS += -qproto -qroconst
CXXFLAGS += -qproto -qroconst

# If you readd this line, you must change the SO value
#LDFLAGS += -brtl

## We need to delete things prior to linking, or else we'll get
## SEVERE ERROR: output file in use ..  on AIX. 
## But, shell script version should NOT delete target as we don't
## have $@ in that context.  (SH = only shell script, icu-config)
AIX_PREDELETE=rm -f $@ ; 
#SH# AIX_PREDELETE=

## Commands to link
## We need to use the C++ linker, even when linking C programs, since
##  our libraries contain C++ code (C++ static init not called)
LINK.c=		$(AIX_PREDELETE) $(CXX) $(CXXFLAGS) $(LDFLAGS)
LINK.cc=	$(AIX_PREDELETE) $(CXX) $(CXXFLAGS) $(LDFLAGS)

## Commands to make a shared library
## -G means -berok -brtl -bnortllib -bnosymbolic -bnoautoexp
## -bh:8 means halt on errors or worse.  We don't display warnings about
##      duplicate inline symbols.
SHLIB.c=	$(AIX_PREDELETE) $(CXX) -qmkshrobj -G $(LDFLAGS)
SHLIB.cc=	$(AIX_PREDELETE) $(CXX) -qmkshrobj -G $(LDFLAGS)

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

## Environment variable to set a runtime search path
LDLIBRARYPATH_ENVVAR = LIBPATH

## Override Versioned target for a shared library.
FINAL_SO_TARGET=  $(basename $(SO_TARGET))$(SO_TARGET_VERSION).$(SO)
MIDDLE_SO_TARGET= $(basename $(SO_TARGET))$(SO_TARGET_VERSION_MAJOR).$(SO)

# The following is for Makefile.inc's use.
ICULIBSUFFIX_VERSION = $(LIB_VERSION_MAJOR)

# this one is for icudefs.mk's use
SO_TARGET_VERSION_SUFFIX = $(SO_TARGET_VERSION_MAJOR)

LD_SONAME = 

## Shared object suffix
#SO=	so
# without the -brtl option, the library names use .a. AIX is funny that way.
SO=	a
## Non-shared intermediate object suffix
STATIC_O = o

## Build archive from shared object
%.a : %.so
	$(AR) $(ARFLAGS) $@ $<

## Build import list from export list
%.e : %.exp
	@echo "Building an import list for $<"
	@$(SHELL) -ec "echo '#! $*.a($*.so)' | cat - $< > $@"

## Compilation rules
%.$(STATIC_O): $(srcdir)/%.c
	$(COMPILE.c) $(STATICCPPFLAGS) $(STATICCFLAGS) -o $@ $<
%.o: $(srcdir)/%.c
	$(COMPILE.c) $(DYNAMICCPPFLAGS) $(DYNAMICCFLAGS) -o $@ $<

%.$(STATIC_O): $(srcdir)/%.cpp
	$(COMPILE.cc) $(STATICCPPFLAGS) $(STATICCXXFLAGS) -o $@ $<
%.o: $(srcdir)/%.cpp
	$(COMPILE.cc) $(DYNAMICCPPFLAGS) $(DYNAMICCXXFLAGS) -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 '$(GEN_DEPS.c) $< > /dev/null'

%.u : $(srcdir)/%.cpp
	@echo "generating dependency information for $<"
	@$(SHELL) -ec '$(GEN_DEPS.cc) $< > /dev/null'

## Versioned libraries rules
%$(SO_TARGET_VERSION_MAJOR).$(SO): %$(SO_TARGET_VERSION).$(SO)
	$(RM) $@ && ln -s $*$(SO_TARGET_VERSION).$(SO) $@
%.$(SO): %$(SO_TARGET_VERSION).$(SO)
	$(RM) $@ && ln -s $*$(SO_TARGET_VERSION).$(SO) $@

## End Aix-specific setup
