## -*-makefile-*-
## BeOS-specific setup
## Copyright (c) 2003-2006, International Business Machines Corporation and
## others. All Rights Reserved.
##
## Original author: Andrew Bachmann

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

# Safe optimizations
#OPTIMIZATIONS= -fdefault-inline -fdefer-pop -fforce-mem -fforce-addr \
#	  -finline -finline-functions \
#	  -fkeep-inline-functions -fkeep-static-consts -fbranch-count-reg \
#	  -ffunction-cse -fstrength-reduce -fthread-jumps -fcse-follow-jumps \
#	  -fcse-skip-blocks -frerun-cse-after-loop -frerun-loop-opt \
#	  -fexpensive-optimizations -foptimize-register-move -fregmove \
#	  -fschedule-insns -fschedule-insns2 -ffloat-store -funroll-loops \
#	  -fmove-all-movables -freduce-all-givs -fpeephole \
#	  -funroll-all-loops -ffunction-sections -fdata-sections

# BeOS gccs (geekgadgets + 2.95.3) have this old bug: 
# after this:          const wchar_t x[] = L"foo";
# x[2] is "optimized" into: (wchar_t)((char *)x)[2] (== 0)
#
# see also: http://gcc.gnu.org/ml/gcc-patches/2000-09/msg00454.html
#
# Unfortunately this behavior isn't controlled by a flag so we can't
# use any O optimizations at all. (the behavior kicks in at -O1)

# Optimizations aren't currently defined in the mh files.
# So Don't override any flags set by the user or runConfigureICU.
#CFLAGS += $(OPTIMIZATIONS)
#CXXFLAGS += $(OPTIMIZATIONS)

# Use -nostart instead of -shared
SHLIB.c=      $(CC) $(DEFS) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -nostart
SHLIB.cc=     $(CXX) $(DEFS) $(CPPFLAGS) $(CXXFLAGS) $(LDFLAGS) -nostart

## Flags for position independent code
SHAREDLIBCFLAGS = -fPIC
SHAREDLIBCXXFLAGS = -fPIC
SHAREDLIBCPPFLAGS = -DPIC

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

%.$(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

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

# Use LIBRARY_PATH instead of LD_LIBRARY_PATH
LDLIBRARYPATH_ENVVAR= LIBRARY_PATH

## End BeOS-specific setup

