## -*-makefile-*-
## HP/UX-specific setup using CC
## Copyright (c) 1999-2000, International Business Machines Corporation and
## others. All Rights Reserved.
##
## $Id: mh-hpux-cc,v 1.30 2002/03/01 17:47:41 grhoten-oss Exp $


## This causes source/tools/pkgdata generated makefiles  to create and link
## in a bogus C++ file, so that exception handling with +eh will be
## enabled properly.  Fun.
HPUX_JUNK_OBJ=  $(TEMP_DIR)/hpux_junk_obj.o

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

## Commands to compile
COMPILE.c=	$(CC) -D__STDC__ +z -Ae $(DEFS) $(CPPFLAGS) $(CFLAGS) -c
COMPILE.cc=	$(CXX) -D__STDC__ +z -ext +dup_static_removal +d $(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 (bug in linker?)
#LINK.c=		$(CC)  +z -Ae $(DEFS) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS)
LINK.c=     $(CXX) +z +a1 $(DEFS) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS) -Wl,+s
LINK.cc=    $(CXX) +z +a1 $(DEFS) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS) -Wl,+s

## Commands to make a shared library
#SHLIB.c=	$(LD) $(LDFLAGS) -b
SHLIB.c=	$(CXX) $(DEFS) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS) -b -Wl,+s
SHLIB.cc=	$(CXX) $(DEFS) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS) -b -Wl,+s

## Compiler switch to embed a runtime search path
LD_RPATH=	-Wl,+b,
LD_RPATH_PRE= 	

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

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

## Shared object suffix
SO=		sl
## 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 $@ $<

../data/%.o: ../data/%.c
	$(COMPILE.c) $(DYNAMICCPPFLAGS) $(DYNAMICCFLAGS) -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 $< $@
%.$(SO): %.$(SO).$(SO_TARGET_VERSION_MAJOR)
	$(RM) $@ && ln -s $*.$(SO).$(SO_TARGET_VERSION) $@

## End HP/UX-specific setup

