#
# $Id$
#
# configuration file for EDG eccp
#
##############################################################################
#
# 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             = eccp
CCVER          := $(shell eccp -v foo.c 2>&1 | head -1 | awk '{ print $$8'})
ECCP_MAJOR     := $(shell echo "$(CCVER)" | sed -n "s/^\([^\.]*\).*/\1/p")
ECCP_MINOR     := $(shell echo "$(CCVER)" | sed -n "s/^.*\.\([0-9]*\).*/\1/p")

ifeq ($(BUILDDIR),)
    # set to the CWD when not defined
    BUILDDIR=$(shell pwd)/build
endif

ifeq ($(ECCP_MAJOR),2)
    CPPFLAGS        = -I$(TOPDIR)/include/ansi --incl_suffixes ::
    CXXFLAGS        = -A -B -x
    LDFLAGS         =
else
    CPPFLAGS        = -I$(TOPDIR)/include/ansi
    CXXFLAGS        = -A -x --template_directory=$(BUILDDIR)/lib
    LDFLAGS         = --template_directory=$(BUILDDIR)/lib
endif   # ECCP_MAJOR == 2

# disabled remarks (othewise issued with --remarks)
# 193: zero used for undefined preprocessing identifier
# 236: controlling expression is constant
# 261: access control not specified ("public" by default)
# 340: value copied to temporary, reference to temporary used
# 401: destructor for base class is not virtual
# 479: function redeclared "inline" after being called
# 487: inline function cannot be explicitly instantiated
# 678: call of function cannot be inlined
# 679: function cannot be inlined
# 815: type qualifier on return type is meaningless

# other diagnostics (not disabled):
# 450: the type "long long" is nonstandard

WARNFLAGS       = --display_error_number --remarks \
                  --diag_suppress 193,236,340,401,261,479,487,678,679,815
PHWARNFLAGS     = --diag_suppress 177,381,191,68,550,611,997,549
DEPENDFLAGS     = -M
PICFLAGS        = 
PRELINKFLAGS    = --prelink_objects

# disable assembly files for now, eccp doesn't understand them
# (until the makefiles are changed to use the system assembler
# to assemble such files)
AS_EXT = .

# The flag(s) to use to embed a library search path into generated executables.
# Appropriate flag(s) (if available) not determined at this time.
RPATH =

# debug/optimization options
DEBUG_CXXFLAGS  = -g
DEBUG_CPPFLAGS  =

OPTMZ_CXXFLAGS  = -O
OPTMZ_CPPFLAGS  =

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

STATIC_CXXFLAGS =
STATIC_CPPFLAGS =
STATIC_LDFLAGS  =

# Compiler and linker flags for multi-threading
MULTI_CPPFLAGS_POSIX   = -D_REENTRANT
MULTI_CPPFLAGS_SOLARIS = 
MULTI_CPPFLAGS_DCE     = 

MULTI_LDFLAGS_POSIX    = /usr/lib/libpthread.so
MULTI_LDFLAGS_SOLARIS  = 
MULTI_LDFLAGS_DCE      = 

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

SINGL_CPPFLAGS  =
SINGL_LDFLAGS   =
