aboutsummaryrefslogtreecommitdiff
path: root/build2/cc/guess
diff options
context:
space:
mode:
authorKaren Arutyunov <karen@codesynthesis.com>2017-05-01 18:24:31 +0300
committerKaren Arutyunov <karen@codesynthesis.com>2017-05-01 19:30:26 +0300
commit70317569c6dcd9809ed4a8c425777e653ec6ca08 (patch)
tree07a538b296933e9e2a1f81088f8fcc8da3f749ad /build2/cc/guess
parentcbec9ea8841c8a58b2d50bb628b28aea7a6fe179 (diff)
Add hxx extension for headers
Diffstat (limited to 'build2/cc/guess')
-rw-r--r--build2/cc/guess141
1 files changed, 0 insertions, 141 deletions
diff --git a/build2/cc/guess b/build2/cc/guess
deleted file mode 100644
index 593bd85..0000000
--- a/build2/cc/guess
+++ /dev/null
@@ -1,141 +0,0 @@
-// file : build2/cc/guess -*- C++ -*-
-// copyright : Copyright (c) 2014-2017 Code Synthesis Ltd
-// license : MIT; see accompanying LICENSE file
-
-#ifndef BUILD2_CC_GUESS
-#define BUILD2_CC_GUESS
-
-#include <build2/types>
-#include <build2/utility>
-
-#include <build2/cc/types>
-
-namespace build2
-{
- namespace cc
- {
- // 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 gcc/g++
- // clang Vanilla Clang clang/clang++
- // clang-apple Apple Clang clang/clang++ and the gcc/g++ "alias"
- // icc Intel icc/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 ();
- }
-
- // 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;
- };
-
- // 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).
- //
- // The cc_pattern is the toolchain program pattern that could sometimes be
- // derived for some toolchains. For example, i686-w64-mingw32-*-4.9.
- //
- // The bin_pattern is the binutils program pattern that could sometimes be
- // derived for some toolchains. For example, i686-w64-mingw32-*. If the
- // pattern could not be derived, then it could contain a fallback search
- // directory, in which case it will end with a directory separator but
- // will not contain '*'.
- //
- struct compiler_info
- {
- process_path path;
- compiler_id id;
- compiler_version version;
- string signature;
- string checksum;
- string target;
- string cc_pattern;
- string bin_pattern;
- };
-
- // In a sense this is analagous to the language standard which we handle
- // via a virtual function in common. However, duplicating this hairy ball
- // of fur in multiple places doesn't seem wise, especially considering
- // that most of it will be the same, at least for C and C++.
- //
- compiler_info
- guess (lang,
- const path& xc,
- const strings* c_coptions,
- const strings* x_coptions);
-
- // Given a language, toolchain id, and optionally a pattern, return an
- // appropriate default compiler path.
- //
- // For example, for (lang::cxx, gcc, *-4.9) we will get g++-4.9.
- //
- path
- guess_default (lang, const string& cid, const string* pattern);
- }
-}
-
-#endif // BUILD2_CC_GUESS