# -*- Makefile -*-
#
# $Id: sunpro.config 580483 2007-09-28 20:55:52Z sebor $
#
# configuration file for SunPro CC on SunOS
#
########################################################################
#
# Licensed to the Apache Software  Foundation (ASF) under one or more
# contributor  license agreements.  See  the NOTICE  file distributed
# with  this  work  for  additional information  regarding  copyright
# ownership.   The ASF  licenses this  file to  you under  the Apache
# License, Version  2.0 (the  "License"); you may  not use  this file
# except in  compliance with the License.   You may obtain  a copy of
# the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the  License is distributed on an  "AS IS" BASIS,
# WITHOUT  WARRANTIES OR CONDITIONS  OF ANY  KIND, either  express or
# implied.   See  the License  for  the  specific language  governing
# permissions and limitations under the License.
#
# Copyright 1999-2007 Rogue Wave Software, Inc.
#
########################################################################

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

ifeq ($(shell expr    \( $(CCMAJOR) = 5 \& $(CCMINOR) \> 6 \) \
                   \| $(CCMAJOR) \> 5),1)
  # for Sun C++ 5.7 and beyond, enable diagnostic "tags" in compiler output
  # and use -erroff to silence Warning: std::stringstream::rdbuf hides the
  # function std::ios::rdbuf(std::streambuf*) (see STDCXX-344)
  WARNFLAGS += -errtags -erroff=hidef
endif

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   =
