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

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

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

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

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

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

## Shared object suffix
SO=		so

## Link commands to link to ICU libs
LIBICU-UC= 	-L$(top_builddir)/common -licu-uc
LIBICU-I18N= 	-L$(top_builddir)/i18n -licu-i18n
LIBCTESTFW= 	-L$(top_builddir)/tools/ctestfw -lctestfw
LIBICU-TOOLUTIL=-L$(top_builddir)/tools/toolutil -licu-toolutil
LIBUSTDIO=      -L$(top_builddir)/extra/ustdio -lustdio

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

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

../data/%.o : ../data/%.c
	$(COMPILE.c) -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) $< > $@

## End Solaris-specific setup
