Compare commits

...

50 Commits

Author SHA1 Message Date
b0ca8915b5 Merge remote-tracking branch 'origin/develop' 2017-03-17 20:44:25 -05:00
0d56819d68 Switch VS versions post 2015 to CL version. 2017-03-17 11:11:30 -05:00
b6910fb493 Merge branch 'develop' 2017-02-23 10:33:37 -06:00
822d09f19b Fix Intel C/C++ compiler version specification.
Add `BOOST_VERSION_NUMBER_MAJOR`, `BOOST_VERSION_NUMBER_MINOR`,
`BOOST_VERSION_NUMBER_PATCH` macros to extract components from valid
version numbers.
2017-01-03 22:07:48 -06:00
e7e3a2ac38 Document and cleanup Appveyor build spec. 2016-11-19 16:18:44 -06:00
eaccac21dc Back to just the boost repo in the cache. 2016-11-19 09:51:01 -06:00
3c2d8bdb47 Try and tweak the cache settings to get a valid git repo back. 2016-11-18 19:15:24 -06:00
5111859be2 Lets see if the cache works on Travis. 2016-11-18 18:54:23 -06:00
4f9b045d74 Try and directly add git subtree to see if it makes the cache work. 2016-11-18 13:24:47 -06:00
af39447f70 First attempt at caching with Appveyor. 2016-11-18 09:37:47 -06:00
72e2f8c288 Reduce Xcode builds to the new smaller set Travis supports. 2016-11-17 16:04:13 -06:00
dc9b143061 Clean up and document Travis setup. 2016-11-17 13:24:58 -06:00
5393bee297 Make sure we run on trusty and add all clang versions for Travis. 2016-11-13 14:24:03 -06:00
6cc5e91e7c Add g++-6 testing. 2016-11-13 09:22:08 -06:00
99bcba4ff9 Test plain gcc-5 toolset. 2016-11-13 08:14:28 -06:00
d39d1b9dc4 Add current Xcode versions for testing. 2016-11-12 17:31:12 -06:00
0fb2c586b0 Switch Appveyor CI to latest generic testing scripts. 2016-11-10 23:37:38 -06:00
3680a040a2 Switch CI testing script to latest generic version. 2016-11-09 23:34:23 -06:00
ca4d2f3288 Add, and update, documentation build targets. 2016-10-10 11:39:52 -05:00
06f6303d16 Add, and update, documentation build targets. 2016-10-07 23:07:35 -05:00
2a2386c6d6 Merge remote-tracking branch 'origin/develop' 2016-07-22 12:58:13 -05:00
eabda26cc9 Assign doc ID and dir for consistent URLs. 2016-07-22 09:07:35 -05:00
bab16e199b Follow library naming requirement for docs. 2016-07-22 09:02:21 -05:00
41957f466f Ignore locally generated docs to avoid accidental commits. 2016-07-22 08:31:13 -05:00
43e6ec9493 Remove pre-built docs now that they are part of the global docs. 2016-07-22 08:28:05 -05:00
dde19914bc Merge branch 'develop' 2016-07-21 19:43:39 -05:00
0c0d35857c Update documentation.. In prep for linking into general Boost
documentation.
2016-07-19 10:29:25 -05:00
347e7dfdc5 Merge pull request #46 from eldiener/develop
Fixed bug in rule for when a version number in a predef expression is…
2016-06-03 21:16:05 -05:00
abb1e4850d Fixed bug in rule for when a version number in a predef expression is given using two parts. 2016-06-03 17:31:41 -04:00
3c9f3a518a Merge pull request #45 from NumScale/fix_doc_hw_simd_x86_amd
Fix SIMD documentation for AMD family
2016-06-02 08:58:34 -05:00
6fcc7bb1a2 Fix SIMD documentation for AMD family 2016-06-02 11:31:57 +02:00
1e8d1c2cfc Merge pull request #44 from boostorg/develop
Fix XSL boost root path.
2016-03-03 14:26:42 -06:00
afb272298a Fix XSL boost root path.
When the Predef local docs are generated for release links, images, css looks missing because the boost.root doesn't go far enough up the hierarchy.
2016-03-03 10:23:22 -06:00
815e493e7f Merge pull request #43 from boostorg/develop
Merge 1.4.1 release.
2016-02-17 12:56:10 -06:00
ee38c7c65d Update lib version to 1.4.1 for replease. 2016-02-17 09:45:31 -06:00
a5e8c991c1 Merge pull request #42 from awulkiew/patch-1
Suppress 'undefined macro' warnings.
2016-01-25 09:05:53 -06:00
1867ea911c Suppress 'undefined macro' warnings. 2016-01-25 14:55:36 +01:00
009367d6a1 Conform to latest library requirements. 2016-01-07 12:50:26 -06:00
0f70c3578a Explicitly state linux build requirements to hopefully avoid future
stall problems on Travis-CI.
2015-12-22 14:26:35 -06:00
afedd8077c Add Travis-CI xcode 7.2 testing. 2015-12-22 09:09:44 -06:00
377f96bc14 Merge pull request #39 from NumScale/simd_fix_x86_predef_redefinition_and_fix_doc
Fix SIMD x86 predef redefinition (on AMD cpus) and fix doc
2015-12-08 10:25:38 -06:00
c4bebf10ef Fix SIMD documentation for FMA4 2015-12-08 11:14:53 +01:00
1b27540a96 Fix redefinition of BOOST_HW_SIMD for x86 (AMD) 2015-12-08 11:14:46 +01:00
8f5fcf9bdf Fix typo in SIMD predefs ocumentation (x86 -> X86) 2015-12-08 10:46:05 +01:00
bbddc9fbbf Add all xcode versions supported by Travis to testing. 2015-12-07 10:03:09 -06:00
f825a53329 ANother attempt at adding xcode/osx testing. 2015-12-04 13:44:32 -06:00
4515b465f7 Remove main args to avoid unused arg warnings (and possibly forced
errors).
2015-11-19 14:26:41 -06:00
b38474d0ee Remove unused main args as they will cause warnings for some setups (and
possibly errors).
2015-11-14 20:52:44 -06:00
d0b01486a5 Merge pull request #36 from hamparawa/develop
fixed a typo in BOOST_OS_CYGWIN macro
2015-10-20 07:10:32 -05:00
177a6ca792 fixed a typo in BOOST_OS_CYGWIN macro 2015-10-20 14:23:12 +05:30
87 changed files with 522 additions and 11203 deletions

View File

@ -1,36 +1,98 @@
language: cpp
# Use, modification, and distribution are
# subject to the Boost Software License, Version 1.0. (See accompanying
# file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
#
# Copyright Rene Rivera 2015-2016.
# Setting up notifications like this is optional as the default behavior
# of Travis is to notify the commiter of problems. But setting a specific
# recipient this way ensures you get all the communications about the
# builds.
notifications:
email:
recipients:
- grafikrobot@gmail.com
on_success: change
on_failure: change
irc:
channels:
- "chat.freenode.net#boost"
template:
- "%{repository}/%{branch} (%{commit} - %{author}): %{build_url}: %{message}"
on_success: change
on_failure: change
os:
- linux
# For now the CI scripts only support the two main branches available
# on the boost super-project.
branches:
only:
- master
- develop
# We specify a generic language instead of C++ as Travis sets up
# additional environment vars that point to its default toolset
# instead of the one we install. The extra env doesn't interfere,
# but at the same time it's misleading. So to avoid confusion and
# possible unseen side effects we stick with no C++ default setup.
language: generic
# Speficy the default as Linux here, to avoid duplication in the matrix
# below. We use Trausty as that's the latest we can use. And it's better
# supported by the whole range of C++ toolsets we like to test on.
dist: trusty
os: linux
# Because we install our own toolsets and other software we need
# to run the sudo support.
sudo: required
# Travis has a long standing bug with their rather complicated
# build matrix evaluation that causes empty jobs to be created.
# This global matrix entry in combination with the exclusion
# below works around that bug. This is the suggested fix from
# the Travis support people.
env:
matrix:
- TRAVIS_EMPTY_JOB_WORKAROUND=true
# This lists all the toolsets we will test with the Boost CI
# scripts. Predef needs to check all of them as its job is to
# distiguish between all of them. For other libraries you would
# want to limit the list to the toolsets that are important
# for that.
matrix:
exclude:
- env: TRAVIS_EMPTY_JOB_WORKAROUND=true
include:
- env: TOOLSET=clang-3.4
- env: TOOLSET=clang-3.5
- env: TOOLSET=clang-3.6
- env: TOOLSET=clang-3.7
- env: TOOLSET=clang-3.8
- env: TOOLSET=clang-3.9
- env: TOOLSET=gcc-4.7
- env: TOOLSET=gcc-4.8
- env: TOOLSET=gcc-4.9
- env: TOOLSET=gcc-5.1
- env: TOOLSET=gcc-5
- env: TOOLSET=gcc-6
- env: TOOLSET=xcode-6.1
os: osx
- env: TOOLSET=xcode-6.4
os: osx
osx_image: xcode6.4
- env: TOOLSET=xcode-7.3
os: osx
osx_image: xcode7.3
- env: TOOLSET=xcode-8.0
os: osx
osx_image: xcode8
before_install: wget "https://raw.githubusercontent.com/boostorg/regression/develop/ci/src/script.py"
install: python script.py install
before_script: python script.py before_script
script: python script.py script
after_success: python script.py after_success
after_failure: python script.py after_failure
after_script: python script.py after_script
# These are the standard steps to bootstrap the Boost CI scripts
# and to forward the actions to the scripts.
before_install:
# Fetch the scripts to do the actual building/testing.
- |
wget "https://raw.githubusercontent.com/boostorg/regression/develop/ci/src/ci_boost_common.py" -P ..
wget "https://raw.githubusercontent.com/boostorg/regression/develop/ci/src/ci_boost_library_test.py" -P ..
install: python "${TRAVIS_BUILD_DIR}/../ci_boost_library_test.py" install
before_script: python "${TRAVIS_BUILD_DIR}/../ci_boost_library_test.py" before_script
script: python "${TRAVIS_BUILD_DIR}/../ci_boost_library_test.py" script
before_cache: python "${TRAVIS_BUILD_DIR}/../ci_boost_library_test.py" before_cache
after_success: python "${TRAVIS_BUILD_DIR}/../ci_boost_library_test.py" after_success
after_failure: python "${TRAVIS_BUILD_DIR}/../ci_boost_library_test.py" after_failure
after_script: python "${TRAVIS_BUILD_DIR}/../ci_boost_library_test.py" after_script
cache:
directories:
- $HOME/boostorg/boost

View File

@ -1,10 +1,29 @@
# Use, modification, and distribution are
# subject to the Boost Software License, Version 1.0. (See accompanying
# file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
#
# Copyright Rene Rivera 2015-2016.
# Set up notifications so that the maintainers of the library get
# build status messages.
notifications:
- provider: Email
to:
- grafikrobot@gmail.com
on_build_status_changed: true
# This lists all the toolsets we will test with the Boost CI
# scripts. Predef needs to check all of them as its job is to
# distiguish between all of them. For other libraries you would
# want to limit the list to the toolsets that are important
# for that.
#
# This also includes setting up how to create the cache. We
# opt for slightly better compression and solid archives.
# As we have a lot of files in the boost tree which is what
# we are putting in the cache.
environment:
APPVEYOR_CACHE_ENTRY_ZIP_ARGS: -t7z -m0=lzma2 -mx=3
matrix:
- TOOLSET: vs-2008
platform: 32
@ -21,22 +40,33 @@ environment:
- TOOLSET: vs-2015
platform: 64
# We can also set up configurations for testing which map to
# the b2 build variants.
configuration:
- debug
- release
# These are the standard steps to bootstrap the Boost CI scripts
# and to forward the actions to the scripts.
init:
# Fetch the scripts to do the actual building/testing.
- cd %APPVEYOR_BUILD_FOLDER%/..
- appveyor DownloadFile "https://raw.githubusercontent.com/boostorg/regression/develop/ci/src/script.py"
- dir
- appveyor DownloadFile "https://raw.githubusercontent.com/boostorg/regression/develop/ci/src/ci_boost_common.py"
- appveyor DownloadFile "https://raw.githubusercontent.com/boostorg/regression/develop/ci/src/ci_boost_library_test.py"
- cd %APPVEYOR_BUILD_FOLDER%
install: python ../script.py install
before_build: python ../script.py before_build
build_script: python ../script.py build_script
after_build: python ../script.py after_build
before_test: python ../script.py before_test
test_script: python ../script.py test_script
after_test: python ../script.py after_test
on_success: python ../script.py on_success
on_failure: python ../script.py on_failure
on_finish: python ../script.py on_finish
install: python ../ci_boost_library_test.py install
before_build: python ../ci_boost_library_test.py before_build
build_script: python ../ci_boost_library_test.py build_script
after_build: python ../ci_boost_library_test.py after_build
before_test: python ../ci_boost_library_test.py before_test
test_script: python ../ci_boost_library_test.py test_script
after_test: python ../ci_boost_library_test.py after_test
on_success: python ../ci_boost_library_test.py on_success
on_failure: python ../ci_boost_library_test.py on_failure
on_finish: python ../ci_boost_library_test.py on_finish
# We cache the boost repo, which is cleaned before caching.
# This saves some time as cloning the git submodules fresh
# takes a few minutes on Windows.
cache:
- C:\projects\boostorg\boost -> appveyor.yml

View File

@ -1,202 +1,17 @@
# Copyright Rene Rivera 2015
# Copyright Rene Rivera 2016
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or copy at
# http://www.boost.org/LICENSE_1_0.txt)
# Defines rules that provide requirements based on checking
# conditions using Boost Predef definitions and version numbers.
# Hack, to reload check/predef.jam at its new location.
import modules ;
import project ;
import feature ;
import string ;
import toolset ;
import modules ;
import path ;
import "class" : new ;
import regex ;
# Create a project for our targets.
project.extension predef check ;
# Feature to pass check expressions to check programs.
feature.feature predef-expression : : free ;
# Checks the expressions and when used evaluates to the true-properties
# if the expressions are all true. Otherwise evaluates to the
# false-properties.
rule check ( expressions + : language ? : true-properties * : false-properties * )
local _loaded_ ;
for local _module_ in [ modules.peek modules : .loaded ]
{
# Default to C++ on the check context.
language ?= cpp ;
local project_target = [ project.target $(__name__) ] ;
project.push-current $(project_target) ;
local terms ;
local result ;
for expression in $(expressions)
if $(_module_) != "predef"
{
if $(expression:L) in "and" "or"
{
terms += $(expression:L) ;
}
else
{
# Create the check run if we don't have one yet.
local key = [ MD5 $(language)::$(expression) ] ;
if ! ( $(key) in $(_checks_) )
{
_checks_ += $(key) ;
_message_(/check/predef//predef_check_cc_$(key)) = $(expression) ;
check_target $(language) $(key) : [ change_term_to_def $(expression) ] ;
}
terms += /check/predef//predef_check_cc_$(key) ;
}
}
local instance = [ new check-expression-evaluator
$(terms) : $(true-properties) : $(false-properties) ] ;
result = <conditional>@$(instance).check ;
project.pop-current ;
return $(result) ;
}
# Checks the expressions and when used evaluates to <build>no
# if the expressions are all false. Otherwise evaluates to the
# nothing.
rule require ( expressions + : language ? )
{
return [ check $(expressions) : $(language) : : <build>no ] ;
}
#############################################################################
.c.ext = c ;
.cpp.ext = cpp ;
.objc.ext = m ;
.objcpp.ext = mm ;
# Check targets. Each needs to be compiled for different languages
# even though they are all the same source code.
local rule check_target ( language key : requirements * )
{
# Need to use absolute paths because we don't know the
# context of the invocation which affects where the paths
# originate from.
local predef_jam
= [ modules.binding $(__name__) ] ;
local source_path
= $(predef_jam:D)/predef_check_cc_as_$(language).$(.$(language).ext) ;
local include_path
= $(predef_jam:D)/../include ;
obj predef_check_cc_$(key)
: $(source_path)
: <include>$(include_path) $(requirements) ;
explicit predef_check_cc_$(key) ;
return predef_check_cc_$(key) ;
}
local rule change_term_to_def ( term )
{
local parts = [ regex.split $(term) " " ] ;
if $(parts[3])
{
local version_number = [ regex.split $(parts[3]) "[.]" ] ;
if ! $(version_number[3]) { version_number += "0" ; }
if ! $(version_number[3]) { version_number += "0" ; }
parts = $(parts[1-2]) BOOST_VERSION_NUMBER($(version_number:J=",")) ;
}
return <define>CHECK=\"$(parts:J=" ")\" ;
}
class check-expression-evaluator
{
import configure ;
rule __init__ ( expression + : true-properties * : false-properties * )
{
self.expression = $(expression) ;
self.true-properties = $(true-properties) ;
self.false-properties = $(false-properties) ;
}
rule check ( properties * )
{
local to-eval ;
local tokens = "and" "or" ;
# Go through the expression and: eval the target values,
# and normalize to a full expression.
for local term in $(self.expression)
{
if ! ( $(term:L) in $(tokens) )
{
# A value is a target reference that will evan to "true"
# or "false".
if $(to-eval[-1]:L) && ! ( $(to-eval[-1]:L) in $(tokens) )
{
# Default to "and" operation.
to-eval += "and" ;
}
local message = [ modules.peek predef : _message_($(term)) ] ;
if [ configure.builds $(term) : $(properties) : $(message) ]
{
to-eval += "true" ;
}
else
{
to-eval += "false" ;
}
}
else
{
to-eval += $(term) ;
}
}
# Eval full the expression.
local eval-result = [ eval $(to-eval) ] ;
# And resolve true/false properties.
if $(eval-result) = "true"
{
return $(self.true-properties) ;
}
else
{
return $(self.false-properties) ;
}
}
rule eval ( e * )
{
local r ;
if $(e[1]) && $(e[2]) && $(e[3])
{
if $(e[2]) = "and"
{
if $(e[1]) = "true" && $(e[3]) = "true"
{
r = [ eval "true" $(e[4-]) ] ;
}
else
{
r = [ eval "false" $(e[4-]) ] ;
}
}
else if $(e[2]) = "or"
{
if $(e[1]) = "true" || $(e[3]) = "true"
{
r = [ eval "true" $(e[4-]) ] ;
}
else
{
r = [ eval "false" $(e[4-]) ] ;
}
}
}
else
{
r = $(e[1]) ;
}
return $(r) ;
_loaded_ += $(_module_) ;
}
}
modules.poke modules : .loaded : $(_loaded_) ;
import ../tools/check/predef ;

1
doc/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/html/

View File

@ -1,4 +1,4 @@
# Copyright Rene Rivera 2011
# Copyright Rene Rivera 2011-2016
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or copy at
# http://www.boost.org/LICENSE_1_0.txt)
@ -23,6 +23,9 @@ else
local BOOST_PREDEF_HEADERS = [ path.glob-tree $(BOOST_PREDEF_INCLUDE_ROOT)/boost/predef : *.h ] ;
# Intermediate targets..
# Quickbok to boostbook target.
xml predef
:
predef.qbk
@ -32,11 +35,20 @@ xml predef
;
explicit predef ;
# HTML dependencies for standalone docs.
install images : [ glob $(BOOST_ROOT)/doc/src/images/*.png ] : <location>html/images ;
explicit images ;
install callouts : [ glob $(BOOST_ROOT)/doc/src/images/callouts/*.png ] : <location>html/images/callouts ;
explicit callouts ;
install css : [ glob $(BOOST_ROOT)/doc/src/*.css ] : <location>html ;
explicit css ;
# Default target builds standalone docs.
boostbook standalone
:
predef
:
<xsl:param>boost.root=../../..
<xsl:param>boost.root=../../../..
#<xsl:param>generate.section.toc.level=3
<xsl:param>chunk.section.depth=2
<xsl:param>chunk.first.sections=1
@ -46,9 +58,43 @@ boostbook standalone
<dependency>css
;
install images : [ glob $(BOOST_ROOT)/doc/src/images/*.png ] : <location>html/images ;
explicit images ;
install callouts : [ glob $(BOOST_ROOT)/doc/src/images/callouts/*.png ] : <location>html/images/callouts ;
explicit callouts ;
install css : [ glob $(BOOST_ROOT)/doc/src/*.css ] : <location>html ;
explicit css ;
###############################################################################
### Targets for Boost release integration.
###############################################################################
# Target for Boost global documentation integration.
#
# For documentation that will be integrated into the global documentation
# this should be an alias similar to:
#
# alias boostdoc : my_lib : : : <implicit-dependency>my_lib_boostbook_xml ;
# explicit boostdoc ;
#
# For documentation that is not part of the global documentation, i.e.
# it has stadalone documentation, it should be an empty alias:
#
# alias boostdoc ;
# explicit boostdoc ;
#
alias boostdoc : predef ;
explicit boostdoc ;
# Target for Boost standalone release documentation building.
#
# For documentation that is not part of the global Boost documentation
# this should be an alias to building the "standalone" documentation.
# Usual this is just an alias to a "stadalone" target:
#
# alias boostrelease : stadalone ;
# explicit boostrelease ;
#
# For documentation that is part of the global Boost documentation this
# should be an empty alias:
#
# alias boostrelease ;
# explicit boostrelease ;
#
alias boostrelease ;
explicit boostrelease ;
###############################################################################

View File

@ -1,5 +1,5 @@
[/
Copyright 2014-2015 Rene Rivera
Copyright 2014-2016 Rene Rivera
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or copy at
http://www.boost.org/LICENSE_1_0.txt)
@ -7,6 +7,20 @@ http://www.boost.org/LICENSE_1_0.txt)
[section History]
[heading 1.5]
* Fix Intel C/C++ compiler version specification.
* Add `BOOST_VERSION_NUMBER_MAJOR`, `BOOST_VERSION_NUMBER_MINOR`,
`BOOST_VERSION_NUMBER_PATCH` macros to extract components from valid version
numbers.
* Change VS version numbering. Version after VS2015 will use the compiler
version instead of the varied product versions.
[heading 1.4.1]
* Small fixes for some redefinition errors, and mispelled macros.
* Slightly rearrangement of structure to comply with current library requirements.
[heading 1.4]
* Add detection of SIMD hardware. With the addition of the `BOOST_HW_*`

4
doc/html/.gitignore vendored
View File

@ -1,4 +0,0 @@
/standalone_HTML.manifest
/docutils.css
/minimal.css
/reference.css

View File

@ -1,716 +0,0 @@
/*=============================================================================
Copyright (c) 2004 Joel de Guzman
http://spirit.sourceforge.net/
Copyright 2013 Niall Douglas additions for colors and alignment.
Copyright 2013 Paul A. Bristow additions for more colors and alignments.
Distributed under the Boost Software License, Version 1.0. (See accompany-
ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
=============================================================================*/
/*=============================================================================
Body defaults
=============================================================================*/
body
{
margin: 1em;
font-family: sans-serif;
}
/*=============================================================================
Paragraphs
=============================================================================*/
p
{
text-align: left;
font-size: 10pt;
line-height: 1.15;
}
/*=============================================================================
Program listings
=============================================================================*/
/* Code on paragraphs */
p tt.computeroutput
{
font-size: 9pt;
}
pre.synopsis
{
font-size: 9pt;
margin: 1pc 4% 0pc 4%;
padding: 0.5pc 0.5pc 0.5pc 0.5pc;
}
.programlisting,
.screen
{
font-size: 9pt;
display: block;
margin: 1pc 4% 0pc 4%;
padding: 0.5pc 0.5pc 0.5pc 0.5pc;
}
/* Program listings in tables don't get borders */
td .programlisting,
td .screen
{
margin: 0pc 0pc 0pc 0pc;
padding: 0pc 0pc 0pc 0pc;
}
/*=============================================================================
Headings
=============================================================================*/
h1, h2, h3, h4, h5, h6
{
text-align: left;
margin: 1em 0em 0.5em 0em;
font-weight: bold;
}
h1 { font-size: 140%; }
h2 { font-weight: bold; font-size: 140%; }
h3 { font-weight: bold; font-size: 130%; }
h4 { font-weight: bold; font-size: 120%; }
h5 { font-weight: normal; font-style: italic; font-size: 110%; }
h6 { font-weight: normal; font-style: italic; font-size: 100%; }
/* Top page titles */
title,
h1.title,
h2.title
h3.title,
h4.title,
h5.title,
h6.title,
.refentrytitle
{
font-weight: bold;
margin-bottom: 1pc;
}
h1.title { font-size: 140% }
h2.title { font-size: 140% }
h3.title { font-size: 130% }
h4.title { font-size: 120% }
h5.title { font-size: 110% }
h6.title { font-size: 100% }
.section h1
{
margin: 0em 0em 0.5em 0em;
font-size: 140%;
}
.section h2 { font-size: 140% }
.section h3 { font-size: 130% }
.section h4 { font-size: 120% }
.section h5 { font-size: 110% }
.section h6 { font-size: 100% }
/* Code on titles */
h1 tt.computeroutput { font-size: 140% }
h2 tt.computeroutput { font-size: 140% }
h3 tt.computeroutput { font-size: 130% }
h4 tt.computeroutput { font-size: 130% }
h5 tt.computeroutput { font-size: 130% }
h6 tt.computeroutput { font-size: 130% }
/*=============================================================================
Author
=============================================================================*/
h3.author
{
font-size: 100%
}
/*=============================================================================
Lists
=============================================================================*/
li
{
font-size: 10pt;
line-height: 1.3;
}
/* Unordered lists */
ul
{
text-align: left;
}
/* Ordered lists */
ol
{
text-align: left;
}
/*=============================================================================
Links
=============================================================================*/
a
{
text-decoration: none; /* no underline */
}
a:hover
{
text-decoration: underline;
}
/*=============================================================================
Spirit style navigation
=============================================================================*/
.spirit-nav
{
text-align: right;
}
.spirit-nav a
{
color: white;
padding-left: 0.5em;
}
.spirit-nav img
{
border-width: 0px;
}
/*=============================================================================
Copyright footer
=============================================================================*/
.copyright-footer
{
text-align: right;
font-size: 70%;
}
.copyright-footer p
{
text-align: right;
font-size: 80%;
}
/*=============================================================================
Table of contents
=============================================================================*/
div.toc
{
margin: 1pc 4% 0pc 4%;
padding: 0.1pc 1pc 0.1pc 1pc;
font-size: 80%;
line-height: 1.15;
}
.boost-toc
{
float: right;
padding: 0.5pc;
}
/* Code on toc */
.toc .computeroutput { font-size: 120% }
/* No margin on nested menus */
.toc dl dl { margin: 0; }
/*=============================================================================
Tables
=============================================================================*/
.table-title,
div.table p.title
{
margin-left: 4%;
padding-right: 0.5em;
padding-left: 0.5em;
}
.informaltable table,
.table table
{
width: 92%;
margin-left: 4%;
margin-right: 4%;
}
div.informaltable table,
div.table table
{
padding: 4px;
}
/* Table Cells */
div.informaltable table tr td,
div.table table tr td
{
padding: 0.5em;
text-align: left;
font-size: 9pt;
}
div.informaltable table tr th,
div.table table tr th
{
padding: 0.5em 0.5em 0.5em 0.5em;
border: 1pt solid white;
font-size: 80%;
}
table.simplelist
{
width: auto !important;
margin: 0em !important;
padding: 0em !important;
border: none !important;
}
table.simplelist td
{
margin: 0em !important;
padding: 0em !important;
text-align: left !important;
font-size: 9pt !important;
border: none !important;
}
/*=============================================================================
Suppress margins in tables
=============================================================================*/
table th > *:first-child,
table td > *:first-child
{
margin-top: 0;
}
table th > *:last-child,
table td > *:last-child
{
margin-bottom: 0;
}
/*=============================================================================
Blurbs
=============================================================================*/
div.note,
div.tip,
div.important,
div.caution,
div.warning,
p.blurb
{
font-size: 9pt; /* A little bit smaller than the main text */
line-height: 1.2;
display: block;
margin: 1pc 4% 0pc 4%;
padding: 0.5pc 0.5pc 0.5pc 0.5pc;
}
p.blurb img
{
padding: 1pt;
}
/*=============================================================================
Variable Lists
=============================================================================*/
div.variablelist
{
margin: 1em 0;
}
/* Make the terms in definition lists bold */
div.variablelist dl dt,
span.term
{
font-weight: bold;
font-size: 10pt;
}
div.variablelist table tbody tr td
{
text-align: left;
vertical-align: top;
padding: 0em 2em 0em 0em;
font-size: 10pt;
margin: 0em 0em 0.5em 0em;
line-height: 1;
}
div.variablelist dl dt
{
margin-bottom: 0.2em;
}
div.variablelist dl dd
{
margin: 0em 0em 0.5em 2em;
font-size: 10pt;
}
div.variablelist table tbody tr td p,
div.variablelist dl dd p
{
margin: 0em 0em 0.5em 0em;
line-height: 1;
}
/*=============================================================================
Misc
=============================================================================*/
/* Title of books and articles in bibliographies */
span.title
{
font-style: italic;
}
span.underline
{
text-decoration: underline;
}
span.strikethrough
{
text-decoration: line-through;
}
/* Copyright, Legal Notice */
div div.legalnotice p
{
text-align: left
}
/*=============================================================================
Colors
=============================================================================*/
@media screen
{
body {
background-color: #FFFFFF;
color: #000000;
}
/* Syntax Highlighting */
.keyword { color: #0000AA; }
.identifier { color: #000000; }
.special { color: #707070; }
.preprocessor { color: #402080; }
.char { color: teal; }
.comment { color: #800000; }
.string { color: teal; }
.number { color: teal; }
.white_bkd { background-color: #FFFFFF; }
.dk_grey_bkd { background-color: #999999; }
/* Links */
a, a .keyword, a .identifier, a .special, a .preprocessor
a .char, a .comment, a .string, a .number
{
color: #005a9c;
}
a:visited, a:visited .keyword, a:visited .identifier,
a:visited .special, a:visited .preprocessor a:visited .char,
a:visited .comment, a:visited .string, a:visited .number
{
color: #9c5a9c;
}
h1 a, h2 a, h3 a, h4 a, h5 a, h6 a,
h1 a:hover, h2 a:hover, h3 a:hover, h4 a:hover, h5 a:hover, h6 a:hover,
h1 a:visited, h2 a:visited, h3 a:visited, h4 a:visited, h5 a:visited, h6 a:visited
{
text-decoration: none; /* no underline */
color: #000000;
}
/* Copyright, Legal Notice */
.copyright
{
color: #666666;
font-size: small;
}
div div.legalnotice p
{
color: #666666;
}
/* Program listing */
pre.synopsis
{
border: 1px solid #DCDCDC;
}
.programlisting,
.screen
{
border: 1px solid #DCDCDC;
}
td .programlisting,
td .screen
{
border: 0px solid #DCDCDC;
}
/* Blurbs */
div.note,
div.tip,
div.important,
div.caution,
div.warning,
p.blurb
{
border: 1px solid #DCDCDC;
}
/* Table of contents */
div.toc
{
border: 1px solid #DCDCDC;
}
/* Tables */
div.informaltable table tr td,
div.table table tr td
{
border: 1px solid #DCDCDC;
}
div.informaltable table tr th,
div.table table tr th
{
background-color: #F0F0F0;
border: 1px solid #DCDCDC;
}
.copyright-footer
{
color: #8F8F8F;
}
/* Misc */
span.highlight
{
color: #00A000;
}
}
@media print
{
/* Links */
a
{
color: black;
}
a:visited
{
color: black;
}
.spirit-nav
{
display: none;
}
/* Program listing */
pre.synopsis
{
border: 1px solid gray;
}
.programlisting,
.screen
{
border: 1px solid gray;
}
td .programlisting,
td .screen
{
border: 0px solid #DCDCDC;
}
/* Table of contents */
div.toc
{
border: 1px solid gray;
}
.informaltable table,
.table table
{
border: 1px solid gray;
border-collapse: collapse;
}
/* Tables */
div.informaltable table tr td,
div.table table tr td
{
border: 1px solid gray;
}
div.informaltable table tr th,
div.table table tr th
{
border: 1px solid gray;
}
table.simplelist tr td
{
border: none !important;
}
/* Misc */
span.highlight
{
font-weight: bold;
}
}
/*=============================================================================
Images
=============================================================================*/
span.inlinemediaobject img
{
vertical-align: middle;
}
/*==============================================================================
Super and Subscript: style so that line spacing isn't effected, see
http://www.adobe.com/cfusion/communityengine/index.cfm?event=showdetails&productId=1&postId=5341
==============================================================================*/
sup,
sub {
height: 0;
line-height: 1;
vertical-align: baseline;
position: relative;
}
/* For internet explorer: */
* html sup,
* html sub {
vertical-align: bottom;
}
sup {
bottom: 1ex;
}
sub {
top: .5ex;
}
/*==============================================================================
Indexes: pretty much the same as the TOC.
==============================================================================*/
.index
{
font-size: 80%;
padding-top: 0px;
padding-bottom: 0px;
margin-top: 0px;
margin-bottom: 0px;
margin-left: 0px;
}
.index ul
{
padding-left: 3em;
}
.index p
{
padding: 2px;
margin: 2px;
}
.index-entry-level-0
{
font-weight: bold;
}
.index em
{
font-weight: bold;
}
/*==============================================================================
Alignment and coloring use 'role' feature, available from Quickbook 1.6 up.
Added from Niall Douglas for role color and alignment.
http://article.gmane.org/gmane.comp.lib.boost.devel/243318
*/
/* Add text alignment (see http://www.w3schools.com/cssref/pr_text_text-align.asp) */
span.aligncenter
{
display: inline-block; width: 100%; text-align: center;
}
span.alignright
{
display: inline-block; width: 100%; text-align: right;
}
/* alignleft is the default. */
span.alignleft
{
display: inline-block; width: 100%; text-align: left;
}
/* alignjustify stretches the word spacing so that each line has equal width
within a chosen fraction of page width (here arbitrarily 20%).
*Not* useful inside table items as the column width remains the total string width.
Nor very useful, except to temporarily restrict the width.
*/
span.alignjustify
{
display: inline-block; width: 20%; text-align: justify;
}
/* Text colors.
Names at http://www.w3.org/TR/2002/WD-css3-color-20020219/ 4.3. X11 color keywords.
Quickbook Usage: [role red Some red text]
*/
span.red { inline-block; color: red; }
span.green { color: green; }
span.lime { color: #00FF00; }
span.blue { color: blue; }
span.navy { color: navy; }
span.yellow { color: yellow; }
span.magenta { color: magenta; }
span.indigo { color: #4B0082; }
span.cyan { color: cyan; }
span.purple { color: purple; }
span.gold { color: gold; }
span.silver { color: silver; } /* lighter gray */
span.gray { color: #808080; } /* light gray */

Binary file not shown.

Before

Width:  |  Height:  |  Size: 603 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 374 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 391 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 485 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 410 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 488 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 509 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 499 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 507 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 446 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 431 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 441 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 423 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 431 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 397 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 434 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 420 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 358 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 722 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 336 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 490 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 334 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 867 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 449 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 318 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 259 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 264 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 370 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -1,66 +0,0 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Predef 1.4</title>
<link rel="stylesheet" href="boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="index.html" title="Predef 1.4">
<link rel="next" href="predef/introduction.html" title="Introduction">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<div class="spirit-nav"><a accesskey="n" href="predef/introduction.html"><img src="images/next.png" alt="Next"></a></div>
<div class="article">
<div class="titlepage">
<div>
<div><h2 class="title">
<a name="predef"></a>Predef 1.4</h2></div>
<div><div class="authorgroup"><div class="author"><h3 class="author">
<span class="firstname">Rene</span> <span class="surname">Rivera</span>
</h3></div></div></div>
<div><p class="copyright">Copyright &#169; 2005, 2008-2015 Rene
Rivera</p></div>
<div><p class="copyright">Copyright &#169; 2015 Charly Chevalier</p></div>
<div><p class="copyright">Copyright &#169; 2015 Joel Falcou</p></div>
<div><div class="legalnotice">
<a name="predef.legal"></a><p>
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
</p>
</div></div>
</div>
<hr>
</div>
<div class="toc">
<p><b>Table of Contents</b></p>
<dl class="toc">
<dt><span class="section"><a href="predef/introduction.html">Introduction</a></span></dt>
<dt><span class="section"><a href="predef/using_the_predefs.html">Using the predefs</a></span></dt>
<dt><span class="section"><a href="predef/adding_new_predefs.html">Adding new predefs</a></span></dt>
<dt><span class="section"><a href="predef/reference.html">Reference</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="predef/reference/boost_arch_architecture_macros.html"><code class="computeroutput"><span class="identifier">BOOST_ARCH</span></code> architecture macros</a></span></dt>
<dt><span class="section"><a href="predef/reference/boost_comp_compiler_macros.html"><code class="computeroutput"><span class="identifier">BOOST_COMP</span></code> compiler macros</a></span></dt>
<dt><span class="section"><a href="predef/reference/boost_lang_language_standards_ma.html"><code class="computeroutput"><span class="identifier">BOOST_LANG</span></code> language standards macros</a></span></dt>
<dt><span class="section"><a href="predef/reference/boost_lib_library_macros.html"><code class="computeroutput"><span class="identifier">BOOST_LIB</span></code> library macros</a></span></dt>
<dt><span class="section"><a href="predef/reference/boost_os_operating_system_macros.html"><code class="computeroutput"><span class="identifier">BOOST_OS</span></code> operating system macros</a></span></dt>
<dt><span class="section"><a href="predef/reference/boost_plat_platform_macros.html"><code class="computeroutput"><span class="identifier">BOOST_PLAT</span></code> platform macros</a></span></dt>
<dt><span class="section"><a href="predef/reference/boost_hw_hardware_macros.html"><code class="computeroutput"><span class="identifier">BOOST_HW</span></code> hardware macros</a></span></dt>
<dt><span class="section"><a href="predef/reference/other_macros.html">Other macros</a></span></dt>
<dt><span class="section"><a href="predef/reference/version_definition_macros.html">Version definition
macros</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="predef/check_utilities.html">Check Utilities</a></span></dt>
<dt><span class="section"><a href="predef/history.html">History</a></span></dt>
<dt><span class="section"><a href="predef/to_do.html">To Do</a></span></dt>
<dt><span class="section"><a href="predef/acknoledgements.html">Acknoledgements</a></span></dt>
</dl>
</div>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"><p><small>Last revised: October 15, 2015 at 04:09:31 GMT</small></p></td>
<td align="right"><div class="copyright-footer"></div></td>
</tr></table>
<hr>
<div class="spirit-nav"><a accesskey="n" href="predef/introduction.html"><img src="images/next.png" alt="Next"></a></div>
</body>
</html>

View File

@ -1,50 +0,0 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Acknoledgements</title>
<link rel="stylesheet" href="../boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="../index.html" title="Predef 1.4">
<link rel="up" href="../index.html" title="Predef 1.4">
<link rel="prev" href="to_do.html" title="To Do">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<div class="spirit-nav">
<a accesskey="p" href="to_do.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a>
</div>
<div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="predef.acknoledgements"></a><a class="link" href="acknoledgements.html" title="Acknoledgements">Acknoledgements</a>
</h2></div></div></div>
<p>
The comprehensiveness of this library would not be possible without the existence
of the indispensable resource that is the <a href="http://sourceforge.net/p/predef/" target="_top">Pre-defined
C/C++ Compiler Macros</a> Project. It was, and continues to be, the primary
source of the definitions that make up this library. Thanks to Bjorn Reese
and all the volunteers that make that resource possible.
</p>
<p>
This library would be an incoherent mess if it weren't for Boost community
that provided invaluable feedback for the eight years that it took to polish
into a useable form. In particular I would like to thank: Mathias Gaunard,
Robert Stewart, Jo&#235;l Lamotte, Lars Viklund, Nathan Ridge, Artyom Beilis, Joshua
Boyce, Gottlob Frege, Thomas Heller, Edward Diener, Dave Abrahams, Iain Denniston,
Dan Price, Ioannis Papadopoulos, and Robert Ramey. And thanks to Joel Falcou
for managing the review of this library.
</p>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
<td align="right"><div class="copyright-footer">Copyright &#169; 2005, 2008-2015 Rene
Rivera<br>Copyright &#169; 2015 Charly Chevalier<br>Copyright &#169; 2015 Joel Falcou<p>
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
</p>
</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="to_do.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a>
</div>
</body>
</html>

View File

@ -1,304 +0,0 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Adding new predefs</title>
<link rel="stylesheet" href="../boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="../index.html" title="Predef 1.4">
<link rel="up" href="../index.html" title="Predef 1.4">
<link rel="prev" href="using_the_predefs.html" title="Using the predefs">
<link rel="next" href="reference.html" title="Reference">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<div class="spirit-nav">
<a accesskey="p" href="using_the_predefs.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="reference.html"><img src="../images/next.png" alt="Next"></a>
</div>
<div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="predef.adding_new_predefs"></a><a class="link" href="adding_new_predefs.html" title="Adding new predefs">Adding new predefs</a>
</h2></div></div></div>
<p>
We know that a library like this one will be an eternal work-in-progress. And
as such we expect, and look forward to, others contributing corrections and
additions to the predefs. With that in mind we need to keep a consistent way
of defining the new predefs. Hence all current, and future, predefs follow
the same structure and requirements.
</p>
<h4>
<a name="predef.adding_new_predefs.h0"></a>
<span class="phrase"><a name="predef.adding_new_predefs.requirements_of_the_header"></a></span><a class="link" href="adding_new_predefs.html#predef.adding_new_predefs.requirements_of_the_header">Requirements
of the header</a>
</h4>
<p>
All predefs need to follow a set of requirements:
</p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
The headers must use the Boost Software License.
</li>
<li class="listitem">
The predef must, by default, be defined as <code class="computeroutput"><span class="identifier">BOOST_VERSION_NUMBER_NOT_AVAILABLE</span></code>.
</li>
<li class="listitem">
The predef must be redefined to a non-zero value once detected.
</li>
<li class="listitem">
The predef must, by default, be defined to <code class="computeroutput"><span class="identifier">BOOST_VERSION_NUMBER_AVAILABLE</span></code>
when the predef is detected.
</li>
<li class="listitem">
If possible, the predef will be defined as the version number detected.
</li>
<li class="listitem">
The predef must define <code class="computeroutput"><span class="special">*</span><span class="identifier">_AVAILABLE</span></code>
macros as needed.
</li>
<li class="listitem">
The predef must define a symbolic constant string name macro.
</li>
<li class="listitem">
The predef must declare itself, after being defined, for the testing system.
</li>
<li class="listitem">
The predef must guarantee that it is the only one defined as detected per
category.
</li>
<li class="listitem">
But a predef can define <code class="computeroutput"><span class="special">*</span><span class="identifier">_EMULATED</span></code> macros to indicate that it
was previously detected by another header and is being "emulated"
by the system. Note that the <code class="computeroutput"><span class="special">*</span><span class="identifier">_AVAILABLE</span></code> macros must still be defined
in this situation.
</li>
</ul></div>
<p>
And there are some extra guidelines that predef headers should follow:
</p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
The detection should avoid including extra headers that might otherwise
not be included by default.
</li>
<li class="listitem">
If the detection must include a header, prefer guarding it within the detection
if possible.
</li>
<li class="listitem">
If the detection must include headers unconditionally, and has a choice
of headers to include, prefer the ones with the least impact. I.e. include
the one with the minimal set of definitions and other dependencies.
</li>
</ul></div>
<h4>
<a name="predef.adding_new_predefs.h1"></a>
<span class="phrase"><a name="predef.adding_new_predefs.structure_of_the_header"></a></span><a class="link" href="adding_new_predefs.html#predef.adding_new_predefs.structure_of_the_header">Structure
of the header</a>
</h4>
<p>
For general consistency it's suggested that new predef headers follow the structure
below, as current predef headers do. First we have the copyright and license
statement, followed by the include guard:
</p>
<pre class="programlisting"><span class="comment">/*
Copyright Jane Doe YYYY
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or copy at
http://www.boost.org/LICENSE_1_0.txt)
*/</span>
<span class="preprocessor">#ifndef</span> <span class="identifier">BOOST_PREDEF_category_tag_H</span>
<span class="preprocessor">#define</span> <span class="identifier">BOOST_PREDEF_category_tag_H</span>
</pre>
<p>
If the detection depends on the detection of another predef you should include
those headers here.
</p>
<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">predef</span><span class="special">/</span><span class="identifier">CATEGORY_TAG</span><span class="special">/</span><span class="identifier">DEPENDENCY</span><span class="special">.</span><span class="identifier">h</span><span class="special">&gt;</span>
</pre>
<p>
Depending on how you are defining the predef you will at minimum have to include
the <code class="computeroutput"><span class="identifier">version_number</span><span class="special">.</span><span class="identifier">h</span></code> header. But you might also want to include
the <code class="computeroutput"><span class="identifier">make</span><span class="special">.</span><span class="identifier">h</span></code> header for the version number decomposing
utility macros:
</p>
<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">predef</span><span class="special">/</span><span class="identifier">version_number</span><span class="special">.</span><span class="identifier">h</span><span class="special">&gt;</span>
<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">predef</span><span class="special">/</span><span class="identifier">make</span><span class="special">.</span><span class="identifier">h</span><span class="special">&gt;</span>
</pre>
<p>
The Predef library uses Quickbook for documentation and for the individual
predefs to appear in the reference section we add in-code documentation followed
by the zero-value default definition of the predef macro. We strongly recommend
this particular placement of the documentation and default definition because
some development environments automatically interpret this and provide in-line
help for the macro. In particular this works for the popular Eclipse IDE:
</p>
<pre class="programlisting"><span class="comment">/*`
[heading `BOOST_category_tag`]
Documentation about what is detected.
*/</span>
<span class="preprocessor">#define</span> <span class="identifier">BOOST_category_tag</span> <span class="identifier">BOOST_VERSION_NUMBER_NOT_AVAILABLE</span>
</pre>
<p>
Next is the detection and definition of the particular predef. The structure
for this is to do a single overall check (<code class="computeroutput"><span class="identifier">condition_a</span></code>)
and place further version detection inside this. The first action inside the
overall check is to "<code class="computeroutput"><span class="preprocessor">#undef</span>
<span class="identifier">BOOST_category_tag</span></code>" which undefines
the zero-value default. The rest is up to the you how to do the checks for
defining the version. But at minimum it must "<code class="computeroutput"><span class="preprocessor">#define</span>
<span class="identifier">BOOST_category_tag</span> <span class="identifier">BOOST_VERSION_NUMBER_AVAILABLE</span></code>"
as the fallback to minimally indicate that the predef was detected:
</p>
<pre class="programlisting"><span class="preprocessor">#if</span> <span class="special">(</span><span class="identifier">condition_a</span><span class="special">)</span>
<span class="preprocessor"># undef</span> <span class="identifier">BOOST_category_tag</span>
<span class="preprocessor"># if</span> <span class="special">(</span><span class="identifier">condition_b</span><span class="special">)</span>
<span class="preprocessor"># define</span> <span class="identifier">BOOST_category_tag</span> <span class="identifier">BOOST_VERSION_NUMBER</span><span class="special">(</span><span class="identifier">major</span><span class="special">,</span><span class="identifier">minor</span><span class="special">,</span><span class="identifier">patch</span><span class="special">)</span>
<span class="preprocessor"># else</span>
<span class="preprocessor"># define</span> <span class="identifier">BOOST_category_tag</span> <span class="identifier">BOOST_VERSION_NUMBER_AVAILABLE</span>
<span class="preprocessor"># endif</span>
<span class="preprocessor">#endif</span>
</pre>
<p>
We also need to provide the <code class="computeroutput"><span class="special">*</span><span class="identifier">_AVAILABLE</span></code> versions of the predef.
</p>
<pre class="programlisting"><span class="preprocessor">#if</span> <span class="identifier">BOOST_category_tag</span>
<span class="preprocessor"># define</span> <span class="identifier">BOOST_category_tag_AVAILABLE</span>
<span class="preprocessor">#endif</span>
</pre>
<p>
And for convenience we also want to provide a <code class="computeroutput"><span class="special">*</span><span class="identifier">_NAME</span></code> macro:
</p>
<pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_catagory_tag_NAME</span> <span class="string">"Name"</span>
</pre>
<p>
The testing of the predef macros is automated to generate checks for all the
defined predefs, whether detected or not. To do this we need to declare the
predef to the test system. This declaration is empty for regular use. And during
the test programs they expand out specially to create informational output:
</p>
<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">predef</span><span class="special">/</span><span class="identifier">detail</span><span class="special">/</span><span class="identifier">test</span><span class="special">.</span><span class="identifier">h</span><span class="special">&gt;</span>
<span class="identifier">BOOST_PREDEF_DECLARE_TEST</span><span class="special">(</span><span class="identifier">BOOST_category_tag</span><span class="special">,</span><span class="identifier">BOOST_category_tag_NAME</span><span class="special">)</span>
</pre>
<p>
And, of course, we last need to close out the include guard:
</p>
<pre class="programlisting"><span class="preprocessor">#endif</span>
</pre>
<h4>
<a name="predef.adding_new_predefs.h2"></a>
<span class="phrase"><a name="predef.adding_new_predefs.adding_exclusive_predefs"></a></span><a class="link" href="adding_new_predefs.html#predef.adding_new_predefs.adding_exclusive_predefs">Adding
exclusive predefs</a>
</h4>
<p>
For headers of predefs that need to be mutually exclusive in the detection
we need to add checks and definitions to detect when the predef is detected
by multiple headers.
</p>
<p>
Internally compiler, operating system, and platforms define <code class="computeroutput"><span class="identifier">BOOST_PREDEF_DETAIL_COMP_DETECTED</span></code>,
<code class="computeroutput"><span class="identifier">BOOST_PREDEF_DEFAIL_OS_DETECTED</span></code>,
and <code class="computeroutput"><span class="identifier">BOOST_PREDEF_DETAIL_PLAT_DETECTED</span></code>
respectively when the predef is first detected. This is used to guard against
multiple definition of the detection in later included headers. In those cases
the detection would instead be written as:
</p>
<pre class="programlisting"><span class="preprocessor">#if</span> <span class="special">!</span><span class="identifier">BOOST_PREDEF_DETAIL_category_DETECTED</span> <span class="special">&amp;&amp;</span> <span class="special">(</span><span class="identifier">condition_a</span><span class="special">)</span>
<span class="preprocessor"># undef</span> <span class="identifier">BOOST_category_tag</span>
<span class="preprocessor"># if</span> <span class="special">(</span><span class="identifier">condition_b</span><span class="special">)</span>
<span class="preprocessor"># define</span> <span class="identifier">BOOST_category_tag</span> <span class="identifier">BOOST_VERSION_NUMBER</span><span class="special">(</span><span class="identifier">major</span><span class="special">,</span><span class="identifier">minor</span><span class="special">,</span><span class="identifier">patch</span><span class="special">)</span>
<span class="preprocessor"># else</span>
<span class="preprocessor"># define</span> <span class="identifier">BOOST_category_tag</span> <span class="identifier">BOOST_VERSION_NUMBER</span><span class="special">(</span><span class="number">0</span><span class="special">,</span><span class="number">0</span><span class="special">,</span><span class="number">1</span><span class="special">)</span>
<span class="preprocessor"># endif</span>
<span class="preprocessor">#endif</span>
</pre>
<p>
And we also include a header that defines the <code class="computeroutput"><span class="special">*</span><span class="identifier">_DETECTED</span></code> macro when we have the detection:
</p>
<pre class="programlisting"><span class="preprocessor">#if</span> <span class="identifier">BOOST_category_tag</span>
<span class="preprocessor"># define</span> <span class="identifier">BOOST_category_tag_AVAILABLE</span>
<span class="preprocessor"># include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">predef</span><span class="special">/</span><span class="identifier">detail</span><span class="special">/</span><span class="identifier">CATEGORY_detected</span><span class="special">.</span><span class="identifier">h</span><span class="special">&gt;</span>
<span class="preprocessor">#endif</span>
</pre>
<p>
Everything else about the header is the same as the basic detection header.
</p>
<h4>
<a name="predef.adding_new_predefs.h3"></a>
<span class="phrase"><a name="predef.adding_new_predefs.adding_an_exclusive_but_emulated"></a></span><a class="link" href="adding_new_predefs.html#predef.adding_new_predefs.adding_an_exclusive_but_emulated">Adding
an exclusive but emulated predef</a>
</h4>
<p>
Because compilers are frequently emulated by other compilers we both want to
have exclusive detection of the compiler and also provide information that
we detected the emulation of the compiler. To accomplish this we define a local
<code class="computeroutput"><span class="special">*</span><span class="identifier">_DETECTION</span></code>
macro for the compiler detection. And conditionally define either the base
compiler predef <code class="computeroutput"><span class="identifier">BOOST_COMP_compiler</span></code>
or the alternate <code class="computeroutput"><span class="identifier">BOOST_COMP_compiler_EMULATED</span></code>
predef.
</p>
<p>
The initial detection would look like:
</p>
<pre class="programlisting"><span class="preprocessor">#if</span> <span class="special">(</span><span class="identifier">condition_a</span><span class="special">)</span>
<span class="preprocessor"># if</span> <span class="special">(</span><span class="identifier">condition_b</span><span class="special">)</span>
<span class="preprocessor"># define</span> <span class="identifier">BOOST_COMP_tag_DETECTION</span> <span class="identifier">BOOST_VERSION_NUMBER</span><span class="special">(</span><span class="identifier">major</span><span class="special">,</span><span class="identifier">minor</span><span class="special">,</span><span class="identifier">patch</span><span class="special">)</span>
<span class="preprocessor"># else</span>
<span class="preprocessor"># define</span> <span class="identifier">BOOST_COMP_tag_DETECTION</span> <span class="identifier">BOOST_VERSION_NUMBER_AVAILABLE</span>
<span class="preprocessor"># endif</span>
<span class="preprocessor">#endif</span>
</pre>
<p>
And then we can conditionally define the base or emulated predefs:
</p>
<pre class="programlisting"><span class="preprocessor">#ifdef</span> <span class="identifier">BOOST_COMP_tag_DETECTION</span>
<span class="preprocessor"># if</span> <span class="identifier">defined</span><span class="special">(</span><span class="identifier">BOOST_PREDEF_DETAIL_COMP_DETECTED</span><span class="special">)</span>
<span class="preprocessor"># define</span> <span class="identifier">BOOST_COMP_tag_EMULATED</span> <span class="identifier">BOOST_COMP_tag_DETECTION</span>
<span class="preprocessor"># else</span>
<span class="preprocessor"># undef</span> <span class="identifier">BOOST_COMP_tag</span>
<span class="preprocessor"># define</span> <span class="identifier">BOOST_COMP_tag</span> <span class="identifier">BOOST_COMP_tag_DETECTION</span>
<span class="preprocessor"># endif</span>
<span class="preprocessor"># define</span> <span class="identifier">BOOST_category_tag_AVAILABLE</span>
<span class="preprocessor"># include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">predef</span><span class="special">/</span><span class="identifier">detail</span><span class="special">/</span><span class="identifier">comp_detected</span><span class="special">.</span><span class="identifier">h</span><span class="special">&gt;</span>
<span class="preprocessor">#endif</span>
</pre>
<h4>
<a name="predef.adding_new_predefs.h4"></a>
<span class="phrase"><a name="predef.adding_new_predefs.using_utility_pattern_macros"></a></span><a class="link" href="adding_new_predefs.html#predef.adding_new_predefs.using_utility_pattern_macros">Using utility
pattern macros</a>
</h4>
<p>
By including:
</p>
<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">predef</span><span class="special">/</span><span class="identifier">make</span><span class="special">.</span><span class="identifier">h</span><span class="special">&gt;</span>
</pre>
<p>
One will get a set of utility macros to decompose common version macros as
defined by compilers. For example the EDG compiler uses a simple 3-digit version
macro (M,N,P). It can be decomposed and defined as:
</p>
<pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_CCOMP_EDG</span> <span class="identifier">BOOST_PREDEF_MAKE_N_N_N</span><span class="special">(</span><span class="identifier">__EDG_VERSION__</span><span class="special">)</span>
</pre>
<p>
The decomposition macros are split into three types: decimal decomposition,
hexadecimal decomposition, and date decomposition. They follow the format of
using "N" for decimal, "F" for hexadecimal, and "Y",
"M", "D" for dates.
</p>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
<td align="right"><div class="copyright-footer">Copyright &#169; 2005, 2008-2015 Rene
Rivera<br>Copyright &#169; 2015 Charly Chevalier<br>Copyright &#169; 2015 Joel Falcou<p>
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
</p>
</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="using_the_predefs.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="reference.html"><img src="../images/next.png" alt="Next"></a>
</div>
</body>
</html>

View File

@ -1,160 +0,0 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Check Utilities</title>
<link rel="stylesheet" href="../boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="../index.html" title="Predef 1.4">
<link rel="up" href="../index.html" title="Predef 1.4">
<link rel="prev" href="reference/version_definition_macros.html" title="Version definition macros">
<link rel="next" href="history.html" title="History">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<div class="spirit-nav">
<a accesskey="p" href="reference/version_definition_macros.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="history.html"><img src="../images/next.png" alt="Next"></a>
</div>
<div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="predef.check_utilities"></a><a class="link" href="check_utilities.html" title="Check Utilities">Check Utilities</a>
</h2></div></div></div>
<p>
The <code class="computeroutput"><span class="identifier">predef_check</span></code> utility provides
a facility for building a program that will check a given set of expressions
against the definitions it detected when it was built.
</p>
<h4>
<a name="predef.check_utilities.h0"></a>
<span class="phrase"><a name="predef.check_utilities.predef_check_programs"></a></span><a class="link" href="check_utilities.html#predef.check_utilities.predef_check_programs"><code class="literal">predef_check</code>
programs</a>
</h4>
<p>
Even though there is only one <code class="computeroutput"><span class="identifier">predef_check</span></code>
program, there are variations for each of the languages that are detected by
Predef to match the convention for sources files. For all of them one invokes
with a list of expression arguments. The expressions are evaluated within the
context of the particular <code class="literal">predef_check</code> program and if they
all are true zero (0) is returned. Otherwise the index of the first false expression
is returned.
</p>
<p>
The expression syntax is simple:
</p>
<pre class="programlisting">predef-definition [ relational-operator version-value ]
</pre>
<p>
<em class="replaceable"><code>predef-definition</code></em> can be any of the Predef definitions.
For example <code class="computeroutput"><span class="identifier">BOOST_COMP_GCC</span></code>.
</p>
<p>
<em class="replaceable"><code>relational-operator</code></em> can be any of: <code class="literal">&gt;</code>,
<code class="literal">&lt;</code>, <code class="literal">&gt;=</code>, <code class="literal">&lt;=</code>,
<code class="literal">==</code> and <code class="literal">!=</code>.
</p>
<p>
<em class="replaceable"><code>version-number</code></em> can be a full or partial version
triplet value. If it's a partial version triple it is completed with zeros.
That is <code class="literal">x.y</code> is equivalent to <code class="literal">x.y.0</code> and
<code class="literal">x</code> is equivalent to <code class="literal">x.0.0</code>.
</p>
<p>
The <em class="replaceable"><code>relations-operator</code></em> and <em class="replaceable"><code>version-number</code></em>
can be ommited. In which case it is equivalent to:
</p>
<pre class="programlisting">predef-definition &gt; 0.0.0
</pre>
<h4>
<a name="predef.check_utilities.h1"></a>
<span class="phrase"><a name="predef.check_utilities.using_with_boost_build"></a></span><a class="link" href="check_utilities.html#predef.check_utilities.using_with_boost_build">Using
with Boost.Build</a>
</h4>
<p>
You can use the <code class="literal">predef_check</code> programs directly from Boost
Build to configure target requirements. This is useful for controlling what
gets built as part of your project based on the detailed version information
available in Predef. The basic use is simple:
</p>
<pre class="programlisting">import path-to-predef-src/check/predef
: check require
: predef-check predef-require ;
exe my_windows_program : windows_source.cpp
: [ predef-require "BOOST_OS_WINDOWS" ] ;
</pre>
<p>
That simple use case will skip building the <code class="literal">my_windows_program</code>
unless one is building for Windows. Like the direct <code class="literal">predef_check</code>
you can pass mutiple expressions using relational comparisons. For example:
</p>
<pre class="programlisting">import path-to-predef-src/check/predef
: check require
: predef-check predef-require ;
lib my_special_lib : source.cpp
: [ predef-require "BOOST_OS_WINDOWS != 0" "BOOST_OS_VMS != 0"] ;
</pre>
<p>
And in that case the <code class="literal">my_special_lib</code> is built only when the
OS is not Windows or VMS. The <code class="literal">requires</code> rule is a special
case of the <code class="literal">check</code> rule. And is defined in terms of it:
</p>
<pre class="programlisting">rule require ( expressions + : language ? )
{
return [ check $(expressions) : $(language) : : &lt;build&gt;no ] ;
}
</pre>
<p>
The expression can also use explicit "and", "or" logical
operators to for more complex checks:
</p>
<pre class="programlisting">import path-to-predef-src/check/predef
: check require
: predef-check predef-require ;
lib my_special_lib : source.cpp
: [ predef-require "BOOST_OS_WINDOWS" or "BOOST_OS_VMS"] ;
</pre>
<p>
You can use the <code class="literal">check</code> rule for more control and to implement
something other than control of what gets built. The definition for the <code class="literal">check</code>
rule is:
</p>
<pre class="programlisting">rule check ( expressions + : language ? : true-properties * : false-properties * )
</pre>
<p>
When invoked as a reuirement of a Boost Build target this rule will add the
<code class="literal">true-properties</code> to the target if all the <code class="literal">expressions</code>
evaluate to true. Otherwise the <code class="literal">false-properties</code> get added
as requirements. For example you could use it to enable or disable features
in your programs:
</p>
<pre class="programlisting">import path-to-predef-src/check/predef
: check require
: predef-check predef-require ;
exe my_special_exe : source.cpp
: [ predef-check "BOOST_OS_WINDOWS == 0"
: : &lt;define&gt;ENABLE_WMF=0
: &lt;define&gt;ENABLE_WMF=1 ] ;
</pre>
<p>
For both <code class="literal">check</code> and <code class="literal">require</code> the <code class="literal">language</code>
argument controls which variant of the <code class="literal">predef_check</code> program
is used to check the expressions. It defaults to "c++", but can be
any of: "c", "cpp", "objc", and "objcpp".
</p>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
<td align="right"><div class="copyright-footer">Copyright &#169; 2005, 2008-2015 Rene
Rivera<br>Copyright &#169; 2015 Charly Chevalier<br>Copyright &#169; 2015 Joel Falcou<p>
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
</p>
</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="reference/version_definition_macros.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="history.html"><img src="../images/next.png" alt="Next"></a>
</div>
</body>
</html>

View File

@ -1,148 +0,0 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>History</title>
<link rel="stylesheet" href="../boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="../index.html" title="Predef 1.4">
<link rel="up" href="../index.html" title="Predef 1.4">
<link rel="prev" href="check_utilities.html" title="Check Utilities">
<link rel="next" href="to_do.html" title="To Do">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<div class="spirit-nav">
<a accesskey="p" href="check_utilities.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="to_do.html"><img src="../images/next.png" alt="Next"></a>
</div>
<div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="predef.history"></a><a class="link" href="history.html" title="History">History</a>
</h2></div></div></div>
<h4>
<a name="predef.history.h0"></a>
<span class="phrase"><a name="predef.history.1_4"></a></span><a class="link" href="history.html#predef.history.1_4">1.4</a>
</h4>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
Add detection of SIMD hardware. With the addition of the <code class="computeroutput"><span class="identifier">BOOST_HW_</span><span class="special">*</span></code>
category (from Charly Chevalier).
</li>
<li class="listitem">
Add compile only version of check utilities to address cross-compile use
cases. And changed the BBv2 check support to use compile only checks.
</li>
<li class="listitem">
Fix test warnings.
</li>
<li class="listitem">
Fix typos on <code class="computeroutput"><span class="identifier">AVAILABLE</span></code>
macros for Windows Platform. (from Vemund Handeland)
</li>
</ul></div>
<h4>
<a name="predef.history.h1"></a>
<span class="phrase"><a name="predef.history.1_3"></a></span><a class="link" href="history.html#predef.history.1_3">1.3</a>
</h4>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
Fix many problems with <code class="computeroutput"><span class="identifier">predef_check</span></code>
functionality.
</li>
<li class="listitem">
Update SunPro detection to accomodate latest version of compiler from Oracle.
</li>
<li class="listitem">
Addition of Travis-CI and Appveyor testing.
</li>
<li class="listitem">
Add <code class="computeroutput"><span class="keyword">and</span></code> and <code class="computeroutput"><span class="keyword">or</span></code> logical operators for <code class="computeroutput"><span class="identifier">predef_check</span></code>
expression on the Boost Build side.
</li>
<li class="listitem">
Fix <code class="computeroutput"><span class="identifier">BOOST_ARCH_PARISC</span></code> to
correctly spelled name (from Graham Hanson).
</li>
<li class="listitem">
Fix <code class="computeroutput"><span class="identifier">MAKE_YYYYM</span></code> macros to
correctly limit the month (from rick68).
</li>
</ul></div>
<h4>
<a name="predef.history.h2"></a>
<span class="phrase"><a name="predef.history.1_2"></a></span><a class="link" href="history.html#predef.history.1_2">1.2</a>
</h4>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
Account for skip in Visual Studio product version vs. compiler version.
This supports version of VS 2015 an onward.
</li>
<li class="listitem">
Add detection of Haiku OS (from Jessica Hamilton).
</li>
<li class="listitem">
Some fixes to endian detection for Android (from mstahl-at-redhat.com).
</li>
<li class="listitem">
Add missing <code class="computeroutput"><span class="identifier">BOOST_PREDEF_MAKE_0X_VVRRPP</span></code>
macro (from Erik Lindahl).
</li>
<li class="listitem">
Add <code class="computeroutput"><span class="identifier">predef_check</span></code> program
and BBv2 integration for build configuration checks.
</li>
</ul></div>
<h4>
<a name="predef.history.h3"></a>
<span class="phrase"><a name="predef.history.1_1"></a></span><a class="link" href="history.html#predef.history.1_1">1.1</a>
</h4>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
Addition of <code class="computeroutput"><span class="identifier">BOOST_PLAT_</span><span class="special">*</span></code> platform definitions for MinGW and Windows
platform variants.
</li>
<li class="listitem">
Detection of ARM architecture for Windows compilers to target mobile devices
of Windows 8.
</li>
<li class="listitem">
Improved ARM detection for 64 bit ARM.
</li>
<li class="listitem">
Added detection of iOS an an operating system.
</li>
<li class="listitem">
Improved detection of endianess on some platforms.
</li>
<li class="listitem">
Addition of exclusive plus emulated definitions for platform and compiler
detection.
</li>
</ul></div>
<div class="warning"><table border="0" summary="Warning">
<tr>
<td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="../images/warning.png"></td>
<th align="left">Warning</th>
</tr>
<tr><td align="left" valign="top"><p>
The big change for this version is the restructuring of the definitions to
avoid duplicate definitions in one category. That is, only one <code class="computeroutput"><span class="identifier">BOOST_OS_</span><span class="special">*</span></code>,
<code class="computeroutput"><span class="identifier">BOOST_COMP_</span><span class="special">*</span></code>,
and <code class="computeroutput"><span class="identifier">BOOST_PLAT_</span><span class="special">*</span></code>
variant will be detected (except for sub-categories).
</p></td></tr>
</table></div>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
<td align="right"><div class="copyright-footer">Copyright &#169; 2005, 2008-2015 Rene
Rivera<br>Copyright &#169; 2015 Charly Chevalier<br>Copyright &#169; 2015 Joel Falcou<p>
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
</p>
</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="check_utilities.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="to_do.html"><img src="../images/next.png" alt="Next"></a>
</div>
</body>
</html>

View File

@ -1,206 +0,0 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Introduction</title>
<link rel="stylesheet" href="../boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="../index.html" title="Predef 1.4">
<link rel="up" href="../index.html" title="Predef 1.4">
<link rel="prev" href="../index.html" title="Predef 1.4">
<link rel="next" href="using_the_predefs.html" title="Using the predefs">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<div class="spirit-nav">
<a accesskey="p" href="../index.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="using_the_predefs.html"><img src="../images/next.png" alt="Next"></a>
</div>
<div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="predef.introduction"></a><a class="link" href="introduction.html" title="Introduction">Introduction</a>
</h2></div></div></div>
<p>
This library defines a set of compiler, architecture, operating system, library,
and other version numbers from the information it can gather of C, C++, Objective
C, and Objective C++ predefined macros or those defined in generally available
headers. The idea for this library grew out of a proposal to extend the Boost
Config library to provide more, and consistent, information than the feature
definitions it supports. What follows is an edited version of that brief proposal.
</p>
<h4>
<a name="predef.introduction.h0"></a>
<span class="phrase"><a name="predef.introduction.proposal"></a></span><a class="link" href="introduction.html#predef.introduction.proposal">Proposal</a>
</h4>
<p>
The idea is to define a set of macros to identify compilers and consistently
represent their version. This includes:
</p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
A unique BOOST_VERSION_NUMBER(major,minor,patch) macro to specify version
numbers (unfortunately, the name BOOST_VERSION is already taken to designate
the version number of boost itself).
</li>
<li class="listitem">
A compiler identification macro, suitable for use in <code class="computeroutput"><span class="preprocessor">#if</span></code>/<code class="computeroutput"><span class="preprocessor">#elif</span></code> directives, for each of the supported
compilers. All macros would be defined, regardless of the compiler. The
one macro corresponding to the compiler being used would be defined, in
terms of BOOST_VERSION_NUMBER, to carry the exact compiler version. All
other macros would expand to an expression evaluating to false (for instance,
the token 0) to indicate that the corresponding compiler is not present.
</li>
<li class="listitem">
"Null values" could be set, for all macros, in boost/config/select_compiler.hpp;
then, for each compiler the corresponding identification macro would be
#undef and re-#defined in the corresponding boost/compiler/(cc).hpp; however
in the context of the Boost.Config infrastructure using a "prefix"
header (to be introduced) or boost/config/suffix.hpp is a better solution.
</li>
</ul></div>
<h4>
<a name="predef.introduction.h1"></a>
<span class="phrase"><a name="predef.introduction.current_library"></a></span><a class="link" href="introduction.html#predef.introduction.current_library">Current
Library</a>
</h4>
<p>
The current Predef library is now, both an independent library, and expanded
in scope. It includes detection and definition of architectures, compilers,
languages, libraries, operating systems, and endianness. The key benefits are:
</p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
Version numbers that are always defined so that one doesn't have to guard
with <code class="computeroutput"><span class="preprocessor">#ifdef</span></code>.
</li>
<li class="listitem">
Guard macros that can be used for <code class="computeroutput"><span class="preprocessor">#ifdef</span></code>
checks.
</li>
<li class="listitem">
All possible definitions are included with the single <code class="computeroutput"><span class="preprocessor">#include</span>
<span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">predef</span><span class="special">.</span><span class="identifier">h</span><span class="special">&gt;</span></code>
so that it's friendly to precompiled header usage.
</li>
<li class="listitem">
Specific definitions can be included, ex. <code class="computeroutput"><span class="preprocessor">#include</span>
<span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">predef</span><span class="special">/</span><span class="identifier">os</span><span class="special">/</span><span class="identifier">windows</span><span class="special">.</span><span class="identifier">h</span><span class="special">&gt;</span></code>
for single checks.
</li>
<li class="listitem">
Predefs can be directly used in both preprocessor and compiler expressions
for comparison to other similarly defined values.
</li>
<li class="listitem">
The headers are usable from multiple languages, that support the C preprocessor.
In particular C++, C, Objective C, and Objective C++.
</li>
</ul></div>
<h4>
<a name="predef.introduction.h2"></a>
<span class="phrase"><a name="predef.introduction.design_choices"></a></span><a class="link" href="introduction.html#predef.introduction.design_choices">Design
choices</a>
</h4>
<p>
An important design choice concerns how to represent compiler versions by means
of a single integer number suitable for use in preprocessing directives. Let's
do some calculation. The "basic" signed type for preprocessing constant-expressions
is long in C90 (and C++, as of 2006) and intmax_t in C99. The type long shall
at least be able to represent the number <code class="literal">+2 147 483 647</code>.
This means the most significant digit can only be 0, 1 or 2; and if we want
all decimal digits to be able to vary between 0 and 9, the largest range we
can consider is <code class="literal">[0, 999 999 999]</code>. Distributing evenly, this
means 3 decimal digits for each version number part.
</p>
<p>
So we can:
</p>
<div class="orderedlist"><ol class="orderedlist" type="1">
<li class="listitem">
use an uneven distribution or
</li>
<li class="listitem">
use more bits (a larger type) or
</li>
<li class="listitem">
use 3/3/3 and have the particular compiler/platform/stdlib deal with setting
the numbers within the 3-digit range.
</li>
</ol></div>
<p>
It appears relatively safe to go for the first option and set it at 2/2/5.
That covers CodeWarrior and others, which are up to and past 10 for the major
number. Some compilers use the build number in lieu of the patch one; five
digits (which is already reached by VC++ 8) seems a reasonable limit even in
this case.
</p>
<div class="note"><table border="0" summary="Note">
<tr>
<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../images/note.png"></td>
<th align="left">Note</th>
</tr>
<tr><td align="left" valign="top"><p>
A 2/2/6 scheme would allow for bigger patch/build numbers at the cost, for
instance, of limiting the major version number to 20 (or, with further constraints,
to 21).
</p></td></tr>
</table></div>
<p>
It might reassure the reader that this decision is actually encoded in one
place in the code; the definition of <code class="computeroutput"><span class="identifier">BOOST_VERSION_NUMBER</span></code>.
</p>
<h4>
<a name="predef.introduction.h3"></a>
<span class="phrase"><a name="predef.introduction.future_work"></a></span><a class="link" href="introduction.html#predef.introduction.future_work">Future
work</a>
</h4>
<p>
Even though the basics of this library are done, there is much work that can
be done:
</p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
Right now we limit the detection of libraries to known built-in predefined
macros, and to guaranteed to exist system and library headers. It might
be interesting to add something like auto-configuration predefs. This way
we can add definitions for user specific libraries and features.
</li>
<li class="listitem">
Along with the above, it might be good to add some user control as to which
headers are included with the top-level header. Although in the current
form of the library this is less of an issue as one can include the specific
headers one needs.
</li>
<li class="listitem">
Additionally, even if there is no auto-configure style option.. It would
be good to add optionally included headers so that user can get consistent
version number definitions for libraries they use.
</li>
<li class="listitem">
Having a consistent set of version number definitions opens the door to
improving the user level syntax of libraries that do checks against version
numbers. Specifically Boost Config's <code class="computeroutput"><span class="identifier">BOOST_WORKAROUND</span></code>
macro would benefit from a more readable syntax. As would the <code class="computeroutput"><span class="identifier">BOOST_TESTED_AT</span></code> detail macro.
</li>
<li class="listitem">
And obviously there's lots of work to do in reformulating the existing
Boost libraries to use the Predef library once it's accepted.
</li>
<li class="listitem">
And there's the continuing work of adding definitions for present and future
compilers, platforms, architectures, languages, and libraries.
</li>
</ul></div>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
<td align="right"><div class="copyright-footer">Copyright &#169; 2005, 2008-2015 Rene
Rivera<br>Copyright &#169; 2015 Charly Chevalier<br>Copyright &#169; 2015 Joel Falcou<p>
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
</p>
</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="../index.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="using_the_predefs.html"><img src="../images/next.png" alt="Next"></a>
</div>
</body>
</html>

View File

@ -1,47 +0,0 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Reference</title>
<link rel="stylesheet" href="../boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="../index.html" title="Predef 1.4">
<link rel="up" href="../index.html" title="Predef 1.4">
<link rel="prev" href="adding_new_predefs.html" title="Adding new predefs">
<link rel="next" href="reference/boost_arch_architecture_macros.html" title="BOOST_ARCH architecture macros">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<div class="spirit-nav">
<a accesskey="p" href="adding_new_predefs.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="reference/boost_arch_architecture_macros.html"><img src="../images/next.png" alt="Next"></a>
</div>
<div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="predef.reference"></a><a class="link" href="reference.html" title="Reference">Reference</a>
</h2></div></div></div>
<div class="toc"><dl class="toc">
<dt><span class="section"><a href="reference/boost_arch_architecture_macros.html"><code class="computeroutput"><span class="identifier">BOOST_ARCH</span></code> architecture macros</a></span></dt>
<dt><span class="section"><a href="reference/boost_comp_compiler_macros.html"><code class="computeroutput"><span class="identifier">BOOST_COMP</span></code> compiler macros</a></span></dt>
<dt><span class="section"><a href="reference/boost_lang_language_standards_ma.html"><code class="computeroutput"><span class="identifier">BOOST_LANG</span></code> language standards macros</a></span></dt>
<dt><span class="section"><a href="reference/boost_lib_library_macros.html"><code class="computeroutput"><span class="identifier">BOOST_LIB</span></code> library macros</a></span></dt>
<dt><span class="section"><a href="reference/boost_os_operating_system_macros.html"><code class="computeroutput"><span class="identifier">BOOST_OS</span></code> operating system macros</a></span></dt>
<dt><span class="section"><a href="reference/boost_plat_platform_macros.html"><code class="computeroutput"><span class="identifier">BOOST_PLAT</span></code> platform macros</a></span></dt>
<dt><span class="section"><a href="reference/boost_hw_hardware_macros.html"><code class="computeroutput"><span class="identifier">BOOST_HW</span></code> hardware macros</a></span></dt>
<dt><span class="section"><a href="reference/other_macros.html">Other macros</a></span></dt>
<dt><span class="section"><a href="reference/version_definition_macros.html">Version definition
macros</a></span></dt>
</dl></div>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
<td align="right"><div class="copyright-footer">Copyright &#169; 2005, 2008-2015 Rene
Rivera<br>Copyright &#169; 2015 Charly Chevalier<br>Copyright &#169; 2015 Joel Falcou<p>
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
</p>
</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="adding_new_predefs.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="reference/boost_arch_architecture_macros.html"><img src="../images/next.png" alt="Next"></a>
</div>
</body>
</html>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,335 +0,0 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>BOOST_LANG language standards macros</title>
<link rel="stylesheet" href="../../boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="../../index.html" title="Predef 1.4">
<link rel="up" href="../reference.html" title="Reference">
<link rel="prev" href="boost_comp_compiler_macros.html" title="BOOST_COMP compiler macros">
<link rel="next" href="boost_lib_library_macros.html" title="BOOST_LIB library macros">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<div class="spirit-nav">
<a accesskey="p" href="boost_comp_compiler_macros.html"><img src="../../images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../images/home.png" alt="Home"></a><a accesskey="n" href="boost_lib_library_macros.html"><img src="../../images/next.png" alt="Next"></a>
</div>
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="predef.reference.boost_lang_language_standards_ma"></a><a class="link" href="boost_lang_language_standards_ma.html" title="BOOST_LANG language standards macros"><code class="computeroutput"><span class="identifier">BOOST_LANG</span></code> language standards macros</a>
</h3></div></div></div>
<h5>
<a name="predef.reference.boost_lang_language_standards_ma.h0"></a>
<span class="phrase"><a name="predef.reference.boost_lang_language_standards_ma.boost_lang_objc"></a></span><a class="link" href="boost_lang_language_standards_ma.html#predef.reference.boost_lang_language_standards_ma.boost_lang_objc"><code class="computeroutput"><span class="identifier">BOOST_LANG_OBJC</span></code></a>
</h5>
<p>
<a href="http://en.wikipedia.org/wiki/Objective-C" target="_top">Objective-C</a>
language.
</p>
<div class="informaltable"><table class="table">
<colgroup>
<col>
<col>
</colgroup>
<thead><tr>
<th>
<p>
Symbol
</p>
</th>
<th>
<p>
Version
</p>
</th>
</tr></thead>
<tbody><tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">__OBJC__</span></code>
</p>
</td>
<td>
<p>
<span class="bold"><strong>detection</strong></span>
</p>
</td>
</tr></tbody>
</table></div>
<h5>
<a name="predef.reference.boost_lang_language_standards_ma.h1"></a>
<span class="phrase"><a name="predef.reference.boost_lang_language_standards_ma.boost_lang_stdc"></a></span><a class="link" href="boost_lang_language_standards_ma.html#predef.reference.boost_lang_language_standards_ma.boost_lang_stdc"><code class="computeroutput"><span class="identifier">BOOST_LANG_STDC</span></code></a>
</h5>
<p>
<a href="http://en.wikipedia.org/wiki/C_(programming_language)" target="_top">Standard
C</a> language. If available, the year of the standard is detected as
YYYY.MM.1 from the Epoc date.
</p>
<div class="informaltable"><table class="table">
<colgroup>
<col>
<col>
</colgroup>
<thead><tr>
<th>
<p>
Symbol
</p>
</th>
<th>
<p>
Version
</p>
</th>
</tr></thead>
<tbody>
<tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">__STDC__</span></code>
</p>
</td>
<td>
<p>
<span class="bold"><strong>detection</strong></span>
</p>
</td>
</tr>
<tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">__STDC_VERSION__</span></code>
</p>
</td>
<td>
<p>
V.R.P
</p>
</td>
</tr>
</tbody>
</table></div>
<h5>
<a name="predef.reference.boost_lang_language_standards_ma.h2"></a>
<span class="phrase"><a name="predef.reference.boost_lang_language_standards_ma.boost_lang_stdcpp"></a></span><a class="link" href="boost_lang_language_standards_ma.html#predef.reference.boost_lang_language_standards_ma.boost_lang_stdcpp"><code class="computeroutput"><span class="identifier">BOOST_LANG_STDCPP</span></code></a>
</h5>
<p>
<a href="http://en.wikipedia.org/wiki/C%2B%2B" target="_top">Standard C++</a> language.
If available, the year of the standard is detected as YYYY.MM.1 from the
Epoc date. Because of the way the C++ standardization process works the defined
version year will not be the commonly known year of the standard. Specifically
the defined versions are:
</p>
<div class="table">
<a name="predef.reference.boost_lang_language_standards_ma.detected_version_number_vs_c_sta"></a><p class="title"><b>Table&#160;1.&#160;Detected Version Number vs. C++ Standard Year</b></p>
<div class="table-contents"><table class="table" summary="Detected Version Number vs. C++ Standard Year">
<colgroup>
<col>
<col>
<col>
</colgroup>
<thead><tr>
<th>
<p>
Detected Version Number
</p>
</th>
<th>
<p>
Standard Year
</p>
</th>
<th>
<p>
C++ Standard
</p>
</th>
</tr></thead>
<tbody>
<tr>
<td>
<p>
27.11.1
</p>
</td>
<td>
<p>
1998
</p>
</td>
<td>
<p>
ISO/IEC 14882:1998
</p>
</td>
</tr>
<tr>
<td>
<p>
41.12.1
</p>
</td>
<td>
<p>
2011
</p>
</td>
<td>
<p>
ISO/IEC 14882:2011
</p>
</td>
</tr>
</tbody>
</table></div>
</div>
<br class="table-break"><div class="informaltable"><table class="table">
<colgroup>
<col>
<col>
</colgroup>
<thead><tr>
<th>
<p>
Symbol
</p>
</th>
<th>
<p>
Version
</p>
</th>
</tr></thead>
<tbody>
<tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">__cplusplus</span></code>
</p>
</td>
<td>
<p>
<span class="bold"><strong>detection</strong></span>
</p>
</td>
</tr>
<tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">__cplusplus</span></code>
</p>
</td>
<td>
<p>
YYYY.MM.1
</p>
</td>
</tr>
</tbody>
</table></div>
<h5>
<a name="predef.reference.boost_lang_language_standards_ma.h3"></a>
<span class="phrase"><a name="predef.reference.boost_lang_language_standards_ma.boost_lang_stdcppcli"></a></span><a class="link" href="boost_lang_language_standards_ma.html#predef.reference.boost_lang_language_standards_ma.boost_lang_stdcppcli"><code class="computeroutput"><span class="identifier">BOOST_LANG_STDCPPCLI</span></code></a>
</h5>
<p>
<a href="http://en.wikipedia.org/wiki/C%2B%2B/CLI" target="_top">Standard C++/CLI</a>
language. If available, the year of the standard is detected as YYYY.MM.1
from the Epoc date.
</p>
<div class="informaltable"><table class="table">
<colgroup>
<col>
<col>
</colgroup>
<thead><tr>
<th>
<p>
Symbol
</p>
</th>
<th>
<p>
Version
</p>
</th>
</tr></thead>
<tbody>
<tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">__cplusplus_cli</span></code>
</p>
</td>
<td>
<p>
<span class="bold"><strong>detection</strong></span>
</p>
</td>
</tr>
<tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">__cplusplus_cli</span></code>
</p>
</td>
<td>
<p>
YYYY.MM.1
</p>
</td>
</tr>
</tbody>
</table></div>
<h5>
<a name="predef.reference.boost_lang_language_standards_ma.h4"></a>
<span class="phrase"><a name="predef.reference.boost_lang_language_standards_ma.boost_lang_stdecpp"></a></span><a class="link" href="boost_lang_language_standards_ma.html#predef.reference.boost_lang_language_standards_ma.boost_lang_stdecpp"><code class="computeroutput"><span class="identifier">BOOST_LANG_STDECPP</span></code></a>
</h5>
<p>
<a href="http://en.wikipedia.org/wiki/Embedded_C%2B%2B" target="_top">Standard Embedded
C++</a> language.
</p>
<div class="informaltable"><table class="table">
<colgroup>
<col>
<col>
</colgroup>
<thead><tr>
<th>
<p>
Symbol
</p>
</th>
<th>
<p>
Version
</p>
</th>
</tr></thead>
<tbody><tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">__embedded_cplusplus</span></code>
</p>
</td>
<td>
<p>
<span class="bold"><strong>detection</strong></span>
</p>
</td>
</tr></tbody>
</table></div>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
<td align="right"><div class="copyright-footer">Copyright &#169; 2005, 2008-2015 Rene
Rivera<br>Copyright &#169; 2015 Charly Chevalier<br>Copyright &#169; 2015 Joel Falcou<p>
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
</p>
</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="boost_comp_compiler_macros.html"><img src="../../images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../images/home.png" alt="Home"></a><a accesskey="n" href="boost_lib_library_macros.html"><img src="../../images/next.png" alt="Next"></a>
</div>
</body>
</html>

View File

@ -1,897 +0,0 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>BOOST_LIB library macros</title>
<link rel="stylesheet" href="../../boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="../../index.html" title="Predef 1.4">
<link rel="up" href="../reference.html" title="Reference">
<link rel="prev" href="boost_lang_language_standards_ma.html" title="BOOST_LANG language standards macros">
<link rel="next" href="boost_os_operating_system_macros.html" title="BOOST_OS operating system macros">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<div class="spirit-nav">
<a accesskey="p" href="boost_lang_language_standards_ma.html"><img src="../../images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../images/home.png" alt="Home"></a><a accesskey="n" href="boost_os_operating_system_macros.html"><img src="../../images/next.png" alt="Next"></a>
</div>
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="predef.reference.boost_lib_library_macros"></a><a class="link" href="boost_lib_library_macros.html" title="BOOST_LIB library macros"><code class="computeroutput"><span class="identifier">BOOST_LIB</span></code> library macros</a>
</h3></div></div></div>
<h5>
<a name="predef.reference.boost_lib_library_macros.h0"></a>
<span class="phrase"><a name="predef.reference.boost_lib_library_macros.boost_lib_c_gnu"></a></span><a class="link" href="boost_lib_library_macros.html#predef.reference.boost_lib_library_macros.boost_lib_c_gnu"><code class="computeroutput"><span class="identifier">BOOST_LIB_C_GNU</span></code></a>
</h5>
<p>
<a href="http://en.wikipedia.org/wiki/Glibc" target="_top">GNU glibc</a> Standard
C library. Version number available as major, and minor.
</p>
<div class="informaltable"><table class="table">
<colgroup>
<col>
<col>
</colgroup>
<thead><tr>
<th>
<p>
Symbol
</p>
</th>
<th>
<p>
Version
</p>
</th>
</tr></thead>
<tbody>
<tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">__GLIBC__</span></code>
</p>
</td>
<td>
<p>
<span class="bold"><strong>detection</strong></span>
</p>
</td>
</tr>
<tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">__GNU_LIBRARY__</span></code>
</p>
</td>
<td>
<p>
<span class="bold"><strong>detection</strong></span>
</p>
</td>
</tr>
<tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">__GLIBC__</span></code>, <code class="computeroutput"><span class="identifier">__GLIBC_MINOR__</span></code>
</p>
</td>
<td>
<p>
V.R.0
</p>
</td>
</tr>
<tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">__GNU_LIBRARY__</span></code>,
<code class="computeroutput"><span class="identifier">__GNU_LIBRARY_MINOR__</span></code>
</p>
</td>
<td>
<p>
V.R.0
</p>
</td>
</tr>
</tbody>
</table></div>
<h5>
<a name="predef.reference.boost_lib_library_macros.h1"></a>
<span class="phrase"><a name="predef.reference.boost_lib_library_macros.boost_lib_c_uc"></a></span><a class="link" href="boost_lib_library_macros.html#predef.reference.boost_lib_library_macros.boost_lib_c_uc"><code class="computeroutput"><span class="identifier">BOOST_LIB_C_UC</span></code></a>
</h5>
<p>
<a href="http://en.wikipedia.org/wiki/Uclibc" target="_top">uClibc</a> Standard
C library.
</p>
<div class="informaltable"><table class="table">
<colgroup>
<col>
<col>
</colgroup>
<thead><tr>
<th>
<p>
Symbol
</p>
</th>
<th>
<p>
Version
</p>
</th>
</tr></thead>
<tbody>
<tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">__UCLIBC__</span></code>
</p>
</td>
<td>
<p>
<span class="bold"><strong>detection</strong></span>
</p>
</td>
</tr>
<tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">__UCLIBC_MAJOR__</span></code>,
<code class="computeroutput"><span class="identifier">__UCLIBC_MINOR__</span></code>,
<code class="computeroutput"><span class="identifier">__UCLIBC_SUBLEVEL__</span></code>
</p>
</td>
<td>
<p>
V.R.P
</p>
</td>
</tr>
</tbody>
</table></div>
<h5>
<a name="predef.reference.boost_lib_library_macros.h2"></a>
<span class="phrase"><a name="predef.reference.boost_lib_library_macros.boost_lib_c_vms"></a></span><a class="link" href="boost_lib_library_macros.html#predef.reference.boost_lib_library_macros.boost_lib_c_vms"><code class="computeroutput"><span class="identifier">BOOST_LIB_C_VMS</span></code></a>
</h5>
<p>
VMS libc Standard C library. Version number available as major, minor, and
patch.
</p>
<div class="informaltable"><table class="table">
<colgroup>
<col>
<col>
</colgroup>
<thead><tr>
<th>
<p>
Symbol
</p>
</th>
<th>
<p>
Version
</p>
</th>
</tr></thead>
<tbody>
<tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">__CRTL_VER</span></code>
</p>
</td>
<td>
<p>
<span class="bold"><strong>detection</strong></span>
</p>
</td>
</tr>
<tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">__CRTL_VER</span></code>
</p>
</td>
<td>
<p>
V.R.P
</p>
</td>
</tr>
</tbody>
</table></div>
<h5>
<a name="predef.reference.boost_lib_library_macros.h3"></a>
<span class="phrase"><a name="predef.reference.boost_lib_library_macros.boost_lib_c_zos"></a></span><a class="link" href="boost_lib_library_macros.html#predef.reference.boost_lib_library_macros.boost_lib_c_zos"><code class="computeroutput"><span class="identifier">BOOST_LIB_C_ZOS</span></code></a>
</h5>
<p>
z/OS libc Standard C library. Version number available as major, minor, and
patch.
</p>
<div class="informaltable"><table class="table">
<colgroup>
<col>
<col>
</colgroup>
<thead><tr>
<th>
<p>
Symbol
</p>
</th>
<th>
<p>
Version
</p>
</th>
</tr></thead>
<tbody>
<tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">__LIBREL__</span></code>
</p>
</td>
<td>
<p>
<span class="bold"><strong>detection</strong></span>
</p>
</td>
</tr>
<tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">__LIBREL__</span></code>
</p>
</td>
<td>
<p>
V.R.P
</p>
</td>
</tr>
<tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">__TARGET_LIB__</span></code>
</p>
</td>
<td>
<p>
V.R.P
</p>
</td>
</tr>
</tbody>
</table></div>
<h5>
<a name="predef.reference.boost_lib_library_macros.h4"></a>
<span class="phrase"><a name="predef.reference.boost_lib_library_macros.boost_lib_std_cxx"></a></span><a class="link" href="boost_lib_library_macros.html#predef.reference.boost_lib_library_macros.boost_lib_std_cxx"><code class="computeroutput"><span class="identifier">BOOST_LIB_STD_CXX</span></code></a>
</h5>
<p>
<a href="http://libcxx.llvm.org/" target="_top">libc++</a> C++ Standard Library.
</p>
<div class="informaltable"><table class="table">
<colgroup>
<col>
<col>
</colgroup>
<thead><tr>
<th>
<p>
Symbol
</p>
</th>
<th>
<p>
Version
</p>
</th>
</tr></thead>
<tbody>
<tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">_LIBCPP_VERSION</span></code>
</p>
</td>
<td>
<p>
<span class="bold"><strong>detection</strong></span>
</p>
</td>
</tr>
<tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">_LIBCPP_VERSION</span></code>
</p>
</td>
<td>
<p>
V.0.P
</p>
</td>
</tr>
</tbody>
</table></div>
<h5>
<a name="predef.reference.boost_lib_library_macros.h5"></a>
<span class="phrase"><a name="predef.reference.boost_lib_library_macros.boost_lib_std_dinkumware"></a></span><a class="link" href="boost_lib_library_macros.html#predef.reference.boost_lib_library_macros.boost_lib_std_dinkumware"><code class="computeroutput"><span class="identifier">BOOST_LIB_STD_DINKUMWARE</span></code></a>
</h5>
<p>
<a href="http://en.wikipedia.org/wiki/Dinkumware" target="_top">Dinkumware</a> Standard
C++ Library. If available version number as major, minor, and patch.
</p>
<div class="informaltable"><table class="table">
<colgroup>
<col>
<col>
</colgroup>
<thead><tr>
<th>
<p>
Symbol
</p>
</th>
<th>
<p>
Version
</p>
</th>
</tr></thead>
<tbody>
<tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">_YVALS</span></code>, <code class="computeroutput"><span class="identifier">__IBMCPP__</span></code>
</p>
</td>
<td>
<p>
<span class="bold"><strong>detection</strong></span>
</p>
</td>
</tr>
<tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">_CPPLIB_VER</span></code>
</p>
</td>
<td>
<p>
<span class="bold"><strong>detection</strong></span>
</p>
</td>
</tr>
<tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">_CPPLIB_VER</span></code>
</p>
</td>
<td>
<p>
V.R.0
</p>
</td>
</tr>
</tbody>
</table></div>
<h5>
<a name="predef.reference.boost_lib_library_macros.h6"></a>
<span class="phrase"><a name="predef.reference.boost_lib_library_macros.boost_lib_std_como"></a></span><a class="link" href="boost_lib_library_macros.html#predef.reference.boost_lib_library_macros.boost_lib_std_como"><code class="computeroutput"><span class="identifier">BOOST_LIB_STD_COMO</span></code></a>
</h5>
<p>
<a href="http://www.comeaucomputing.com/libcomo/" target="_top">Comeau Computing</a>
Standard C++ Library. Version number available as major.
</p>
<div class="informaltable"><table class="table">
<colgroup>
<col>
<col>
</colgroup>
<thead><tr>
<th>
<p>
Symbol
</p>
</th>
<th>
<p>
Version
</p>
</th>
</tr></thead>
<tbody>
<tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">__LIBCOMO__</span></code>
</p>
</td>
<td>
<p>
<span class="bold"><strong>detection</strong></span>
</p>
</td>
</tr>
<tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">__LIBCOMO_VERSION__</span></code>
</p>
</td>
<td>
<p>
V.0.0
</p>
</td>
</tr>
</tbody>
</table></div>
<h5>
<a name="predef.reference.boost_lib_library_macros.h7"></a>
<span class="phrase"><a name="predef.reference.boost_lib_library_macros.boost_lib_std_msipl"></a></span><a class="link" href="boost_lib_library_macros.html#predef.reference.boost_lib_library_macros.boost_lib_std_msipl"><code class="computeroutput"><span class="identifier">BOOST_LIB_STD_MSIPL</span></code></a>
</h5>
<p>
<a href="http://modena.us/" target="_top">Modena Software Lib++</a> Standard C++
Library.
</p>
<div class="informaltable"><table class="table">
<colgroup>
<col>
<col>
</colgroup>
<thead><tr>
<th>
<p>
Symbol
</p>
</th>
<th>
<p>
Version
</p>
</th>
</tr></thead>
<tbody>
<tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">MSIPL_COMPILE_H</span></code>
</p>
</td>
<td>
<p>
<span class="bold"><strong>detection</strong></span>
</p>
</td>
</tr>
<tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">__MSIPL_COMPILE_H</span></code>
</p>
</td>
<td>
<p>
<span class="bold"><strong>detection</strong></span>
</p>
</td>
</tr>
</tbody>
</table></div>
<h5>
<a name="predef.reference.boost_lib_library_macros.h8"></a>
<span class="phrase"><a name="predef.reference.boost_lib_library_macros.boost_lib_std_msl"></a></span><a class="link" href="boost_lib_library_macros.html#predef.reference.boost_lib_library_macros.boost_lib_std_msl"><code class="computeroutput"><span class="identifier">BOOST_LIB_STD_MSL</span></code></a>
</h5>
<p>
<a href="http://www.freescale.com/" target="_top">Metrowerks</a> Standard C++ Library.
Version number available as major, minor, and patch.
</p>
<div class="informaltable"><table class="table">
<colgroup>
<col>
<col>
</colgroup>
<thead><tr>
<th>
<p>
Symbol
</p>
</th>
<th>
<p>
Version
</p>
</th>
</tr></thead>
<tbody>
<tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">__MSL_CPP__</span></code>
</p>
</td>
<td>
<p>
<span class="bold"><strong>detection</strong></span>
</p>
</td>
</tr>
<tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">__MSL__</span></code>
</p>
</td>
<td>
<p>
<span class="bold"><strong>detection</strong></span>
</p>
</td>
</tr>
<tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">__MSL_CPP__</span></code>
</p>
</td>
<td>
<p>
V.R.P
</p>
</td>
</tr>
<tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">__MSL__</span></code>
</p>
</td>
<td>
<p>
V.R.P
</p>
</td>
</tr>
</tbody>
</table></div>
<h5>
<a name="predef.reference.boost_lib_library_macros.h9"></a>
<span class="phrase"><a name="predef.reference.boost_lib_library_macros.boost_lib_std_rw"></a></span><a class="link" href="boost_lib_library_macros.html#predef.reference.boost_lib_library_macros.boost_lib_std_rw"><code class="computeroutput"><span class="identifier">BOOST_LIB_STD_RW</span></code></a>
</h5>
<p>
<a href="http://stdcxx.apache.org/" target="_top">Roguewave</a> Standard C++ library.
If available version number as major, minor, and patch.
</p>
<div class="informaltable"><table class="table">
<colgroup>
<col>
<col>
</colgroup>
<thead><tr>
<th>
<p>
Symbol
</p>
</th>
<th>
<p>
Version
</p>
</th>
</tr></thead>
<tbody>
<tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">__STD_RWCOMPILER_H__</span></code>
</p>
</td>
<td>
<p>
<span class="bold"><strong>detection</strong></span>
</p>
</td>
</tr>
<tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">_RWSTD_VER</span></code>
</p>
</td>
<td>
<p>
<span class="bold"><strong>detection</strong></span>
</p>
</td>
</tr>
<tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">_RWSTD_VER</span></code>
</p>
</td>
<td>
<p>
V.R.P
</p>
</td>
</tr>
</tbody>
</table></div>
<h5>
<a name="predef.reference.boost_lib_library_macros.h10"></a>
<span class="phrase"><a name="predef.reference.boost_lib_library_macros.boost_lib_std_sgi"></a></span><a class="link" href="boost_lib_library_macros.html#predef.reference.boost_lib_library_macros.boost_lib_std_sgi"><code class="computeroutput"><span class="identifier">BOOST_LIB_STD_SGI</span></code></a>
</h5>
<p>
<a href="http://www.sgi.com/tech/stl/" target="_top">SGI</a> Standard C++ library.
If available version number as major, minor, and patch.
</p>
<div class="informaltable"><table class="table">
<colgroup>
<col>
<col>
</colgroup>
<thead><tr>
<th>
<p>
Symbol
</p>
</th>
<th>
<p>
Version
</p>
</th>
</tr></thead>
<tbody>
<tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">__STL_CONFIG_H</span></code>
</p>
</td>
<td>
<p>
<span class="bold"><strong>detection</strong></span>
</p>
</td>
</tr>
<tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">__SGI_STL</span></code>
</p>
</td>
<td>
<p>
V.R.P
</p>
</td>
</tr>
</tbody>
</table></div>
<h5>
<a name="predef.reference.boost_lib_library_macros.h11"></a>
<span class="phrase"><a name="predef.reference.boost_lib_library_macros.boost_lib_std_gnu"></a></span><a class="link" href="boost_lib_library_macros.html#predef.reference.boost_lib_library_macros.boost_lib_std_gnu"><code class="computeroutput"><span class="identifier">BOOST_LIB_STD_GNU</span></code></a>
</h5>
<p>
<a href="http://gcc.gnu.org/libstdc++/" target="_top">GNU libstdc++</a> Standard
C++ library. Version number available as year (from 1970), month, and day.
</p>
<div class="informaltable"><table class="table">
<colgroup>
<col>
<col>
</colgroup>
<thead><tr>
<th>
<p>
Symbol
</p>
</th>
<th>
<p>
Version
</p>
</th>
</tr></thead>
<tbody>
<tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">__GLIBCXX__</span></code>
</p>
</td>
<td>
<p>
<span class="bold"><strong>detection</strong></span>
</p>
</td>
</tr>
<tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">__GLIBCPP__</span></code>
</p>
</td>
<td>
<p>
<span class="bold"><strong>detection</strong></span>
</p>
</td>
</tr>
<tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">__GLIBCXX__</span></code>
</p>
</td>
<td>
<p>
V.R.P
</p>
</td>
</tr>
<tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">__GLIBCPP__</span></code>
</p>
</td>
<td>
<p>
V.R.P
</p>
</td>
</tr>
</tbody>
</table></div>
<h5>
<a name="predef.reference.boost_lib_library_macros.h12"></a>
<span class="phrase"><a name="predef.reference.boost_lib_library_macros.boost_lib_std_stlport"></a></span><a class="link" href="boost_lib_library_macros.html#predef.reference.boost_lib_library_macros.boost_lib_std_stlport"><code class="computeroutput"><span class="identifier">BOOST_LIB_STD_STLPORT</span></code></a>
</h5>
<p>
<a href="http://sourceforge.net/projects/stlport/" target="_top">STLport Standard C++</a>
library. Version number available as major, minor, and patch.
</p>
<div class="informaltable"><table class="table">
<colgroup>
<col>
<col>
</colgroup>
<thead><tr>
<th>
<p>
Symbol
</p>
</th>
<th>
<p>
Version
</p>
</th>
</tr></thead>
<tbody>
<tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">__SGI_STL_PORT</span></code>
</p>
</td>
<td>
<p>
<span class="bold"><strong>detection</strong></span>
</p>
</td>
</tr>
<tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">_STLPORT_VERSION</span></code>
</p>
</td>
<td>
<p>
<span class="bold"><strong>detection</strong></span>
</p>
</td>
</tr>
<tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">_STLPORT_MAJOR</span></code>,
<code class="computeroutput"><span class="identifier">_STLPORT_MINOR</span></code>,
<code class="computeroutput"><span class="identifier">_STLPORT_PATCHLEVEL</span></code>
</p>
</td>
<td>
<p>
V.R.P
</p>
</td>
</tr>
<tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">_STLPORT_VERSION</span></code>
</p>
</td>
<td>
<p>
V.R.P
</p>
</td>
</tr>
<tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">__SGI_STL_PORT</span></code>
</p>
</td>
<td>
<p>
V.R.P
</p>
</td>
</tr>
</tbody>
</table></div>
<h5>
<a name="predef.reference.boost_lib_library_macros.h13"></a>
<span class="phrase"><a name="predef.reference.boost_lib_library_macros.boost_lib_std_ibm"></a></span><a class="link" href="boost_lib_library_macros.html#predef.reference.boost_lib_library_macros.boost_lib_std_ibm"><code class="computeroutput"><span class="identifier">BOOST_LIB_STD_IBM</span></code></a>
</h5>
<p>
<a href="http://www.ibm.com/software/awdtools/xlcpp/" target="_top">IBM VACPP Standard
C++</a> library.
</p>
<div class="informaltable"><table class="table">
<colgroup>
<col>
<col>
</colgroup>
<thead><tr>
<th>
<p>
Symbol
</p>
</th>
<th>
<p>
Version
</p>
</th>
</tr></thead>
<tbody><tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">__IBMCPP__</span></code>
</p>
</td>
<td>
<p>
<span class="bold"><strong>detection</strong></span>
</p>
</td>
</tr></tbody>
</table></div>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
<td align="right"><div class="copyright-footer">Copyright &#169; 2005, 2008-2015 Rene
Rivera<br>Copyright &#169; 2015 Charly Chevalier<br>Copyright &#169; 2015 Joel Falcou<p>
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
</p>
</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="boost_lang_language_standards_ma.html"><img src="../../images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../images/home.png" alt="Home"></a><a accesskey="n" href="boost_os_operating_system_macros.html"><img src="../../images/next.png" alt="Next"></a>
</div>
</body>
</html>

File diff suppressed because it is too large Load Diff

View File

@ -1,277 +0,0 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>BOOST_PLAT platform macros</title>
<link rel="stylesheet" href="../../boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="../../index.html" title="Predef 1.4">
<link rel="up" href="../reference.html" title="Reference">
<link rel="prev" href="boost_os_operating_system_macros.html" title="BOOST_OS operating system macros">
<link rel="next" href="boost_hw_hardware_macros.html" title="BOOST_HW hardware macros">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<div class="spirit-nav">
<a accesskey="p" href="boost_os_operating_system_macros.html"><img src="../../images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../images/home.png" alt="Home"></a><a accesskey="n" href="boost_hw_hardware_macros.html"><img src="../../images/next.png" alt="Next"></a>
</div>
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="predef.reference.boost_plat_platform_macros"></a><a class="link" href="boost_plat_platform_macros.html" title="BOOST_PLAT platform macros"><code class="computeroutput"><span class="identifier">BOOST_PLAT</span></code> platform macros</a>
</h3></div></div></div>
<h5>
<a name="predef.reference.boost_plat_platform_macros.h0"></a>
<span class="phrase"><a name="predef.reference.boost_plat_platform_macros.boost_plat_mingw"></a></span><a class="link" href="boost_plat_platform_macros.html#predef.reference.boost_plat_platform_macros.boost_plat_mingw"><code class="computeroutput"><span class="identifier">BOOST_PLAT_MINGW</span></code></a>
</h5>
<p>
<a href="http://en.wikipedia.org/wiki/MinGW" target="_top">MinGW</a> platform. Version
number available as major, minor, and patch.
</p>
<div class="informaltable"><table class="table">
<colgroup>
<col>
<col>
</colgroup>
<thead><tr>
<th>
<p>
Symbol
</p>
</th>
<th>
<p>
Version
</p>
</th>
</tr></thead>
<tbody>
<tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">__MINGW32__</span></code>
</p>
</td>
<td>
<p>
<span class="bold"><strong>detection</strong></span>
</p>
</td>
</tr>
<tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">__MINGW64__</span></code>
</p>
</td>
<td>
<p>
<span class="bold"><strong>detection</strong></span>
</p>
</td>
</tr>
<tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">__MINGW64_VERSION_MAJOR</span></code>,
<code class="computeroutput"><span class="identifier">__MINGW64_VERSION_MINOR</span></code>
</p>
</td>
<td>
<p>
V.R.0
</p>
</td>
</tr>
<tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">__MINGW32_VERSION_MAJOR</span></code>,
<code class="computeroutput"><span class="identifier">__MINGW32_VERSION_MINOR</span></code>
</p>
</td>
<td>
<p>
V.R.0
</p>
</td>
</tr>
</tbody>
</table></div>
<h5>
<a name="predef.reference.boost_plat_platform_macros.h1"></a>
<span class="phrase"><a name="predef.reference.boost_plat_platform_macros.boost_plat_windows_desktop"></a></span><a class="link" href="boost_plat_platform_macros.html#predef.reference.boost_plat_platform_macros.boost_plat_windows_desktop"><code class="computeroutput"><span class="identifier">BOOST_PLAT_WINDOWS_DESKTOP</span></code></a>
</h5>
<div class="informaltable"><table class="table">
<colgroup>
<col>
<col>
</colgroup>
<thead><tr>
<th>
<p>
Symbol
</p>
</th>
<th>
<p>
Version
</p>
</th>
</tr></thead>
<tbody>
<tr>
<td>
<p>
<code class="computeroutput"><span class="special">!</span><span class="identifier">WINAPI_FAMILY</span></code>
</p>
</td>
<td>
<p>
<span class="bold"><strong>detection</strong></span>
</p>
</td>
</tr>
<tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">WINAPI_FAMILY</span> <span class="special">==</span> <span class="identifier">WINAPI_FAMILY_DESKTOP_APP</span></code>
</p>
</td>
<td>
<p>
<span class="bold"><strong>detection</strong></span>
</p>
</td>
</tr>
</tbody>
</table></div>
<h5>
<a name="predef.reference.boost_plat_platform_macros.h2"></a>
<span class="phrase"><a name="predef.reference.boost_plat_platform_macros.boost_plat_windows_phone"></a></span><a class="link" href="boost_plat_platform_macros.html#predef.reference.boost_plat_platform_macros.boost_plat_windows_phone"><code class="computeroutput"><span class="identifier">BOOST_PLAT_WINDOWS_PHONE</span></code></a>
</h5>
<div class="informaltable"><table class="table">
<colgroup>
<col>
<col>
</colgroup>
<thead><tr>
<th>
<p>
Symbol
</p>
</th>
<th>
<p>
Version
</p>
</th>
</tr></thead>
<tbody><tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">WINAPI_FAMILY</span> <span class="special">==</span> <span class="identifier">WINAPI_FAMILY_PHONE_APP</span></code>
</p>
</td>
<td>
<p>
<span class="bold"><strong>detection</strong></span>
</p>
</td>
</tr></tbody>
</table></div>
<h5>
<a name="predef.reference.boost_plat_platform_macros.h3"></a>
<span class="phrase"><a name="predef.reference.boost_plat_platform_macros.boost_plat_windows_runtime"></a></span><a class="link" href="boost_plat_platform_macros.html#predef.reference.boost_plat_platform_macros.boost_plat_windows_runtime"><code class="computeroutput"><span class="identifier">BOOST_PLAT_WINDOWS_RUNTIME</span></code></a>
</h5>
<div class="informaltable"><table class="table">
<colgroup>
<col>
<col>
</colgroup>
<thead><tr>
<th>
<p>
Symbol
</p>
</th>
<th>
<p>
Version
</p>
</th>
</tr></thead>
<tbody>
<tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">WINAPI_FAMILY</span> <span class="special">==</span> <span class="identifier">WINAPI_FAMILY_APP</span></code>
</p>
</td>
<td>
<p>
<span class="bold"><strong>detection</strong></span>
</p>
</td>
</tr>
<tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">WINAPI_FAMILY</span> <span class="special">==</span> <span class="identifier">WINAPI_FAMILY_PHONE_APP</span></code>
</p>
</td>
<td>
<p>
<span class="bold"><strong>detection</strong></span>
</p>
</td>
</tr>
</tbody>
</table></div>
<h5>
<a name="predef.reference.boost_plat_platform_macros.h4"></a>
<span class="phrase"><a name="predef.reference.boost_plat_platform_macros.boost_plat_windows_store"></a></span><a class="link" href="boost_plat_platform_macros.html#predef.reference.boost_plat_platform_macros.boost_plat_windows_store"><code class="computeroutput"><span class="identifier">BOOST_PLAT_WINDOWS_STORE</span></code></a>
</h5>
<div class="informaltable"><table class="table">
<colgroup>
<col>
<col>
</colgroup>
<thead><tr>
<th>
<p>
Symbol
</p>
</th>
<th>
<p>
Version
</p>
</th>
</tr></thead>
<tbody><tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">WINAPI_FAMILY</span> <span class="special">==</span> <span class="identifier">WINAPI_FAMILY_APP</span></code>
</p>
</td>
<td>
<p>
<span class="bold"><strong>detection</strong></span>
</p>
</td>
</tr></tbody>
</table></div>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
<td align="right"><div class="copyright-footer">Copyright &#169; 2005, 2008-2015 Rene
Rivera<br>Copyright &#169; 2015 Charly Chevalier<br>Copyright &#169; 2015 Joel Falcou<p>
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
</p>
</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="boost_os_operating_system_macros.html"><img src="../../images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../images/home.png" alt="Home"></a><a accesskey="n" href="boost_hw_hardware_macros.html"><img src="../../images/next.png" alt="Next"></a>
</div>
</body>
</html>

View File

@ -1,85 +0,0 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Other macros</title>
<link rel="stylesheet" href="../../boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="../../index.html" title="Predef 1.4">
<link rel="up" href="../reference.html" title="Reference">
<link rel="prev" href="boost_hw_hardware_macros.html" title="BOOST_HW hardware macros">
<link rel="next" href="version_definition_macros.html" title="Version definition macros">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<div class="spirit-nav">
<a accesskey="p" href="boost_hw_hardware_macros.html"><img src="../../images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../images/home.png" alt="Home"></a><a accesskey="n" href="version_definition_macros.html"><img src="../../images/next.png" alt="Next"></a>
</div>
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="predef.reference.other_macros"></a><a class="link" href="other_macros.html" title="Other macros">Other macros</a>
</h3></div></div></div>
<h5>
<a name="predef.reference.other_macros.h0"></a>
<span class="phrase"><a name="predef.reference.other_macros.boost_endian"></a></span><a class="link" href="other_macros.html#predef.reference.other_macros.boost_endian"><code class="computeroutput"><span class="identifier">BOOST_ENDIAN_</span><span class="special">*</span></code></a>
</h5>
<p>
Detection of endian memory ordering. There are four defined macros in this
header that define the various generally possible endian memory orderings:
</p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
<code class="computeroutput"><span class="identifier">BOOST_ENDIAN_BIG_BYTE</span></code>,
byte-swapped big-endian.
</li>
<li class="listitem">
<code class="computeroutput"><span class="identifier">BOOST_ENDIAN_BIG_WORD</span></code>,
word-swapped big-endian.
</li>
<li class="listitem">
<code class="computeroutput"><span class="identifier">BOOST_ENDIAN_LITTLE_BYTE</span></code>,
byte-swapped little-endian.
</li>
<li class="listitem">
<code class="computeroutput"><span class="identifier">BOOST_ENDIAN_LITTLE_WORD</span></code>,
word-swapped little-endian.
</li>
</ul></div>
<p>
The detection is conservative in that it only identifies endianness that
it knows for certain. In particular bi-endianness is not indicated as is
it not practically possible to determine the endianness from anything but
an operating system provided header. And the currently known headers do not
define that programatic bi-endianness is available.
</p>
<p>
This implementation is a compilation of various publicly available information
and acquired knowledge:
</p>
<div class="orderedlist"><ol class="orderedlist" type="1">
<li class="listitem">
The indispensable documentation of "Pre-defined Compiler Macros"
<a href="http://sourceforge.net/p/predef/wiki/Endianness" target="_top">Endianness</a>.
</li>
<li class="listitem">
The various endian specifications available in the <a href="http://wikipedia.org/" target="_top">Wikipedia</a>
computer architecture pages.
</li>
<li class="listitem">
Generally available searches for headers that define endianness.
</li>
</ol></div>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
<td align="right"><div class="copyright-footer">Copyright &#169; 2005, 2008-2015 Rene
Rivera<br>Copyright &#169; 2015 Charly Chevalier<br>Copyright &#169; 2015 Joel Falcou<p>
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
</p>
</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="boost_hw_hardware_macros.html"><img src="../../images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../images/home.png" alt="Home"></a><a accesskey="n" href="version_definition_macros.html"><img src="../../images/next.png" alt="Next"></a>
</div>
</body>
</html>

View File

@ -1,188 +0,0 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Version definition macros</title>
<link rel="stylesheet" href="../../boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="../../index.html" title="Predef 1.4">
<link rel="up" href="../reference.html" title="Reference">
<link rel="prev" href="other_macros.html" title="Other macros">
<link rel="next" href="../check_utilities.html" title="Check Utilities">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<div class="spirit-nav">
<a accesskey="p" href="other_macros.html"><img src="../../images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../images/home.png" alt="Home"></a><a accesskey="n" href="../check_utilities.html"><img src="../../images/next.png" alt="Next"></a>
</div>
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="predef.reference.version_definition_macros"></a><a class="link" href="version_definition_macros.html" title="Version definition macros">Version definition
macros</a>
</h3></div></div></div>
<h5>
<a name="predef.reference.version_definition_macros.h0"></a>
<span class="phrase"><a name="predef.reference.version_definition_macros.boost_version_number"></a></span><a class="link" href="version_definition_macros.html#predef.reference.version_definition_macros.boost_version_number"><code class="computeroutput"><span class="identifier">BOOST_VERSION_NUMBER</span></code></a>
</h5>
<pre class="programlisting"><span class="identifier">BOOST_VERSION_NUMBER</span><span class="special">(</span><span class="identifier">major</span><span class="special">,</span><span class="identifier">minor</span><span class="special">,</span><span class="identifier">patch</span><span class="special">)</span>
</pre>
<p>
Defines standard version numbers, with these properties:
</p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
Decimal base whole numbers in the range [0,1000000000). The number range
is designed to allow for a (2,2,5) triplet. Which fits within a 32 bit
value.
</li>
<li class="listitem">
The <code class="computeroutput"><span class="identifier">major</span></code> number can
be in the [0,99] range.
</li>
<li class="listitem">
The <code class="computeroutput"><span class="identifier">minor</span></code> number can
be in the [0,99] range.
</li>
<li class="listitem">
The <code class="computeroutput"><span class="identifier">patch</span></code> number can
be in the [0,99999] range.
</li>
<li class="listitem">
Values can be specified in any base. As the defined value is an constant
expression.
</li>
<li class="listitem">
Value can be directly used in both preprocessor and compiler expressions
for comparison to other similarly defined values.
</li>
<li class="listitem">
The implementation enforces the individual ranges for the major, minor,
and patch numbers. And values over the ranges are truncated (modulo).
</li>
</ul></div>
<h5>
<a name="predef.reference.version_definition_macros.h1"></a>
<span class="phrase"><a name="predef.reference.version_definition_macros.boost_predef_make_macros"></a></span><a class="link" href="version_definition_macros.html#predef.reference.version_definition_macros.boost_predef_make_macros"><code class="computeroutput"><span class="identifier">BOOST_PREDEF_MAKE_</span><span class="special">..</span></code>
macros</a>
</h5>
<p>
These set of macros decompose common vendor version number macros which are
composed version, revision, and patch digits. The naming convention indicates:
</p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
The base of the specified version number. "<code class="computeroutput"><span class="identifier">BOOST_PREDEF_MAKE_0X</span></code>"
for hexadecimal digits, and "<code class="computeroutput"><span class="identifier">BOOST_PREDEF_MAKE_10</span></code>"
for decimal digits.
</li>
<li class="listitem">
The format of the vendor version number. Where "<code class="computeroutput"><span class="identifier">V</span></code>"
indicates the version digits, "<code class="computeroutput"><span class="identifier">R</span></code>"
indicates the revision digits, "<code class="computeroutput"><span class="identifier">P</span></code>"
indicates the patch digits, and "<code class="computeroutput"><span class="number">0</span></code>"
indicates an ignored digit.
</li>
</ul></div>
<p>
Macros are:
</p>
<p>
<code class="computeroutput"><span class="identifier">BOOST_PREDEF_MAKE_0X_VRP</span><span class="special">(</span><span class="identifier">V</span><span class="special">)</span></code>
</p>
<p>
<code class="computeroutput"><span class="identifier">BOOST_PREDEF_MAKE_0X_VVRP</span><span class="special">(</span><span class="identifier">V</span><span class="special">)</span></code>
</p>
<p>
<code class="computeroutput"><span class="identifier">BOOST_PREDEF_MAKE_0X_VRPP</span><span class="special">(</span><span class="identifier">V</span><span class="special">)</span></code>
</p>
<p>
<code class="computeroutput"><span class="identifier">BOOST_PREDEF_MAKE_0X_VVRR</span><span class="special">(</span><span class="identifier">V</span><span class="special">)</span></code>
</p>
<p>
<code class="computeroutput"><span class="identifier">BOOST_PREDEF_MAKE_0X_VRRPPPP</span><span class="special">(</span><span class="identifier">V</span><span class="special">)</span></code>
</p>
<p>
<code class="computeroutput"><span class="identifier">BOOST_PREDEF_MAKE_0X_VVRRP</span><span class="special">(</span><span class="identifier">V</span><span class="special">)</span></code>
</p>
<p>
<code class="computeroutput"><span class="identifier">BOOST_PREDEF_MAKE_0X_VRRPP000</span><span class="special">(</span><span class="identifier">V</span><span class="special">)</span></code>
</p>
<p>
<code class="computeroutput"><span class="identifier">BOOST_PREDEF_MAKE_0X_VVRRPP</span><span class="special">(</span><span class="identifier">V</span><span class="special">)</span></code>
</p>
<p>
<code class="computeroutput"><span class="identifier">BOOST_PREDEF_MAKE_10_VPPP</span><span class="special">(</span><span class="identifier">V</span><span class="special">)</span></code>
</p>
<p>
<code class="computeroutput"><span class="identifier">BOOST_PREDEF_MAKE_10_VRP</span><span class="special">(</span><span class="identifier">V</span><span class="special">)</span></code>
</p>
<p>
<code class="computeroutput"><span class="identifier">BOOST_PREDEF_MAKE_10_VRP000</span><span class="special">(</span><span class="identifier">V</span><span class="special">)</span></code>
</p>
<p>
<code class="computeroutput"><span class="identifier">BOOST_PREDEF_MAKE_10_VRPP</span><span class="special">(</span><span class="identifier">V</span><span class="special">)</span></code>
</p>
<p>
<code class="computeroutput"><span class="identifier">BOOST_PREDEF_MAKE_10_VRR</span><span class="special">(</span><span class="identifier">V</span><span class="special">)</span></code>
</p>
<p>
<code class="computeroutput"><span class="identifier">BOOST_PREDEF_MAKE_10_VRRPP</span><span class="special">(</span><span class="identifier">V</span><span class="special">)</span></code>
</p>
<p>
<code class="computeroutput"><span class="identifier">BOOST_PREDEF_MAKE_10_VRR000</span><span class="special">(</span><span class="identifier">V</span><span class="special">)</span></code>
</p>
<p>
<code class="computeroutput"><span class="identifier">BOOST_PREDEF_MAKE_10_VV00</span><span class="special">(</span><span class="identifier">V</span><span class="special">)</span></code>
</p>
<p>
<code class="computeroutput"><span class="identifier">BOOST_PREDEF_MAKE_10_VVRR</span><span class="special">(</span><span class="identifier">V</span><span class="special">)</span></code>
</p>
<p>
<code class="computeroutput"><span class="identifier">BOOST_PREDEF_MAKE_10_VVRRPP</span><span class="special">(</span><span class="identifier">V</span><span class="special">)</span></code>
</p>
<p>
<code class="computeroutput"><span class="identifier">BOOST_PREDEF_MAKE_10_VVRR0PP00</span><span class="special">(</span><span class="identifier">V</span><span class="special">)</span></code>
</p>
<p>
<code class="computeroutput"><span class="identifier">BOOST_PREDEF_MAKE_10_VVRR0PPPP</span><span class="special">(</span><span class="identifier">V</span><span class="special">)</span></code>
</p>
<p>
<code class="computeroutput"><span class="identifier">BOOST_PREDEF_MAKE_10_VVRR00PP00</span><span class="special">(</span><span class="identifier">V</span><span class="special">)</span></code>
</p>
<h5>
<a name="predef.reference.version_definition_macros.h2"></a>
<span class="phrase"><a name="predef.reference.version_definition_macros.boost_predef_make_date_macros"></a></span><a class="link" href="version_definition_macros.html#predef.reference.version_definition_macros.boost_predef_make_date_macros"><code class="computeroutput"><span class="identifier">BOOST_PREDEF_MAKE_</span><span class="special">*..</span></code>
date macros</a>
</h5>
<p>
Date decomposition macros return a date in the relative to the 1970 Epoch
date. If the month is not available, January 1st is used as the month and
day. If the day is not available, but the month is, the 1st of the month
is used as the day.
</p>
<p>
<code class="computeroutput"><span class="identifier">BOOST_PREDEF_MAKE_DATE</span><span class="special">(</span><span class="identifier">Y</span><span class="special">,</span><span class="identifier">M</span><span class="special">,</span><span class="identifier">D</span><span class="special">)</span></code>
</p>
<p>
<code class="computeroutput"><span class="identifier">BOOST_PREDEF_MAKE_YYYYMMDD</span><span class="special">(</span><span class="identifier">V</span><span class="special">)</span></code>
</p>
<p>
<code class="computeroutput"><span class="identifier">BOOST_PREDEF_MAKE_YYYY</span><span class="special">(</span><span class="identifier">V</span><span class="special">)</span></code>
</p>
<p>
<code class="computeroutput"><span class="identifier">BOOST_PREDEF_MAKE_YYYYMM</span><span class="special">(</span><span class="identifier">V</span><span class="special">)</span></code>
</p>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
<td align="right"><div class="copyright-footer">Copyright &#169; 2005, 2008-2015 Rene
Rivera<br>Copyright &#169; 2015 Charly Chevalier<br>Copyright &#169; 2015 Joel Falcou<p>
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
</p>
</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="other_macros.html"><img src="../../images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../images/home.png" alt="Home"></a><a accesskey="n" href="../check_utilities.html"><img src="../../images/next.png" alt="Next"></a>
</div>
</body>
</html>

View File

@ -1,43 +0,0 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>To Do</title>
<link rel="stylesheet" href="../boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="../index.html" title="Predef 1.4">
<link rel="up" href="../index.html" title="Predef 1.4">
<link rel="prev" href="history.html" title="History">
<link rel="next" href="acknoledgements.html" title="Acknoledgements">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<div class="spirit-nav">
<a accesskey="p" href="history.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="acknoledgements.html"><img src="../images/next.png" alt="Next"></a>
</div>
<div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="predef.to_do"></a><a class="link" href="to_do.html" title="To Do">To Do</a>
</h2></div></div></div>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
Improve reference documentation.
</li>
<li class="listitem">
Provide BOOST_WORKAROUND style macros for public use.
</li>
</ul></div>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
<td align="right"><div class="copyright-footer">Copyright &#169; 2005, 2008-2015 Rene
Rivera<br>Copyright &#169; 2015 Charly Chevalier<br>Copyright &#169; 2015 Joel Falcou<p>
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
</p>
</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="history.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="acknoledgements.html"><img src="../images/next.png" alt="Next"></a>
</div>
</body>
</html>

View File

@ -1,234 +0,0 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Using the predefs</title>
<link rel="stylesheet" href="../boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
<link rel="home" href="../index.html" title="Predef 1.4">
<link rel="up" href="../index.html" title="Predef 1.4">
<link rel="prev" href="introduction.html" title="Introduction">
<link rel="next" href="adding_new_predefs.html" title="Adding new predefs">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<div class="spirit-nav">
<a accesskey="p" href="introduction.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="adding_new_predefs.html"><img src="../images/next.png" alt="Next"></a>
</div>
<div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="predef.using_the_predefs"></a><a class="link" href="using_the_predefs.html" title="Using the predefs">Using the predefs</a>
</h2></div></div></div>
<p>
To use the automatically defined predefs one needs to only include the single
top-level header:
</p>
<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">predef</span><span class="special">.</span><span class="identifier">h</span><span class="special">&gt;</span>
</pre>
<p>
This defines <span class="bold"><strong>all</strong></span> the version macros known
to the library. For each macro it will be defined to either a <span class="emphasis"><em>zero</em></span>
valued expression for when the particular item is not detected, and to a <span class="emphasis"><em>positive</em></span>
value if it is detected. The predef macros fall onto five categories each with
macros of a particular prefix:
</p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
<code class="computeroutput"><span class="identifier">BOOST_ARCH_</span></code>for system/CPU
architecture one is compiling for.
</li>
<li class="listitem">
<code class="computeroutput"><span class="identifier">BOOST_COMP_</span></code> for the compiler
one is using.
</li>
<li class="listitem">
<code class="computeroutput"><span class="identifier">BOOST_LANG_</span></code> for language
standards one is compiling against.
</li>
<li class="listitem">
<code class="computeroutput"><span class="identifier">BOOST_LIB_C_</span></code> and <code class="computeroutput"><span class="identifier">BOOST_LIB_STD_</span></code> for the C and C++ standard
library in use.
</li>
<li class="listitem">
<code class="computeroutput"><span class="identifier">BOOST_OS_</span></code> for the operating
system we are compiling to.
</li>
<li class="listitem">
<code class="computeroutput"><span class="identifier">BOOST_PLAT_</span></code> for platforms
on top of operating system or compilers.
</li>
<li class="listitem">
<code class="computeroutput"><span class="identifier">BOOST_ENDIAN_</span></code> for endianness
of the os and architecture combination.
</li>
<li class="listitem">
<code class="computeroutput"><span class="identifier">BOOST_HW_</span></code> for hardware
specific features.
</li>
<li class="listitem">
<code class="computeroutput"><span class="identifier">BOOST_HW_SIMD</span></code> for SIMD
(Single Instruction Multiple Data) detection.
</li>
</ul></div>
<div class="note"><table border="0" summary="Note">
<tr>
<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../images/note.png"></td>
<th align="left">Note</th>
</tr>
<tr><td align="left" valign="top"><p>
The detected definitions are for the configuration one is targeting during
the compile. In particular in a cross-compile this means the target system,
and not the host system.
</p></td></tr>
</table></div>
<p>
One uses the individual definitions to compare against specific versions by
comparing against the <code class="computeroutput"><span class="identifier">BOOST_VERSION_NUMBER</span></code>
macro. For example, to make a choice based on the version of the GCC C++ compiler
one would:
</p>
<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">predef</span><span class="special">.</span><span class="identifier">h</span><span class="special">&gt;</span>
<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
<span class="special">{</span>
<span class="keyword">if</span> <span class="special">(</span><span class="identifier">BOOST_COMP_GNUC</span> <span class="special">&gt;=</span> <span class="identifier">BOOST_VERSION_NUMBER</span><span class="special">(</span><span class="number">4</span><span class="special">,</span><span class="number">0</span><span class="special">,</span><span class="number">0</span><span class="special">))</span>
<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"GCC compiler is at least version 4.0.0"</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
<span class="keyword">else</span>
<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"GCC compiler is at older than version 4.0.0, or not a GCC compiler"</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
<span class="keyword">return</span> <span class="number">0</span><span class="special">;</span>
<span class="special">}</span>
</pre>
<p>
As you might notice above the <code class="computeroutput"><span class="keyword">else</span></code>
clause also covers the case where the particular compiler is not detected.
But one can make the test also test for the detection. All predef definitions
are defined as a zero (0) expression when not detected. Hence one could use
the detection with a natural single condition. For example:
</p>
<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">predef</span><span class="special">.</span><span class="identifier">h</span><span class="special">&gt;</span>
<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
<span class="special">{</span>
<span class="keyword">if</span> <span class="special">(</span><span class="identifier">BOOST_COMP_GNUC</span><span class="special">)</span>
<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"This is GNU GCC!"</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
<span class="keyword">else</span>
<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Not GNU GCC."</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
<span class="keyword">return</span> <span class="number">0</span><span class="special">;</span>
<span class="special">}</span>
</pre>
<p>
And since the predef's are preprocessor definitions the same is possible from
the preprocessor:
</p>
<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">predef</span><span class="special">.</span><span class="identifier">h</span><span class="special">&gt;</span>
<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
<span class="preprocessor">#if</span> <span class="identifier">BOOST_COMP_GNUC</span>
<span class="preprocessor">#if</span> <span class="identifier">BOOST_COMP_GNUC</span> <span class="special">&gt;=</span> <span class="identifier">BOOST_VERSION_NUMBER</span><span class="special">(</span><span class="number">4</span><span class="special">,</span><span class="number">0</span><span class="special">,</span><span class="number">0</span><span class="special">)</span>
<span class="keyword">const</span> <span class="keyword">char</span> <span class="special">*</span> <span class="identifier">the_compiler</span> <span class="special">=</span> <span class="string">"GNU GCC, of at least version 4."</span>
<span class="preprocessor">#else</span>
<span class="keyword">const</span> <span class="keyword">char</span> <span class="special">*</span> <span class="identifier">the_compiler</span> <span class="special">=</span> <span class="string">"GNU GCC, less than version 4."</span>
<span class="preprocessor">#endif</span>
<span class="preprocessor">#else</span>
<span class="keyword">const</span> <span class="keyword">char</span> <span class="special">*</span> <span class="identifier">the_compiler</span> <span class="special">=</span> <span class="string">"Not GNU GCC."</span>
<span class="preprocessor">#endif</span>
<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
<span class="special">{</span>
<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">the_compiler</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
<span class="keyword">return</span> <span class="number">0</span><span class="special">;</span>
<span class="special">}</span>
</pre>
<p>
In addition, for each version macro defined there is an <code class="computeroutput"><span class="special">*</span><span class="identifier">_AVAILABLE</span></code> macro defined only when the particular
aspect is detected. I.e. a definition equivalent to:
</p>
<pre class="programlisting"><span class="preprocessor">#if</span> <span class="identifier">BOOST_PREDEF_ABC</span>
<span class="preprocessor">#define</span> <span class="identifier">BOOST_PREDEF_ABC_AVAILABLE</span>
<span class="preprocessor">#endif</span>
</pre>
<p>
Also for each aspect there is a macro defined with a descriptive name of what
the detection is.
</p>
<h4>
<a name="predef.using_the_predefs.h0"></a>
<span class="phrase"><a name="predef.using_the_predefs.the_emulated_macros"></a></span><a class="link" href="using_the_predefs.html#predef.using_the_predefs.the_emulated_macros">The
<code class="computeroutput"><span class="special">*</span><span class="identifier">_EMULATED</span></code>
macros</a>
</h4>
<p>
Predef definitions are guaranteed to be uniquely detected within one category.
But there are contexts under which multiple underlying detections are possible.
The well known example of this is detection of GCC and MSVC compilers which
are commonly emulated by other compilers by defining the same base macros.
To account for this detection headers are allowed to define <code class="computeroutput"><span class="special">*</span><span class="identifier">_EMULATED</span></code> predefs when this situation is
detected. The emulated predefs will be set to the version number of the detection
instead of the regular predef macro for that detection. For example MSVC will
set <code class="computeroutput"><span class="identifier">BOOST_COMP_MSVC_EMULATED</span></code>
but not set <code class="computeroutput"><span class="identifier">BOOST_COM_MSVC</span></code>,
and it will also set <code class="computeroutput"><span class="identifier">BOOST_COMP_MSVC_AVAILABLE</span></code>.
</p>
<h4>
<a name="predef.using_the_predefs.h1"></a>
<span class="phrase"><a name="predef.using_the_predefs.using_the_boost_version_number_m"></a></span><a class="link" href="using_the_predefs.html#predef.using_the_predefs.using_the_boost_version_number_m">Using the
<code class="computeroutput"><span class="identifier">BOOST_VERSION_NUMBER</span></code> macro</a>
</h4>
<p>
All the predefs are defined to be a use of the <code class="computeroutput"><span class="identifier">BOOST_VERSION_NUMBER</span></code>
macro. The macro takes individual major, minor, and patch value expressions:
</p>
<pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_VERSION_NUMBER</span><span class="special">(</span> <span class="identifier">major</span><span class="special">,</span> <span class="identifier">minor</span><span class="special">,</span> <span class="identifier">patch</span> <span class="special">)</span> <span class="special">...</span>
</pre>
<p>
The arguments are:
</p>
<div class="orderedlist"><ol class="orderedlist" type="1">
<li class="listitem">
Major version number, as a constant value expression in the range [0,99].
</li>
<li class="listitem">
Minor version number, as a constant value expression in the range [0,99].
</li>
<li class="listitem">
Patch-level version number, as a constant value expression in the range
[0,99999].
</li>
</ol></div>
<p>
The ranges for each are "enforced" by the use of a modulo ("%"),
i.e. truncation, as opposed to a clamp. And hence this means that the limits
are enforced only enough to keep from having out-of-range problems. But not
enough to prevent other kinds of problems. Like exceeding the range and getting
false detections, or non-detections. It is up to the individual predefs to
ensure correct usage beyond the range guarantee.
</p>
<p>
The values for the arguments can be any preprocessor valid constant value expression.
Only constant value arithmetic is used in the definition of the <code class="computeroutput"><span class="identifier">BOOST_VERSION_NUMBER</span></code> macro and in any of
the other predef macros. This means that any allowed base is possible, i.e.
binary, octal, decimal, and hexadecimal. For example:
</p>
<pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">MY_APPLICATION_VERSION_NUMBER</span> <span class="identifier">BOOST_VERSION_NUMBER</span><span class="special">(</span><span class="number">2</span><span class="special">,</span><span class="number">0xA</span><span class="special">,</span><span class="number">015</span><span class="special">)</span>
</pre>
<p>
Is equivalent to:
</p>
<pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">MY_APPLICATION_VERSION_NUMBER</span> <span class="identifier">BOOST_VERSION_NUMBER</span><span class="special">(</span><span class="number">2</span><span class="special">,</span><span class="number">10</span><span class="special">,</span><span class="number">13</span><span class="special">)</span>
</pre>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
<td align="right"><div class="copyright-footer">Copyright &#169; 2005, 2008-2015 Rene
Rivera<br>Copyright &#169; 2015 Charly Chevalier<br>Copyright &#169; 2015 Joel Falcou<p>
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
</p>
</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="introduction.html"><img src="../images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../images/home.png" alt="Home"></a><a accesskey="n" href="adding_new_predefs.html"><img src="../images/next.png" alt="Next"></a>
</div>
</body>
</html>

View File

@ -1,8 +1,8 @@
[article Predef
[article Boost.Predef
[quickbook 1.7]
[version 1.4]
[version 1.5]
[authors [Rivera, Rene]]
[copyright 2005, 2008-2015 Rene Rivera]
[copyright 2005-2016 Rene Rivera]
[copyright 2015 Charly Chevalier]
[copyright 2015 Joel Falcou]
[purpose Identification and specification of predefined macros.]
@ -12,6 +12,9 @@
[@http://www.boost.org/LICENSE_1_0.txt])
]
[source-mode c++]
[category miscellaneous]
[id predef]
[dirname predef]
]
[section Introduction]
@ -619,7 +622,7 @@ version information available in Predef. The basic use is simple:
[teletype]
``
import path-to-predef-src/check/predef
import path-to-predef-src/tools/check/predef
: check require
: predef-check predef-require ;
@ -635,7 +638,7 @@ For example:
[teletype]
``
import path-to-predef-src/check/predef
import path-to-predef-src/tools/check/predef
: check require
: predef-check predef-require ;
@ -663,7 +666,7 @@ to for more complex checks:
[teletype]
``
import path-to-predef-src/check/predef
import path-to-predef-src/tools/check/predef
: check require
: predef-check predef-require ;
@ -690,7 +693,7 @@ features in your programs:
[teletype]
``
import path-to-predef-src/check/predef
import path-to-predef-src/tools/check/predef
: check require
: predef-check predef-require ;

View File

@ -25,7 +25,8 @@ Version number available as major, minor, and patch.
[[`__ICC`] [__predef_detection__]]
[[`__ECC`] [__predef_detection__]]
[[`__INTEL_COMPILER`] [V.R.P]]
[[`__INTEL_COMPILER`] [V.R]]
[[`__INTEL_COMPILER` and `__INTEL_COMPILER_UPDATE`] [V.R.P]]
]
*/
@ -33,8 +34,14 @@ Version number available as major, minor, and patch.
#if defined(__INTEL_COMPILER) || defined(__ICL) || defined(__ICC) || \
defined(__ECC)
# if !defined(BOOST_COMP_INTEL_DETECTION) && defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE)
# define BOOST_COMP_INTEL_DETECTION BOOST_VERSION_NUMBER( \
BOOST_VERSION_NUMBER_MAJOR(BOOST_PREDEF_MAKE_10_VVRR(__INTEL_COMPILER)), \
BOOST_VERSION_NUMBER_MINOR(BOOST_PREDEF_MAKE_10_VVRR(__INTEL_COMPILER)), \
__INTEL_COMPILER_UPDATE)
# endif
# if !defined(BOOST_COMP_INTEL_DETECTION) && defined(__INTEL_COMPILER)
# define BOOST_COMP_INTEL_DETECTION BOOST_PREDEF_MAKE_10_VRP(__INTEL_COMPILER)
# define BOOST_COMP_INTEL_DETECTION BOOST_PREDEF_MAKE_10_VVRR(__INTEL_COMPILER)
# endif
# if !defined(BOOST_COMP_INTEL_DETECTION)
# define BOOST_COMP_INTEL_DETECTION BOOST_VERSION_NUMBER_AVAILABLE

View File

@ -29,6 +29,10 @@ Version number available as major, minor, and patch.
[[`_MSC_FULL_VER`] [V.R.P]]
[[`_MSC_VER`] [V.R.0]]
]
[note Release of Visual Studio after 2015 will no longer be identified
by Boost Predef as the marketing version number. Instead we use the
compiler version number directly, i.e. the _MSC_VER number.]
*/
#define BOOST_COMP_MSVC BOOST_VERSION_NUMBER_NOT_AVAILABLE
@ -53,8 +57,18 @@ Version number available as major, minor, and patch.
means that the compiler and VS product versions are no longer
in sync. Hence we need to use different formulas for
mapping from MSC version to VS product version.
VS2017 is a total nightmare when it comes to version numbers.
Hence to avoid arguments relating to that both present and
future.. Any version after VS2015 will use solely the compiler
version, i.e. cl.exe, as the version number here.
*/
# if (_MSC_VER >= 1900)
# if (_MSC_VER > 1900)
# define BOOST_COMP_MSVC_DETECTION BOOST_VERSION_NUMBER(\
_MSC_VER/100,\
_MSC_VER%100,\
BOOST_COMP_MSVC_BUILD)
# elif (_MSC_VER >= 1900)
# define BOOST_COMP_MSVC_DETECTION BOOST_VERSION_NUMBER(\
_MSC_VER/100-5,\
_MSC_VER%100,\

View File

@ -77,12 +77,24 @@ http://www.boost.org/LICENSE_1_0.txt)
# error "Multiple SIMD architectures detected, this cannot happen!"
#endif
#if defined(BOOST_HW_SIMD_X86_AVAILABLE)
# define BOOST_HW_SIMD BOOST_HW_SIMD_X86
#if defined(BOOST_HW_SIMD_X86_AVAILABLE) && defined(BOOST_HW_SIMD_X86_AMD_AVAILABLE)
// If both standard _X86 and _X86_AMD are available,
// then take the biggest version of the two!
# if BOOST_HW_SIMD_X86 >= BOOST_HW_SIMD_X86_AMD
# define BOOST_HW_SIMD BOOST_HW_SIMD_X86
# else
# define BOOST_HW_SIMD BOOST_HW_SIMD_X86_AMD
# endif
#endif
#if defined(BOOST_HW_SIMD_X86_AMD_AVAILABLE)
# define BOOST_HW_SIMD BOOST_HW_SIMD_X86_AMD
#if !defined(BOOST_HW_SIMD)
// At this point, only one of these two is defined
# if defined(BOOST_HW_SIMD_X86_AVAILABLE)
# define BOOST_HW_SIMD BOOST_HW_SIMD_X86
# endif
# if defined(BOOST_HW_SIMD_X86_AMD_AVAILABLE)
# define BOOST_HW_SIMD BOOST_HW_SIMD_X86_AMD
# endif
#endif
#if defined(BOOST_HW_SIMD_ARM_AVAILABLE)

View File

@ -67,7 +67,7 @@ http://www.boost.org/LICENSE_1_0.txt)
[[`__FMA__`] [BOOST_HW_SIMD_X86_FMA3_VERSION]]
[[`__AVX2__`] [BOOST_HW_SIMD_x86_AVX2_VERSION]]
[[`__AVX2__`] [BOOST_HW_SIMD_X86_AVX2_VERSION]]
]
*/
@ -99,10 +99,10 @@ http://www.boost.org/LICENSE_1_0.txt)
#if !defined(BOOST_HW_SIMD_X86) && defined(__SSE3__)
# define BOOST_HW_SIMD_X86 BOOST_HW_SIMD_X86_SSE3_VERSION
#endif
#if !defined(BOOST_HW_SIMD_X86) && (defined(__SSE2__) || defined(_M_X64) || _M_IX86_FP >= 2)
#if !defined(BOOST_HW_SIMD_X86) && (defined(__SSE2__) || defined(_M_X64) || (defined(_M_IX86_FP) && _M_IX86_FP >= 2))
# define BOOST_HW_SIMD_X86 BOOST_HW_SIMD_X86_SSE2_VERSION
#endif
#if !defined(BOOST_HW_SIMD_X86) && (defined(__SSE__) || defined(_M_X64) || _M_IX86_FP >= 1)
#if !defined(BOOST_HW_SIMD_X86) && (defined(__SSE__) || defined(_M_X64) || (defined(_M_IX86_FP) && _M_IX86_FP >= 1))
# define BOOST_HW_SIMD_X86 BOOST_HW_SIMD_X86_SSE_VERSION
#endif
#if !defined(BOOST_HW_SIMD_X86) && defined(__MMX__)

View File

@ -33,13 +33,13 @@ http://www.boost.org/LICENSE_1_0.txt)
[table
[[__predef_symbol__] [__predef_version__]]
[[`__SSE4A__`] [BOOST_HW_SIMD_x86_SSE4A_VERSION]]
[[`__SSE4A__`] [BOOST_HW_SIMD_X86_SSE4A_VERSION]]
[[`__FMA4__`] [BOOST_HW_SIMD_x86_FMA4_VERSION]]
[[`__FMA4__`] [BOOST_HW_SIMD_X86_FMA4_VERSION]]
[[`__XOP__`] [BOOST_HW_SIMD_x86_XOP_VERSION]]
[[`__XOP__`] [BOOST_HW_SIMD_X86_XOP_VERSION]]
[[`BOOST_HW_SIMD_X86`] [BOOST_HW_SIMD_x86]]
[[`BOOST_HW_SIMD_X86`] [BOOST_HW_SIMD_X86]]
]
[note This predef includes every other x86 SIMD extensions and also has other

View File

@ -21,7 +21,7 @@ http://www.boost.org/LICENSE_1_0.txt)
// ---------------------------------
/*`
[heading `BOOST_HW_SIMD_X86_SSE4A_VERSION`]
[heading `BOOST_HW_SIMD_X86_AMD_SSE4A_VERSION`]
[@https://en.wikipedia.org/wiki/SSE4##SSE4A SSE4A] x86 extension (AMD specific).
@ -30,16 +30,16 @@ http://www.boost.org/LICENSE_1_0.txt)
#define BOOST_HW_SIMD_X86_AMD_SSE4A_VERSION BOOST_VERSION_NUMBER(4, 0, 0)
/*`
[heading `BOOST_HW_SIMD_X86_XOP_VERSION`]
[heading `BOOST_HW_SIMD_X86_AMD_FMA4_VERSION`]
[@https://en.wikipedia.org/wiki/XOP_instruction_set XOP] x86 extension (AMD specific).
[@https://en.wikipedia.org/wiki/FMA_instruction_set#FMA4_instruction_set FMA4] x86 extension (AMD specific).
Version number is: *5.1.0*.
*/
#define BOOST_HW_SIMD_X86_AMD_FMA4_VERSION BOOST_VERSION_NUMBER(5, 1, 0)
/*`
[heading `BOOST_HW_SIMD_X86_XOP_VERSION`]
[heading `BOOST_HW_SIMD_X86_AMD_XOP_VERSION`]
[@https://en.wikipedia.org/wiki/XOP_instruction_set XOP] x86 extension (AMD specific).

View File

@ -29,7 +29,7 @@ http://www.boost.org/LICENSE_1_0.txt)
defined(__CYGWIN__) \
)
# undef BOOST_OS_CYGWIN
# define BOOST_OS_CGYWIN BOOST_VERSION_NUMBER_AVAILABLE
# define BOOST_OS_CYGWIN BOOST_VERSION_NUMBER_AVAILABLE
#endif
#if BOOST_OS_CYGWIN

View File

@ -1,5 +1,5 @@
/*
Copyright Rene Rivera 2015
Copyright Rene Rivera 2015-2016
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or copy at
http://www.boost.org/LICENSE_1_0.txt)
@ -10,6 +10,6 @@ http://www.boost.org/LICENSE_1_0.txt)
#include <boost/predef/version_number.h>
#define BOOST_PREDEF_VERSION BOOST_VERSION_NUMBER(1,4,0)
#define BOOST_PREDEF_VERSION BOOST_VERSION_NUMBER(1,5,0)
#endif

View File

@ -1,5 +1,5 @@
/*
Copyright Rene Rivera 2005, 2008-2013
Copyright Rene Rivera 2005-2016
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or copy at
http://www.boost.org/LICENSE_1_0.txt)
@ -50,4 +50,23 @@ Defines standard version numbers, with these properties:
#define BOOST_VERSION_NUMBER_NOT_AVAILABLE \
BOOST_VERSION_NUMBER_ZERO
/*`
``
BOOST_VERSION_NUMBER_MAJOR(N), BOOST_VERSION_NUMBER_MINOR(N), BOOST_VERSION_NUMBER_PATCH(N)
``
The macros extract the major, minor, and patch portion from a well formed
version number resulting in a preprocessor expression in the range of
\[0,99\] or \[0,99999\] for the major and minor, or patch numbers
respectively.
*/
#define BOOST_VERSION_NUMBER_MAJOR(N) \
( ((N)/10000000)%100 )
#define BOOST_VERSION_NUMBER_MINOR(N) \
( ((N)/100000)%100 )
#define BOOST_VERSION_NUMBER_PATCH(N) \
( (N)%100000 )
#endif

View File

@ -1,10 +1,10 @@
<html>
<head>
<meta http-equiv="refresh" content="0; URL=./doc/html/index.html">
<meta http-equiv="refresh" content="0; URL=../../doc/html/predef.html">
</head>
<body>
Automatic redirection failed, please go to
<a href="./doc/html/index.html">./doc/html/index.html</a>
<a href="../../doc/html/predef.html">../../doc/html/predef.html</a>
<p>Copyright&nbsp;Rene Rivera 2013-2014</p>
<p>Distributed under the Boost Software License, Version 1.0. (See accompanying file
<a href="../../LICENSE_1_0.txt">LICENSE_1_0.txt</a> or copy at

View File

@ -1,5 +1,5 @@
#!/usr/bin/env b2 -a --verbose-test
# Copyright Rene Rivera 2011-2013
# Copyright Rene Rivera 2011-2016
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or copy at
# http://www.boost.org/LICENSE_1_0.txt)
@ -64,4 +64,12 @@ test-suite predef :
# Minimal testing done for predef for CI. Since
# we don't have many we can just do all of them.
alias minimal : predef ;
# Full testing target for regular regression tests.
alias full : predef ;
# Extra's target. Nothing for Predef.
alias extra ;
explicit minimal ;
explicit extra ;

View File

@ -19,7 +19,7 @@ http://www.boost.org/LICENSE_1_0.txt)
#define CHECK_VALUE "undefined"
#endif
int main(int argc, const char ** argv)
int main()
{
std::cout << "CHECK_VALUE == " << CHECK_VALUE << "\n" ;
return 0;

View File

@ -6,7 +6,7 @@ http://www.boost.org/LICENSE_1_0.txt)
*/
#include <boost/predef/detail/test_def.h>
int main(int argc, const char ** argv)
int main()
{
unsigned x = 0;
create_predef_entries();

View File

@ -34,6 +34,27 @@ void test_BOOST_VERSION_NUMBER()
PREDEF_CHECK(BOOST_VERSION_NUMBER(100,99,99999) != 1009999999L);
PREDEF_CHECK(BOOST_VERSION_NUMBER(100,99,99999) == 9999999L);
PREDEF_CHECK(BOOST_VERSION_NUMBER(100,100,100000) == 0L);
PREDEF_CHECK(
BOOST_VERSION_NUMBER_MAJOR(BOOST_VERSION_NUMBER(0,0,0)) == 0);
PREDEF_CHECK(
BOOST_VERSION_NUMBER_MAJOR(BOOST_VERSION_NUMBER(3,3,3)) == 3);
PREDEF_CHECK(
BOOST_VERSION_NUMBER_MAJOR(BOOST_VERSION_NUMBER(99,99,99999)) == 99);
PREDEF_CHECK(
BOOST_VERSION_NUMBER_MINOR(BOOST_VERSION_NUMBER(0,0,0)) == 0);
PREDEF_CHECK(
BOOST_VERSION_NUMBER_MINOR(BOOST_VERSION_NUMBER(3,3,3)) == 3);
PREDEF_CHECK(
BOOST_VERSION_NUMBER_MINOR(BOOST_VERSION_NUMBER(99,99,99999)) == 99);
PREDEF_CHECK(
BOOST_VERSION_NUMBER_PATCH(BOOST_VERSION_NUMBER(0,0,0)) == 0);
PREDEF_CHECK(
BOOST_VERSION_NUMBER_PATCH(BOOST_VERSION_NUMBER(3,3,3)) == 3);
PREDEF_CHECK(
BOOST_VERSION_NUMBER_PATCH(BOOST_VERSION_NUMBER(99,99,99999)) == 99999);
}
int main()

202
tools/check/predef.jam Normal file
View File

@ -0,0 +1,202 @@
# Copyright Rene Rivera 2015
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or copy at
# http://www.boost.org/LICENSE_1_0.txt)
# Defines rules that provide requirements based on checking
# conditions using Boost Predef definitions and version numbers.
import modules ;
import project ;
import feature ;
import string ;
import toolset ;
import modules ;
import path ;
import "class" : new ;
import regex ;
# Create a project for our targets.
project.extension predef check ;
# Feature to pass check expressions to check programs.
feature.feature predef-expression : : free ;
# Checks the expressions and when used evaluates to the true-properties
# if the expressions are all true. Otherwise evaluates to the
# false-properties.
rule check ( expressions + : language ? : true-properties * : false-properties * )
{
# Default to C++ on the check context.
language ?= cpp ;
local project_target = [ project.target $(__name__) ] ;
project.push-current $(project_target) ;
local terms ;
local result ;
for expression in $(expressions)
{
if $(expression:L) in "and" "or"
{
terms += $(expression:L) ;
}
else
{
# Create the check run if we don't have one yet.
local key = [ MD5 $(language)::$(expression) ] ;
if ! ( $(key) in $(_checks_) )
{
_checks_ += $(key) ;
_message_(/check/predef//predef_check_cc_$(key)) = $(expression) ;
check_target $(language) $(key) : [ change_term_to_def $(expression) ] ;
}
terms += /check/predef//predef_check_cc_$(key) ;
}
}
local instance = [ new check-expression-evaluator
$(terms) : $(true-properties) : $(false-properties) ] ;
result = <conditional>@$(instance).check ;
project.pop-current ;
return $(result) ;
}
# Checks the expressions and when used evaluates to <build>no
# if the expressions are all false. Otherwise evaluates to the
# nothing.
rule require ( expressions + : language ? )
{
return [ check $(expressions) : $(language) : : <build>no ] ;
}
#############################################################################
.c.ext = c ;
.cpp.ext = cpp ;
.objc.ext = m ;
.objcpp.ext = mm ;
# Check targets. Each needs to be compiled for different languages
# even though they are all the same source code.
local rule check_target ( language key : requirements * )
{
# Need to use absolute paths because we don't know the
# context of the invocation which affects where the paths
# originate from.
local predef_jam
= [ modules.binding $(__name__) ] ;
local source_path
= $(predef_jam:D)/predef_check_cc_as_$(language).$(.$(language).ext) ;
local include_path
= $(predef_jam:D)/../../include ;
obj predef_check_cc_$(key)
: $(source_path)
: <include>$(include_path) $(requirements) ;
explicit predef_check_cc_$(key) ;
return predef_check_cc_$(key) ;
}
local rule change_term_to_def ( term )
{
local parts = [ regex.split $(term) " " ] ;
if $(parts[3])
{
local version_number = [ regex.split $(parts[3]) "[.]" ] ;
if ! $(version_number[3]) { version_number += "0" ; }
if ! $(version_number[2]) { version_number += "0" ; }
parts = $(parts[1-2]) BOOST_VERSION_NUMBER($(version_number:J=",")) ;
}
return <define>CHECK=\"$(parts:J=" ")\" ;
}
class check-expression-evaluator
{
import configure ;
rule __init__ ( expression + : true-properties * : false-properties * )
{
self.expression = $(expression) ;
self.true-properties = $(true-properties) ;
self.false-properties = $(false-properties) ;
}
rule check ( properties * )
{
local to-eval ;
local tokens = "and" "or" ;
# Go through the expression and: eval the target values,
# and normalize to a full expression.
for local term in $(self.expression)
{
if ! ( $(term:L) in $(tokens) )
{
# A value is a target reference that will evan to "true"
# or "false".
if $(to-eval[-1]:L) && ! ( $(to-eval[-1]:L) in $(tokens) )
{
# Default to "and" operation.
to-eval += "and" ;
}
local message = [ modules.peek predef : _message_($(term)) ] ;
if [ configure.builds $(term) : $(properties) : $(message) ]
{
to-eval += "true" ;
}
else
{
to-eval += "false" ;
}
}
else
{
to-eval += $(term) ;
}
}
# Eval full the expression.
local eval-result = [ eval $(to-eval) ] ;
# And resolve true/false properties.
if $(eval-result) = "true"
{
return $(self.true-properties) ;
}
else
{
return $(self.false-properties) ;
}
}
rule eval ( e * )
{
local r ;
if $(e[1]) && $(e[2]) && $(e[3])
{
if $(e[2]) = "and"
{
if $(e[1]) = "true" && $(e[3]) = "true"
{
r = [ eval "true" $(e[4-]) ] ;
}
else
{
r = [ eval "false" $(e[4-]) ] ;
}
}
else if $(e[2]) = "or"
{
if $(e[1]) = "true" || $(e[3]) = "true"
{
r = [ eval "true" $(e[4-]) ] ;
}
else
{
r = [ eval "false" $(e[4-]) ] ;
}
}
}
else
{
r = $(e[1]) ;
}
return $(r) ;
}
}