## -*-makefile-*-
## Solaris-specific setup using Sun's compilers
## Copyright (c) 1999-2009, International Business Machines Corporation and
## others. All Rights Reserved.

## Flags for position independent code
SHAREDLIBCFLAGS = -KPIC
SHAREDLIBCXXFLAGS = -KPIC
SHAREDLIBCPPFLAGS = -DPIC

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

ifeq ($(UCLN_NO_AUTO_CLEANUP),0)
# set up init point.
UCLN_FINI =  ucln_fini$(TARGET_STUBNAME)_$(SO_TARGET_VERSION_MAJOR)$(ICULIBSUFFIXCNAME)
CPPFLAGS_FINI = -DUCLN_FINI=$(UCLN_FINI)
LDFLAGS_FINI = -zfiniarray=$(UCLN_FINI)

CPPFLAGSICUUC += $(CPPFLAGS_FINI)
LDFLAGSICUUC += $(LDFLAGS_FINI)
CPPFLAGSICUIO += $(CPPFLAGS_FINI)
LDFLAGSICUIO += $(LDFLAGS_FINI)
CPPFLAGSICUI18N += $(CPPFLAGS_FINI)
LDFLAGSICUI18N += $(LDFLAGS_FINI)
CPPFLAGSCTESTFW += $(CPPFLAGS_FINI)
LDFLAGSCTESTFW += $(LDFLAGS_FINI)

# ICUUC, ICUIO, ICUI18N, CTESTFW
endif

# -mt means 'compiles and links a multithreaded program'
THREADSCFLAGS += -mt
THREADSCXXFLAGS += -mt

## Commands to link
## For Sun Workshop, use CC to link to bring in C++ runtime
LINK.c=		$(CXX) $(CXXFLAGS) $(LDFLAGS)
LINK.cc=	$(CXX) $(CXXFLAGS) $(LDFLAGS)

## Commands to make a shared library
SHLIB.c=	$(CC) $(CFLAGS) $(LDFLAGS) -G
SHLIB.cc=	$(CXX) $(CXXFLAGS) $(LDFLAGS) -G

## Compiler switch to embed a runtime search path
LD_RPATH=       -R'$$'ORIGIN
LD_RPATH_PRE=   -R

#LIBRARY_PATH_PREFIX=/usr/lib/lwp:

## Compiler switch to embed a library name
LD_SONAME = -h $(notdir $(MIDDLE_SO_TARGET))

## Shared object suffix
SO=		so
## Non-shared intermediate object suffix
STATIC_O = o

## 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 : $(srcdir)/%.c
	@echo "generating dependency information for $<"
	@$(GEN_DEPS.c) $< > $@

%.d : $(srcdir)/%.cpp
	@echo "generating dependency information for $<"
	@$(GEN_DEPS.cc) $< > $@

## Versioned libraries rules

%.$(SO).$(SO_TARGET_VERSION_MAJOR): %.$(SO).$(SO_TARGET_VERSION)
	$(RM) $@ && ln -s ${<F} $@
%.$(SO): %.$(SO).$(SO_TARGET_VERSION_MAJOR)
	$(RM) $@ && ln -s ${*F}.$(SO).$(SO_TARGET_VERSION) $@

# 
ifeq (strip $(GENCCODE_ASSEMBLY),)
BIR_LDFLAGS=  -Wl,-M,$(NAME).map -Wl,-B,symbolic -Wl,-B,eliminate
BIR_DEPS=   $(NAME).map
endif

## Remove shared library 's'
STATIC_PREFIX_WHEN_USED = 
STATIC_PREFIX = 

## End Solaris-specific setup
