Merged compiler-specific include files branch.

This commit is contained in:
Andrew Johnson
2011-09-01 11:42:37 -05:00
17 changed files with 351 additions and 126 deletions

View File

@@ -12,6 +12,8 @@
GNU = YES
CMPLR_CLASS = gcc
GNU_BIN = $(GNU_DIR)/bin
GNU_LIB = $(GNU_DIR)/lib

View File

@@ -133,11 +133,14 @@ POSIX_YES = os/posix
GENERIC_SRC_DIRS = .. $(SRC_DIRS)
OS_SRC_DIRS += . $(foreach dir, .. $(SRC_DIRS), \
$(addprefix $(dir)/, os/$(OS_CLASS) $(POSIX_$(POSIX)) os/default ))
ALL_SRC_DIRS = $(OS_SRC_DIRS) $(GENERIC_SRC_DIRS)
CMPLR_SRC_DIRS += . $(foreach dir, .. $(SRC_DIRS), \
$(addprefix $(dir)/, compiler/$(CMPLR_CLASS) compiler/default ))
ALL_SRC_DIRS = $(CMPLR_SRC_DIRS) $(OS_SRC_DIRS) $(GENERIC_SRC_DIRS)
#--------------------------------------------------
# compile line include directories
INSTALL_INCLUDES += \
-I$(INSTALL_INCLUDE)/compiler/$(CMPLR_CLASS) \
-I$(INSTALL_INCLUDE)/os/$(OS_CLASS) \
-I$(INSTALL_INCLUDE)
SRC_INCLUDES = -I$(COMMON_DIR) $(addprefix -I, $(wildcard $(ALL_SRC_DIRS)))
@@ -379,24 +382,35 @@ INSTALL_PERMISSIONS = 444
#
# auto determine the directory paths that things are installed to
# RULES:
# 1) found in any one of several os specific area
# 0) found in any one of several compiler specific paths
# => install to $(INSTALL_INCLUDE)/compiler/$(CMPLR_CLASS)
# 1) not found in (0) and found in any one of several OS specific paths
# => install to $(INSTALL_INCLUDE)/os/$(OS_CLASS)
# 2) not foundin (1) and found in generic area
# 2) not found in (1) and found in generic paths
# => install to $(INSTALL_INCLUDE)
# 3) not found in (1) or (2) then may be (not yet) computer generated
# => install into $(INSTALL_INCLUDE)/os/$(OS_CLASS) and let
# build rules work on vpath
#
# These rules guarantee that the users include from
# no more than two directories
# no more than three directories
#
INSTALL_INC += $(foreach inc, $(INC), \
$(firstword \
$(CMPLR_INSTALL_INC) \
$(OS_INSTALL_INC) \
$(GENERIC_INSTALL_INC) \
$(GENERATED_INSTALL_INC) ) )
INSTALL_INC += $(addprefix $(INSTALL_INCLUDE)/os/$(OS_CLASS)/, $(INC_$(OS_CLASS)) )
#
# Rule 0
#
CMPLR_INSTALL_INC = $(addprefix $(INSTALL_INCLUDE)/compiler/$(CMPLR_CLASS)/, $(INSTALL_INC_jjj) )
INSTALL_INC_jjj = $(foreach dir, $(CMPLR_SRC_DIRS), $(INSTALL_INC_iii) )
INSTALL_INC_iii = $(subst $(dir)/, , $(INSTALL_INC_hhh) )
INSTALL_INC_hhh = $(wildcard $(addsuffix /$(inc), $(dir)) )
#
# Rule 1
#

View File

@@ -408,7 +408,11 @@ $(INSTALL_INCLUDE)/% : %
@$(INSTALL) -d -m $(INSTALL_PERMISSIONS) $< $(@D)
$(INSTALL_INCLUDE)/os/$(OS_CLASS)/% : %
$(ECHO) "Installing os dependent include file $@"
$(ECHO) "Installing OS dependent include file $@"
@$(INSTALL) -d -m $(INSTALL_PERMISSIONS) $< $(@D)
$(INSTALL_INCLUDE)/compiler/$(CMPLR_CLASS)/% : %
$(ECHO) "Installing compiler dependent include file $@"
@$(INSTALL) -d -m $(INSTALL_PERMISSIONS) $< $(@D)
$(INSTALL_DOC)/%: %

View File

@@ -7,6 +7,8 @@
# Sites may override these definitions in CONFIG_SITE.solaris-sparc.solaris-sparc
#-------------------------------------------------------
CMPLR_CLASS = solStudio
SPARCWORKS = /opt/SUNWspro
GNU = NO

View File

@@ -7,6 +7,8 @@
# Sites may override these definitions in CONFIG_SITE.win32-x86-borland.win32-x86-borland
#-------------------------------------------------------
CMPLR_CLASS = borland
# Win32 valid build types and include directory suffixes
VALID_BUILDS = Host Ioc

View File

@@ -11,6 +11,8 @@
VALID_BUILDS = Host Ioc
CMPLR_CLASS = msvc
# convert UNIX path to native path
PATH_FILTER = $(subst /,\\,$(1))

View File

@@ -14,10 +14,9 @@ ARCH_CLASS = i386
#ARCH_CLASS = x86_64
#ARCH_CLASS = i386 x86_64
#
# Uncomment the followings lines to build with CLANG instead of GCC.
#
#CC = clang
#CCC = clang++
#GNU_LDLIBS_YES =
#GNU = NO
#CMPLR_CLASS = clang
#CC = clang
#CCC = clang++

View File

@@ -34,9 +34,9 @@ COMMANDLINE_LIBRARY = READLINE
OP_SYS_CFLAGS += -g
# Some Linux distributions provide clang as an alternative to GCC.
# To use clang if you have it, uncomment these three lines:
#CC = clang
#CCC = clang++
#GNU_LDLIBS_YES =
# Uncomment the followings lines to build with CLANG instead of GCC.
#
#GNU = NO
#CMPLR_CLASS = clang
#CC = clang
#CCC = clang++

View File

@@ -34,9 +34,9 @@ COMMANDLINE_LIBRARY = READLINE
OP_SYS_CFLAGS += -g
# Some Linux distributions provide clang as an alternative to GCC.
# To use clang if you have it, uncomment these three lines:
#CC = clang
#CCC = clang++
#GNU_LDLIBS_YES =
# Uncomment the followings lines to build with CLANG instead of GCC.
#
#GNU = NO
#CMPLR_CLASS = clang
#CC = clang
#CCC = clang++

View File

@@ -1,104 +0,0 @@
/*************************************************************************\
* Copyright (c) 2008 UChicago Argonne LLC, as Operator of Argonne
* National Laboratory.
* Copyright (c) 2002 The Regents of the University of California, as
* Operator of Los Alamos National Laboratory.
* EPICS BASE is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
\*************************************************************************/
/*
* Author:
* Jeffrey O. Hill
* johill@lanl.gov
*/
#ifndef compilerDependencies_h
#define compilerDependencies_h
/*
* This is an attempt to move all tests identifying what features a
* compiler supports into one file.
*
* Since this is a compiler, and not os dependent, issue then ifdefs
* are used. The ifdefs allow us to make the default assumption that
* standards incompliance issues will be fixed by future compiler
* releases.
*/
#ifdef __cplusplus
/*
* CXX_PLACEMENT_DELETE - defined if compiler supports placement delete
* CXX_THROW_SPECIFICATION - defined if compiler supports throw specification
*/
#if defined ( _MSC_VER )
# if _MSC_VER >= 1200 /* visual studio 6.0 or later */
# define CXX_PLACEMENT_DELETE
# endif
# if _MSC_VER > 1300 /* some release after visual studio 7 we hope */
# define CXX_THROW_SPECIFICATION
# endif
#elif defined ( __HP_aCC )
# if _HP_aCC > 33300
# define CXX_PLACEMENT_DELETE
# endif
# define CXX_THROW_SPECIFICATION
#elif defined ( __BORLANDC__ )
# if __BORLANDC__ >= 0x600
# define CXX_PLACEMENT_DELETE
# endif
# define CXX_THROW_SPECIFICATION
#elif defined ( __GNUC__ )
# if __GNUC__ > 2 || ( __GNUC__ == 2 && __GNUC_MINOR__ >= 95 )
# define CXX_THROW_SPECIFICATION
# endif
# if __GNUC__ > 2 || ( __GNUC__ == 2 && __GNUC_MINOR__ >= 96 )
# define CXX_PLACEMENT_DELETE
# endif
#else
# define CXX_PLACEMENT_DELETE
# define CXX_THROW_SPECIFICATION
#endif
/*
* usage: void func () epicsThrows (( std::bad_alloc, std::logic_error ))
*/
#if defined ( CXX_THROW_SPECIFICATION )
# define epicsThrows(X) throw X
#else
# define epicsThrows(X)
#endif
/*
* usage: epicsPlacementDeleteOperator (( void *, myMemoryManager & ))
*/
#if defined ( CXX_PLACEMENT_DELETE )
# define epicsPlacementDeleteOperator(X) void operator delete X;
#else
# define epicsPlacementDeleteOperator(X)
#endif
#endif /* __cplusplus */
/*
* Enable format-string checking if possible
*/
#ifdef __GNUC__
# define EPICS_PRINTF_STYLE(f,a) __attribute__((format(__printf__,f,a)))
#else
# define EPICS_PRINTF_STYLE(f,a)
#endif
/*
* Deprecation marker
*/
#if defined( __GNUC__ ) && (__GNUC__ > 2)
# define EPICS_DEPRECATED __attribute__((deprecated))
#else
# define EPICS_DEPRECATED
#endif
#endif /* ifndef compilerDependencies_h */

View File

@@ -8,6 +8,10 @@
# This is a Makefile fragment, see src/libCom/Makefile.
SRC_DIRS += $(LIBCOM)/osi
INC += compilerDependencies.h
INC += compilerSpecific.h
INC += osiFileName.h
INC += osiSock.h
INC += osdSock.h

View File

@@ -0,0 +1,45 @@
/*************************************************************************\
* Copyright (c) 2008 UChicago Argonne LLC, as Operator of Argonne
* National Laboratory.
* Copyright (c) 2002 The Regents of the University of California, as
* Operator of Los Alamos National Laboratory.
* EPICS BASE is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
\*************************************************************************/
/*
* Author:
* Jeffrey O. Hill
* johill@lanl.gov
*/
#ifndef compilerSpecific_h
#define compilerSpecific_h
#ifndef __BORLANDC__
# error compiler/borland/compilerSpecific.h is only for use with the Borland compiler
#endif
#ifdef __cplusplus
/*
* in general we dont like ifdefs but they do allow us to check the
* compiler version and make the optimistic assumption that
* standards incompliance issues will be fixed by future compiler
* releases
*/
/*
* CXX_PLACEMENT_DELETE - defined if compiler supports placement delete
* CXX_THROW_SPECIFICATION - defined if compiler supports throw specification
*/
#if __BORLANDC__ >= 0x600
# define CXX_PLACEMENT_DELETE
#endif
#define CXX_THROW_SPECIFICATION
#endif /* __cplusplus */
#endif /* ifndef compilerSpecific_h */

View File

@@ -0,0 +1,49 @@
/*************************************************************************\
* Copyright (c) 2008 UChicago Argonne LLC, as Operator of Argonne
* National Laboratory.
* Copyright (c) 2002 The Regents of the University of California, as
* Operator of Los Alamos National Laboratory.
* EPICS BASE is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
\*************************************************************************/
/*
* Author:
* Jeffrey O. Hill
* johill@lanl.gov
*/
#ifndef compilerSpecific_h
#define compilerSpecific_h
#ifndef __clang__
# error compiler/clang/compilerSpecific.h is only for use with the clang compiler
#endif
#ifdef __cplusplus
/*
* CXX_PLACEMENT_DELETE - defined if compiler supports placement delete
* CXX_THROW_SPECIFICATION - defined if compiler supports throw specification
*/
#define CXX_PLACEMENT_DELETE
#define CXX_THROW_SPECIFICATION
#endif /* __cplusplus */
/*
* __has_attribute() is not supported on all versions of clang yet
*/
/*
* Enable format-string checking
*/
#define EPICS_PRINTF_STYLE(f,a) __attribute__((format(__printf__,f,a)))
/*
* Deprecation marker
*/
#define EPICS_DEPRECATED __attribute__((deprecated))
#endif /* ifndef compilerSpecific_h */

View File

@@ -0,0 +1,33 @@
/*************************************************************************\
* Copyright (c) 2008 UChicago Argonne LLC, as Operator of Argonne
* National Laboratory.
* Copyright (c) 2002 The Regents of the University of California, as
* Operator of Los Alamos National Laboratory.
* EPICS BASE is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
\*************************************************************************/
/*
* Author:
* Jeffrey O. Hill
* johill@lanl.gov
*/
#ifndef compilerSpecific_h
#define compilerSpecific_h
#ifdef __cplusplus
/*
* CXX_PLACEMENT_DELETE - defined if compiler supports placement delete
* CXX_THROW_SPECIFICATION - defined if compiler supports throw specification
*
* (our default guess is that the compiler implements the C++ 97 standard)
*/
#define CXX_THROW_SPECIFICATION
#define CXX_PLACEMENT_DELETE
#endif /* __cplusplus */
#endif /* ifndef compilerSpecific_h */

View File

@@ -0,0 +1,64 @@
/*************************************************************************\
* Copyright (c) 2008 UChicago Argonne LLC, as Operator of Argonne
* National Laboratory.
* Copyright (c) 2002 The Regents of the University of California, as
* Operator of Los Alamos National Laboratory.
* EPICS BASE is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
\*************************************************************************/
/*
* Author:
* Jeffrey O. Hill
* johill@lanl.gov
*/
#ifndef compilerSpecific_h
#define compilerSpecific_h
#ifndef __GNUC__
# error compiler/gcc/compilerSpecific.h is only for use with the gnu compiler
#endif
#ifdef __clang__
# error compiler/gcc/compilerSpecific.h is not for use with the clang compiler
#endif
#ifdef __cplusplus
/*
* in general we dont like ifdefs but they do allow us to check the
* compiler version and make the optimistic assumption that
* standards incompliance issues will be fixed by future compiler
* releases
*/
/*
* CXX_PLACEMENT_DELETE - defined if compiler supports placement delete
* CXX_THROW_SPECIFICATION - defined if compiler supports throw specification
*/
#if __GNUC__ > 2 || ( __GNUC__ == 2 && __GNUC_MINOR__ >= 95 )
# define CXX_THROW_SPECIFICATION
#endif
#if __GNUC__ > 2 || ( __GNUC__ == 2 && __GNUC_MINOR__ >= 96 )
# define CXX_PLACEMENT_DELETE
#endif
#endif /* __cplusplus */
/*
* Enable format-string checking if possible
*/
#define EPICS_PRINTF_STYLE(f,a) __attribute__((format(__printf__,f,a)))
/*
* Deprecation marker if possible
*/
#if (__GNUC__ > 2)
# define EPICS_DEPRECATED __attribute__((deprecated))
#endif
#endif /* ifndef compilerSpecific_h */

View File

@@ -0,0 +1,47 @@
/*************************************************************************\
* Copyright (c) 2008 UChicago Argonne LLC, as Operator of Argonne
* National Laboratory.
* Copyright (c) 2002 The Regents of the University of California, as
* Operator of Los Alamos National Laboratory.
* EPICS BASE is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
\*************************************************************************/
/*
* Author:
* Jeffrey O. Hill
* johill@lanl.gov
*/
#ifndef compilerSpecific_h
#define compilerSpecific_h
#ifndef _MSC_VER
# error compiler/msvc/compilerSpecific.h is only for use with the Microsoft compiler
#endif
#ifdef __cplusplus
/*
* in general we dont like ifdefs but they do allow us to check the
* compiler version and make the optimistic assumption that
* standards incompliance issues will be fixed by future compiler
* releases
*/
/*
* CXX_PLACEMENT_DELETE - defined if compiler supports placement delete
* CXX_THROW_SPECIFICATION - defined if compiler supports throw specification
*/
#if _MSC_VER >= 1200 /* visual studio 6.0 or later */
# define CXX_PLACEMENT_DELETE
#endif
#if _MSC_VER > 1300 /* some release after visual studio 7 we hope */
# define CXX_THROW_SPECIFICATION
#endif
#endif /* __cplusplus */
#endif /* ifndef compilerSpecific_h */

View File

@@ -0,0 +1,62 @@
/*************************************************************************\
* Copyright (c) 2008 UChicago Argonne LLC, as Operator of Argonne
* National Laboratory.
* Copyright (c) 2002 The Regents of the University of California, as
* Operator of Los Alamos National Laboratory.
* EPICS BASE is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
\*************************************************************************/
/*
* Author:
* Jeffrey O. Hill
* johill@lanl.gov
*/
#ifndef compilerDependencies_h
#define compilerDependencies_h
#include "compilerSpecific.h"
#ifdef __cplusplus
/*
* usage: void func () epicsThrows (( std::bad_alloc, std::logic_error ))
*
* Note: now a widely accepted concensus (ref Meyers and C++ faq) is that
* one should avoid using throw specifications in C++ code
*/
#if defined ( CXX_THROW_SPECIFICATION )
# define epicsThrows(X) throw X
#else
# define epicsThrows(X)
#endif
/*
* usage: epicsPlacementDeleteOperator (( void *, myMemoryManager & ))
*/
#if defined ( CXX_PLACEMENT_DELETE )
# define epicsPlacementDeleteOperator(X) void operator delete X;
#else
# define epicsPlacementDeleteOperator(X)
#endif
#endif /* __cplusplus */
#ifndef EPICS_PRINTF_STYLE
/*
* No format-string checking
*/
# define EPICS_PRINTF_STYLE(f,a)
#endif
#ifndef EPICS_DEPRECATED
/*
* No deprecation markers
*/
#define EPICS_DEPRECATED
#endif
#endif /* ifndef compilerDependencies_h */