# -*- Makefile -*-
#
# $Id$
#
# configuration file for SunPro CC on SunOS
#
##############################################################################

CXX             = CC

# extract the "C++ m.n" substring from version string (whcih changes
# from one release of the compiler to another)
CCVER          := $(shell   $(CXX) -V 2>&1 | head -n1 \
                          | sed 's/.*C\+\+ *\([^ ]*\).*/\1/')
CCMAJOR        := $(shell echo $(CCVER) | cut -f1 -d'.')
CCMINOR        := $(shell echo $(CCVER) | cut -f2 -d'.')

ifeq ($(shell expr $(CCMAJOR) = 5 \& $(CCMINOR) = 9),1)	
  # in Sun C++ 5.9 -xM can only be used with C and C++ files
  # and it produces the wrong results with .{S,s} files
  DEPENDFLAGS.cpp = -xM

  # deliberately undefined:
  # DEPENDFLAGS.S =
  # DEPENDFLAGS   =
else
  DEPENDFLAGS     = -xM
endif

WARNFLAGS       = +w
PICFLAGS        = -KPIC
LDSOFLAGS       = 
CXXFLAGS        = -library=%none
CXXPRELINK      = 
CPPFLAGS        =
LDFLAGS         = -library=%none
LDSOFLAGS       = -G

# use CC to invoke the compiler (needed to pick up template
# instantiations from SunWS_cache)
AR              = CC
ARFLAGS         = -xar -o

# The flag(s) to use to embed a library search path into generated executables.
RPATH = -R

# debug/optimization options
DEBUG_CXXFLAGS  = -g
DEBUG_CPPFLAGS  =

OPTMZ_CXXFLAGS  = -O
OPTMZ_CPPFLAGS  =

# shared/static library options
SHARED_CXXFLAGS =
SHARED_CPPFLAGS =
SHARED_LDFLAGS  = 

STATIC_CXXFLAGS =
STATIC_CPPFLAGS =
STATIC_LDFLAGS  =

# multi/single thread options; -mt defines _REENTRANT
MULTI_CPPFLAGS_POSIX   = -mt
MULTI_CPPFLAGS_SOLARIS = -mt -D_RWSTD_SOLARIS_THREADS
MULTI_CPPFLAGS_DCE     = 

# avoid linking with the redundant libpthread and libthread
# on Solaris 10 and beyond to prevent error 543
ifeq ($(OSNAME),SunOS)
    OSVER   = $(shell uname -r)
    OSMAJOR = $(shell echo $(OSVER) | sed "s/\([0-9][0-9]*\)\..*/\1/")
    OSMINOR = $(shell echo $(OSVER) | sed "s/[^.]*\.\([0-9][0-9]*\)/\1/")

    ifneq ($(shell expr $(OSMAJOR) \> 5 \| $(OSMINOR) = 10),1)
        LIBPTHREAD = -lpthread
        LIBTHREAD  = -lthread
    endif
else
    LIBPTHREAD = -lpthread
    LIBTHREAD  = -lthread
endif

MULTI_LDFLAGS_POSIX    = -mt $(LIBPTHREAD)
MULTI_LDFLAGS_SOLARIS  = -mt $(LIBTHREAD)
MULTI_LDFLAGS_DCE      =

# POSIX
MULTI_CPPFLAGS = $(MULTI_CPPFLAGS_POSIX)
MULTI_LDFLAGS  = $(MULTI_LDFLAGS_POSIX)

SINGL_CPPFLAGS =
SINGL_LDFLAGS  =

ifeq ($(shell expr $(CCMAJOR) \>= 5 \& $(CCMINOR) \>= 9),1)

    # starting with Sun C++ 5.9, the compiler prefers the generic
    # -m32 and -m64 options to the architecture specific -xarch
    # options some of which have been deprecated
    wide_flags   = -m64
    narrow_flags = -m32
else
    # (try to) determine the architecture via the (non-standard)
    # -p option recognized on (at least) Linux and Solaris
    arch := $(shell uname -p 2>/dev/null)

    ifeq ($(arch),sparc)
        # wide (64-bit) flags -- must be set explicitly
        # narrow (32-bit) flags are implicit on SPARC
        wide_flags   = -xarch=v9
        narrow_flags = -xarch=v8
    else
        # wide (64-bit) flags -- must be set explicitly
        # narrow (32-bit) flags are implicit on AMD64
        ifeq ($(OSNAME),SunOS)
            # Solaris uname -p prints i386 on AMD64, use the optisa
            # command to deterrmine "the best" architecture
            arch := $(shell optisa amd64)
        endif
        ifeq ($(arch),amd64)
            wide_flags   = -xarch=amd64
            narrow_flags = -xarch=386 # the default (same as generic)
        else
            wide_flags   = -xarch=generic64
            narrow_flags = -xarch=generic # the default (same as 386)
        endif
    endif
endif

CXXFLAGS.wide    = $(wide_flags)
LDFLAGS.wide     = $(wide_flags)
LDSOFLAGS.wide   = $(wide_flags)
ARFLAGS.wide     =

CXXFLAGS.narrow  = $(narrow_flags)
LDFLAGS.narrow   = $(narrow_flags)
LDSOFLAGS.narrow = $(narrow_flags)
ARFLAGS.narrow   =
