aboutsummaryrefslogtreecommitdiff
path: root/build2/cxx/guess
diff options
context:
space:
mode:
Diffstat (limited to 'build2/cxx/guess')
-rw-r--r--build2/cxx/guess112
1 files changed, 0 insertions, 112 deletions
diff --git a/build2/cxx/guess b/build2/cxx/guess
deleted file mode 100644
index 63858ad..0000000
--- a/build2/cxx/guess
+++ /dev/null
@@ -1,112 +0,0 @@
-// file : build2/cxx/guess -*- C++ -*-
-// copyright : Copyright (c) 2014-2016 Code Synthesis Ltd
-// license : MIT; see accompanying LICENSE file
-
-#ifndef BUILD2_CXX_GUESS
-#define BUILD2_CXX_GUESS
-
-#include <build2/types>
-#include <build2/utility>
-
-namespace build2
-{
- namespace cxx
- {
- // C++ compiler id consisting of a type and optional variant. If the
- // variant is not empty, then the id is spelled out as 'type-variant',
- // similar to target triplets (this also means that the type cannot
- // contain '-').
- //
- // Currently recognized compilers and their ids:
- //
- // gcc GCC g++
- // clang Vanilla Clang clang++
- // clang-apple Apple Clang clang++ and the g++ "alias"
- // icc Intel icpc
- // msvc Microsoft cl.exe
- //
- struct compiler_id
- {
- std::string type;
- std::string variant;
-
- bool
- empty () const {return type.empty ();}
-
- std::string
- string () const {return variant.empty () ? type : type + "-" + variant;}
- };
-
- inline ostream&
- operator<< (ostream& os, const compiler_id& id)
- {
- return os << id.string ();
- }
-
- // C++ compiler version. Here we map the various compiler version formats
- // to something that resembles the MAJOR.MINOR.PATCH-BUILD form of the
- // Semantic Versioning. While the MAJOR.MINOR part is relatively
- // straightforward, PATCH may be empty and BUILD can contain pretty much
- // anything (including spaces).
- //
- // gcc A.B.C[ ...] {A, B, C, ...}
- // clang A.B.C[( |-)...] {A, B, C, ...}
- // clang-apple A.B[.C] ... {A, B, C, ...}
- // icc A.B[.C.D] ... {A, B, C, D ...}
- // msvc A.B.C[.D] {A, B, C, D}
- //
- // Note that the clang-apple version is a custom Apple version and does
- // not correspond to the vanilla clang version.
- //
- struct compiler_version
- {
- std::string string;
-
- // Currently all the compilers that we support have numeric MAJOR,
- // MINOR, and PATCH components and it makes sense to represent them as
- // integers for easy comparison. If we meet a compiler for which this
- // doesn't hold, then we will probably just set these to 0 and let the
- // user deal with the string representation.
- //
- uint64_t major;
- uint64_t minor;
- uint64_t patch;
- std::string build;
- };
-
- // C++ compiler information.
- //
- // The signature is normally the -v/--version line that was used to guess
- // the compiler id and its version.
- //
- // The checksum is used to detect compiler changes. It is calculated in a
- // compiler-specific manner (usually the output of -v/--version) and is
- // not bulletproof (e.g., it most likely won't detect that the underlying
- // assembler or linker has changed). However, it should detect most
- // common cases, such as an upgrade to a new version or a configuration
- // change.
- //
- // Note that we assume the checksum incorporates the (default) target so
- // that if the compiler changes but only in what it targets, then the
- // checksum will still change. This is currently the case for all the
- // compilers that we support.
- //
- // The target is the compiler's traget architecture triplet. Note that
- // unlike all the preceding fields, this one takes into account the
- // compile options (e.g., -m32).
- //
- struct compiler_info
- {
- compiler_id id;
- compiler_version version;
- string signature;
- string checksum;
- string target;
- };
-
- compiler_info
- guess (const path& cxx, const strings* coptions);
- }
-}
-
-#endif // BUILD2_CXX_GUESS