# -*- Makefile -*-
#
# $Id$
#
# configuration file for gcc
#
##############################################################################
#
# 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    = gcc
CCVER := $(shell $(CXX) -dumpversion | sed "s/[^0-9]*\([0-9.]*\).*/\1/g")

# determine the major version of gcc
CXX_MAJOR := $(shell echo "$(CCVER)" | sed "s/^\([1-9][0-9]*\).*/\1/")
CXX_MINOR := $(shell echo "$(CCVER)" | sed "s/[1-9]*\.\([0-9]*\).*/\1/")

# determine the major and minor version of the OS when needed
ifeq ($(OSNAME),AIX)
    OS_MAJOR := $(shell uname -v)
    OS_MINOR := $(shell uname -r)
else
    ifeq ($(OSNAME),Darwin)
        OS_MAJOR := $(shell uname -r | sed "s/^\([1-9]*\).*/\1/")
        OS_MINOR := $(shell uname -r | sed "s/^[1-9][0-9]*\.\([1-9]*\).*/\1/")
    endif
endif

# -W and -Wextra are the same
WARNFLAGS = -W -Wall -Wcast-qual -Winline -Wshadow -Wwrite-strings

# -Wno-long-long not available prior to 2.90
ifeq ($(shell [    $(CXX_MAJOR) -gt 2 -o $(CXX_MAJOR) -eq 2 \
                -a $(CXX_MINOR) -ge 90 ] && echo 1), 1)
    WARNFLAGS += -Wno-long-long
endif   # gcc >= 2.90

# prevent (bogus?) warnings on SunOS
ifneq ($(OSNAME),SunOS)
    WARNFLAGS      += -Wcast-align
else

    # prevent gcc 3.x warnings about #pragma ident on SunOS
    ifeq ($(CXX_MAJOR),3)
        ifeq ($(shell expr $(CXX_MINOR) \< 4),1)
            WARNFLAGS += -Wno-unknown-pragmas
        endif   # gcc < 3.4
    endif   # gcc == 3.x
endif   # !SunOS

# do not enable -Wunreachable-code: it's useless the way implemented
# ifeq ($(shell expr $(CXX_MAJOR) \> 3 \& $(CXX_MINOR) \> 3),1)
# WARNFLAGS      += -Wunreachable-code
# endif   # gcc > 3.3


DEPENDFLAGS = -M

# avoid adding -FPIC on IBM AIX and Cygwin where
# gcc generated code is always position independent
ifeq (,$(findstring AIX,$(OSNAME)))
    ifeq (,$(findstring CYGWIN,$(OSNAME)))
        PICFLAGS = -fPIC
    endif
endif

ifeq ($(OSNAME),SunOS)
  # linker flags for symbol versioning
  # temporarily disabled (not fully implemented)
  # MAPFLAGS = -Wl,-M
endif

ifneq ($(MAPFLAGS),)
    # path to mapfile (relative to $(TOPDIR)) for symbol versioning
    ifneq ($(CXX_MAJOR),2)
        MAPFILE = src/mapfile.$(CXX)
    else
        # gcc 2.x implements a different ABI than gcc 3
        MAPFILE = src/mapfile.$(CXX)-$(CXX_MAJOR)
    endif
endif

ifneq ($(OSNAME),Darwin)
    # no -shared option for GCC on Mac OS X (Darwin)
    LDSOFLAGS = -shared
else
    # flags needed when linking the library
    LDSOFLAGS = -dynamiclib \
-compatibility_version 4 -current_version $(LIBVER)

    # use appropriate install_name
    ifeq ($(shell [ $(OS_MAJOR) -ge 9 ] && echo 1), 1)
        LDSOFLAGS += -install_name @rpath/$(LIBNAME)
    else
        LDSOFLAGS += -install_name $(LIBNAME)
    endif
endif


# -fPIC needed both to compile and link shared libs on HP-UX 11
ifeq ($(OSNAME),HP-UX)
    LDSOFLAGS += -fPIC
endif

ifeq ($(CXX_MAJOR),3)
    ifeq ($(shell [ $(CXX_MINOR) -lt 4 ] && echo 1),1)
        # for gcc 3 prior to gcc 3.4 force linking with libgcc_s.so
        # and avoid linking with libgcc_s.a to get stack unwinding
        # due to exceptions right (see STDCXX-369)
        LDSOFLAGS += -shared-libgcc
    endif
endif

CXXFLAGS = -pedantic -nostdinc++

ifeq ($(CXX_MAJOR),2)
    ifeq ($(shell expr $(CXX_MINOR) / 10),9)
        CXXFLAGS += -fhonor-std -ftemplate-depth-32
    else
        CXXFLAGS += -ftemplate-depth-32
    endif
endif

ifeq ($(OSNAME),IRIX64)
    ifeq ($(CXX_MAJOR),2)
        # prevent (some) assembler errors caused by overly long symbol
        # names (the option is not supported in gcc 3 and beyond)
        CXXFLAGS += -fsquangle
    endif

    # disable ld warnings about libs not used to resolve any symbols
    LDFLAGS += -Wl,-woff,84
endif

# prevent (some) assemler errors caused by overly long symbol names
ifeq ($(OSNAME),OSF1)
    CXXFLAGS += -fsquangle
endif

CXXPRELINK =

# enable C++ C library headers (the <cname> kind)
CPPFLAGS = -I$(TOPDIR)/include/ansi

# decrease warning level to prevent annoying linker warnings
# about duplicate symbols (the linker has no concept of weak symbols)
ifeq ($(OSNAME),AIX)
    LDFLAGS = -Wl,-bh:5
endif

ifneq ($(CXX_MAJOR),2)
    # gcc 3.x needs to explicitly link with libsupc++ for language support
    # g++ 3.x links with it as well as libstdc++ automatically

    # Recently, Apple ships a C++ compiler based on LLVM which does not
    # include a C++ support library; gcc builds on Darwin require a stock
    # GNU compiler

    LDLIBS = -lsupc++
endif # gcc > 2

# The flag(s) to use to embed a library search path into generated executables.
ifeq ($(OSNAME),Linux)
    RPATH = -Wl,-R
else
    ifeq ($(OSNAME),SunOS)
        RPATH = -Wl,-R
    else
        ifeq ($(OSNAME),AIX)
            ifeq ($(shell [    $(OS_MAJOR) -gt 5 -o $(OS_MAJOR) -eq 5 \
                            -a $(OS_MINOR) -ge 3 ] && echo 1), 1)
                # -bsrv4, -R only available on AIX 5.3 and newer
                RPATH = -Wl,-bsvr4,-R
            endif
        else
            ifeq ($(OSNAME),HP-UX)
                RPATH = -Wl,+b
             else
                 ifeq ($(OSNAME),IRIX64)
                     RPATH = -Wl,-rpath,
                 else
                    ifeq ($(OSNAME),OSF1)
                        RPATH = -Wl,-rpath,
                    endif
                 endif
             endif
        endif
    endif
endif

ifeq ($(OSNAME),Darwin)
    ifeq ($(shell [ $(OS_MAJOR) -ge 9 ] && echo 1), 1)
        RPATH = -Wl,-rpath,
    endif
endif

# debug/optimization options
DEBUG_CXXFLAGS  = -g
DEBUG_CPPFLAGS  =

OPTMZ_CXXFLAGS  = -O2
OPTMZ_CPPFLAGS  =

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

ifeq ($(OSNAME),AIX)
    SHARED_SUFFIX = .a
endif

ifeq ($(OSNAME),HP-UX)
    SHARED_SUFFIX = .sl
endif

ifeq ($(OSNAME),Darwin)
    SHARED_SUFFIX = .dylib
endif 

ifneq ($(findstring CYGWIN,$(OSNAME)),)
    SHARED_SUFFIX = .dll
    SHARED_CPPFLAGS += -D_RWSHARED
    LDFLAGS += -Wl,-force-exe-suffix
endif

STATIC_CXXFLAGS =
STATIC_CPPFLAGS =
STATIC_LDFLAGS  =

# compiler and linker flags for thread safety
# use undocumented (though long implemented) gcc option -pthread
# which defines _REENTRANT;
# the same option is named -pthreads on Solaris

ifeq ($(findstring CYGWIN,$(OSNAME)),)
    ifeq ($(OSNAME),SunOS)
        MULTI_CPPFLAGS_POSIX = -pthreads
        MULTI_LDFLAGS_POSIX  = -pthreads
    else
        ifeq ($(OSNAME),IRIX64)
            # no -pthreads option (or similar) on IRIX?
            MULTI_CPPFLAGS_POSIX = -D_REENTRANT
            MULTI_LDFLAGS_POSIX   = -lpthread
        else
            # option doesn't exist in Darwin gcc
            ifneq ($(OSNAME),Darwin)
                MULTI_CPPFLAGS_POSIX = -pthread
                MULTI_LDFLAGS_POSIX  = -pthread
            endif
        endif
    endif
else
    # on Cygwin use MingW-threads by default
    # -mthreads not defines _REENTRANT
    MULTI_CPPFLAGS_POSIX = -D_REENTRANT -mthreads
    MULTI_LDFLAGS_POSIX  = -mthreads

    # link with libcatgets and libiconv
    LDLIBS += -lcatgets -liconv
endif

MULTI_CPPFLAGS_SOLARIS = -threads
MULTI_LDFLAGS_SOLARIS  = -threads

MULTI_CPPFLAGS_DCE     = 
MULTI_LDFLAGS_DCE      = 

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

SINGL_CPPFLAGS =
SINGL_LDFLAGS  =

# gcc can generate 32-bit or 64-bit code by default, depending
# on how it's configured
# determine whether the default compiler invocation produces
# wide (64-bit) or narrow (32-bit) code and set compiler,
# linker, and other options accordingly
wide = $(shell    cd /tmp; tmpfile=stdcxx-longsize-$$; export tmpfile;  \
                  echo "int main() { return 8 == sizeof (long); }"      \
                       > $$tmpfile.c                                    \
               && $(CXX) $$tmpfile.c >/dev/null 2>&1 -o $$tmpfile;      \
               ./$$tmpfile; echo $$?; rm -f $$tmpfile.c $$tmpfile)

ifeq ($(wide),0)
    # narrow (32-bit) mode is implicit
    # use wide (64-bit) flags to explicitly enable LP64 mode

    ifeq ($(OSNAME),HP-UX)
        # -milp32 and -mlp64 are options specific to HP-UX
        CXXFLAGS.wide    = -mlp64
        LDFLAGS.wide     = -mlp64
        LDSOFLAGS.wide   = -mlp64
        ARFLAGS.wide     =
    else
        CXXFLAGS.wide    = -m64
        LDFLAGS.wide     = -m64
        LDSOFLAGS.wide   = -m64
        ARFLAGS.wide     =
    endif

else
    # wide (64-bit) mode is implicit
    # use narrow (32-bit) flags to explicitly enable ILP32 mode

    ifeq ($(OSNAME),HP-UX)
        CXXFLAGS.narrow  = -milp32
        LDFLAGS.narrow   = -milp32
        LDSOFLAGS.narrow = -milp32
        ARFLAGS.narrow   =
    else
        CXXFLAGS.narrow  = -m32
        LDFLAGS.narrow   = -m32
        LDSOFLAGS.narrow = -m32
        ARFLAGS.narrow   =
    endif
endif
