// file : libbuild2/bin/guess.hxx -*- C++ -*- // license : MIT; see accompanying LICENSE file #ifndef LIBBUILD2_BIN_GUESS_HXX #define LIBBUILD2_BIN_GUESS_HXX #include <libbuild2/types.hxx> #include <libbuild2/utility.hxx> namespace build2 { namespace bin { // ar/ranlib information. // // Currently recognized ar/ranlib and their ids: // // gnu GNU binutils // llvm LLVM ar // bsd FreeBSD (and maybe other BSDs) // msvc Microsoft's lib.exe // msvc-llvm LLVM llvm-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; semantic_version ar_version; 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 char* paths); // ld information. // // Currently recognized linkers and their ids (following cc's type-variant // theme): // // gnu GNU binutils ld.bfd // gnu-gold GNU binutils ld.gold // gnu-lld LLVM ld.lld (and older lld) // ld64 Apple's new linker // ld64-lld LLVM ld64.lld // cctools Apple's old/classic linker // msvc Microsoft's link.exe // msvc-lld LLVM lld-link.exe // wasm-lld LLVM wasm-ld // // 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. // // Note that for now the version is extracted only for some linkers. Once // it's done for all of them, we should drop optional. // struct ld_info { process_path path; string id; string signature; string checksum; optional<semantic_version> version; }; ld_info guess_ld (const path& ld, const char* paths); // rc information. // // Currently recognized resource compilers and their ids: // // gnu GNU binutils windres // msvc Microsoft's rc.exe // msvc-llvm LLVM llvm-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 char* paths); } } #endif // LIBBUILD2_BIN_GUESS_HXX