## -*-makefile-*-
## HP/UX-specific setup using aCC
## Copyright (c) 1999-2007, 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
# +W ignores some warnings
#    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>
#   4232 conversion to a more strictly aligned type may cause misaligned access.
CFLAGS += -Ae +ESlit
CXXFLAGS += +W740 +W749 +W823 +W4232

# -Bhidden_def Hides all symbols defined in the module.
#LIBCFLAGS = -Bhidden_def
#LIBCXXFLAGS = -Bhidden_def

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

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