aboutsummaryrefslogtreecommitdiff
path: root/build2/bin/guess.hxx
blob: b81566013d91d78fbd80f8f3978ed671c885440e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
// file      : build2/bin/guess.hxx -*- C++ -*-
// copyright : Copyright (c) 2014-2018 Code Synthesis Ltd
// license   : MIT; see accompanying LICENSE file

#ifndef BUILD2_BIN_GUESS_HXX
#define BUILD2_BIN_GUESS_HXX

#include <build2/types.hxx>
#include <build2/utility.hxx>

namespace build2
{
  namespace bin
  {
    // ar/ranlib information.
    //
    // Currently recognized ar/ranlib and their ids:
    //
    // gnu          GNU binutils
    // llvm         LLVM
    // bsd          FreeBSD (and maybe other BSDs)
    // msvc         Microsoft's lib.exe
    // generic      Generic/unrecognized
    //
    // The signature is normally the --version/-V line.
    //
    // The checksum is used to detect ar/ranlib changes. It is calculated in
    // a toolchain-specific manner (usually the output of --version/-V) and
    // is not bulletproof.
    //
    struct ar_info
    {
      process_path ar_path;
      string ar_id;
      string ar_signature;
      string ar_checksum;

      process_path ranlib_path;
      string ranlib_id;
      string ranlib_signature;
      string ranlib_checksum;
    };

    // The ranlib path can be NULL, in which case no ranlib guessing will be
    // attemplated and the returned ranlib_* members will be left empty.
    //
    ar_info
    guess_ar (const path& ar, const path* ranlib, const dir_path& fallback);

    // ld information.
    //
    // Currently recognized linkers and their ids:
    //
    // gnu          GNU binutils ld.bfd
    // gold         GNU binutils ld.gold
    // llvm         LLVM lld (note: not llvm-ld or llvm-link)
    // ld64         Apple's new linker
    // cctools      Apple's old/classic linker
    // msvc         Microsoft's link.exe
    //
    // Note that BSDs are currently using GNU ld but some of them (e.g.,
    // FreeBSD) are hoping to migrate to lld.
    //
    // The signature is normally the --version/-version/-v line.
    //
    // The checksum is used to detect ld changes. It is calculated in a
    // toolchain-specific manner (usually the output of --version/-version/-v)
    // and is not bulletproof.
    //
    struct ld_info
    {
      process_path path;
      string id;
      string signature;
      string checksum;
    };

    ld_info
    guess_ld (const path& ld, const dir_path& fallback);

    // rc information.
    //
    // Currently recognized resource compilers and their ids:
    //
    // gnu          GNU binutils windres
    // msvc         Microsoft's rc.exe
    //
    // The signature is normally the --version line.
    //
    // The checksum is used to detect rc changes. It is calculated in a
    // toolchain-specific manner (usually the output of --version) and is not
    // bulletproof.
    //
    struct rc_info
    {
      process_path path;
      string id;
      string signature;
      string checksum;
    };

    rc_info
    guess_rc (const path& rc, const dir_path& fallback);
  }
}

#endif // BUILD2_BIN_GUESS_HXX