# -*- 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 on AIX
ifeq ($(OSNAME),AIX)
    OS_MAJOR := $(shell uname -v)
    OS_MINOR := $(shell uname -r)
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 \
-install_name $(BUILDDIR)/lib/$(LIBNAME) \
-compatibility_version 4 \
-current_version $(LIBVER)
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
    LDLIBS = -lsupc++

    ifeq ($(OSNAME),Darwin)
        # link with gcc_eh to resolve the _Unwind_xxx functions
        # (shouldn't we link with it on all platforms?)
        LDLIBS += -lgcc_eh
    endif
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

# 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  =

# (try to) determine the architecture via the (non-standard) -p option
# the option is recognized on at least HP-UX, IRIX, and Linux (are there
# any other systems running on IA64?)
arch=$(shell uname -p 2>/dev/null)

ifeq ($(arch),ia64)
    # LP64 is the default (implicit) setting on IA64
    ifeq ($(OSNAME),HP-UX)
        # -milp32, -mlp64, etc. are options specific to HP-UX
        CXXFLAGS.narrow  = -milp32
        LDFLAGS.narrow   = -milp32
        LDSOFLAGS.narrow = -milp32
        ARFLAGS.narrow   =
    endif
else
    # determine whether the default compiler invocation produces
    # wide (64-bit) or narrow (32-bit) code and set compiler,
    # linker, and other flags accordingly
    wide = $(shell tmpfile=/tmp/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)
        # wide (64-bit) flags
        CXXFLAGS.wide  = -m64
        LDFLAGS.wide   = -m64
        LDSOFLAGS.wide = -m64
        ARFLAGS.wide   =

        # narrow (32-bit) mode is implicit
    else
        # narrow (32-bit) flags
        CXXFLAGS.narrow  = -m32
        LDFLAGS.narrow   = -m32
        LDSOFLAGS.narrow = -m32
        ARFLAGS.narrow   =

        # wide (64-bit) mode is implicit
    endif
endif
