## -*-makefile-*-
## Copyright (C) 2016 and later: Unicode, Inc. and others.
## License & terms of use: http://www.unicode.org/copyright.html
## 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

