## -*-makefile-*-
## HP/UX-specific setup using aCC
## Copyright (c) 1999-2004, International Business Machines Corporation and
## others. All Rights Reserved.

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

## Flags for position independent code
SHAREDLIBCFLAGS = +z
SHAREDLIBCXXFLAGS = +z

## Additional flags when building libraries with threads
## We use this instead of -mt, which isn't available in all versions of aCC
## Our tools won't compile with -D_POSIX_C_SOURCE=199506L
THREADSCPPFLAGS = -D_REENTRANT -D_THREAD_SAFE

# Use Extended ANSI mode, which is useful for 64-bit numbers
# +Olibcalls uses intrinsic functions for strlen and others
# +W ignores some warnings
#    495 The linkage directive is ignored for an object or function...
#    740 Unsafe cast between pointers/references to incomplete classes...
#    749 This operation is non-portable and potentially unsafe.
#        (Ironically the solution to fix this warning is non-portable)
#    823 Redundant preprocessing concatenation operation results in two valid
#        preprocessing tokens. This comes from INT64_C in <inttypes.h>
CFLAGS += +Olibcalls -Ae +ESlit
CXXFLAGS += +Olibcalls +W495 +W740 +W749 +W823

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

## Common 'default' path to ensure the sanity of users.  Search the current
## directory, at least.
LD_DEFAULTPATH= -Wl,+b,.:'$$'ORIGIN/

# Use SHLIB_PATH and LD_LIBRARY_PATH to locate shared libraries
LDFLAGS += -Wl,+s $(LD_DEFAULTPATH)

## Commands to link
## For aCC, use the C++ linker so that __shlinit gets defined
LINK.c=		$(CXX) $(CXXFLAGS) $(LDFLAGS)
LINK.cc=	$(CXX) $(CXXFLAGS) $(LDFLAGS)

## Commands to make a shared library
#SHLIB.c=	$(LD) $(LDFLAGS) -b
SHLIB.c=	$(CXX) $(CXXFLAGS) $(LDFLAGS) -b
SHLIB.cc=	$(CXX) $(CXXFLAGS) $(LDFLAGS) -b

## 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,$(notdir $(MIDDLE_SO_TARGET))

## The type of assembly needed when pkgdata is used for generating shared libraries.
# Commented out for now because the hp1 test machine runs out of memory.
#GENCCODE_ASSEMBLY=-a aCC

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


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

## Install libraries as executable
INSTALL-L=$(INSTALL_PROGRAM)

## End HP/UX-specific setup
