## -*-makefile-*-
## Aix-specific setup (for xlC)
## Copyright (c) 1999-2000, International Business Machines Corporation and
## others. All Rights Reserved.
##
## $Id: mh-aix-va,v 1.9 2000/10/16 18:05:34 yves Exp $

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

## Commands to compile
COMPILE.c=	$(CC) $(DEFS) $(CPPFLAGS) $(CFLAGS) -c
COMPILE.cc=	$(CXX) $(DEFS) $(CPPFLAGS) $(CXXFLAGS) -c

## 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=		$(CC) $(DEFS) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS)
LINK.c=		$(CXX) $(DEFS) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS)
LINK.cc=	$(CXX) $(DEFS) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS)

## Commands to make a shared library
SHLIB.c=	xlC_r -qmkshrobj
SHLIB.cc=	xlC_r -qmkshrobj

## 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

## Versioned target for a shared library.
FINAL_SO_TARGET = $(SO_TARGET)
MIDDLE_SO_TARGET = 

###  How ICU libraries are named...  ex. $(LIBICU)uc$(SO)
## Prefix for the ICU library names
ICUPREFIX = icu
LIBICU = lib$(ICUPREFIX)
## Shared object suffix
SO=		a
## Non-shared intermediate object suffix
STATIC_O = o

RMV = rm -rf
## Platform commands to remove or move executable and library targets
INSTALL-S = $(INSTALL_PROGRAM)
INSTALL-L = $(INSTALL_DATA)


## Link commands to link to ICU libs
LIBICUUC= 	-L$(top_builddir)/common -l$(ICUPREFIX)uc
LIBICUI18N= 	-L$(top_builddir)/i18n -l$(ICUPREFIX)i18n
LIBCTESTFW= 	-L$(top_builddir)/tools/ctestfw -lctestfw
LIBICUTOOLUTIL=-L$(top_builddir)/tools/toolutil -l$(ICUPREFIX)toolutil
LIBUSTDIO=      -L$(top_builddir)/extra/ustdio -lustdio

## Special AIX rules

## 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 $@ $<

../data/%.o: ../data/%.c
	$(COMPILE.c) $(DYNAMICCPPFLAGS) $(DYNAMICCFLAGS) -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 2>&1'

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

## End Aix-specific setup
