## -*-makefile-*-
## QNX-specific setup
## Copyright (c) 1999-2003, International Business Machines Corporation and
## others. All Rights Reserved.
##
## Provided By: Chris McKillop <cdm@qnx.com>
##
## $Id: mh-qnx,v 1.3 2003/08/08 23:53:43 grhoten-oss Exp $


#
# Create shared libs that "work" properly.
#

## Commands to generate dependency files
GEN_DEPS.c=  $(CC) -E -Wp,-MM $(DEFS) $(CPPFLAGS)
GEN_DEPS.cc= $(CXX) -E -Wp,-MM $(DEFS) $(CPPFLAGS)

## Flags for position independent code
SHAREDLIBCFLAGS = -shared
SHAREDLIBCXXFLAGS = -shared
# SHAREDLIBCPPFLAGS = -shared

#
# Always generatate PIC code.
#
#CPPFLAGS+=-shared

## Additional flags when building libraries and with threads
LIBCPPFLAGS = 
THREADSCPPFLAGS = 

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

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

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

## 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 $<"
	@$(SHELL) -ec '$(GEN_DEPS.c) $< \
		| sed '\''s%\($*\)\.o[ :]*%\1.o $@ : %g'\'' > $@; \
		[ -s $@ ] || rm -f $@'

%.d: $(srcdir)/%.cpp
	@echo "generating dependency information for $<"
	@$(SHELL) -ec '$(GEN_DEPS.cc) $< \
		| sed '\''s%\($*\)\.o[ :]*%\1.o $@ : %g'\'' > $@; \
		[ -s $@ ] || rm -f $@'

## Versioned libraries rules
##
## QNX wants the SONAME in the shared lib to match the final "real" filename.
## (to ease in packaging with QNX's native package format)
##
MIDDLE_SO_TARGET = $(SO_TARGET).$(SO_TARGET_VERSION_MAJOR)
FINAL_SO_TARGET = $(MIDDLE_SO_TARGET)

%.$(SO): %.$(SO).$(SO_TARGET_VERSION_MAJOR)
	$(RM) $@ && ln -s ${*F}.$(SO).$(SO_TARGET_VERSION_MAJOR) $@
#%.$(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) $@

##  Bind internal references

# LDflags that pkgdata will use
BIR_LDFLAGS= -Wl,-Bsymbolic

# CPPflags for genccode/gencmn
BIR_CPPFLAGS= -DU_HAVE_BIND_INTERNAL_REFERENCES

# Dependencies [i.e. map files] for the final library
BIR_DEPS=

## End QNX-specific setup

