[cfe-dev] Macros for revision number and commit hash
James Y Knight via cfe-dev
cfe-dev at lists.llvm.org
Mon Mar 18 09:49:40 PDT 2019
This seems mostly harmless -- except that I'd be worried that people will
actually use them, when they probably shouldn't. :)
The __clang_revision_number__ value especially, being numeric, seems rather
amenable for misuse. Having this as a standalone numeric value, I'd be
worried that people would compare against a particular value, without
realizing that it's effectively a meaningless number without knowing more
about the branch you're talking about (which is rather non-trivial). At
least the git hash is more-obviously not usable for ordering. But, exposing
that also has some downsides, with lack of flexibility. If it's specified
that it must be just a hash, it cannot hold additional info, for example
that your build contains uncommitted changes.
So, I guess it's not entirely clear to me what useful purpose these values
can be used for, for which __clang_version__ isn't already sufficient. (You
mention that bots are parsing clang -v -- but to what end?)
On Fri, Mar 15, 2019 at 5:13 PM JF Bastien via cfe-dev <
cfe-dev at lists.llvm.org> wrote:
> Hello macro enthusiasts!
>
> By default, clang defines a lot of macros that allow developers to figure
> out things about the compiler that’s building them. I’m proposing that we
> add two more:
>
> 1. __clang_revision_number__ : an unsigned integer, representing the
> current branch’s revision number.
> 2. __clang_commit_hash__ : a string containing a hexadecimal hash,
> representing the current checkout’s hash.
>
> These would be set by cmake when building LLVM, and make the most sense in
> a monorepo on git. There’s been discussion of clang revision number in the
> context of git migration, captured on the git migration page
> <https://llvm.org/docs/Proposals/GitHubMove.html#on-managing-revision-numbers-with-git>
> .
>
> Here are examples of similar numbers we currently offer:
>
> auto major = __clang_major__; // 7
> auto minor = __clang_minor__; // 0
> auto patch = __clang_patchlevel__; // 0
> auto version = __clang_version__; // "7.0.0 (tags/RELEASE_700/final
> 342594)”
> auto VERSION = __VERSION__; // "4.2.1 Compatible Clang 7.0.0
> (tags/RELEASE_700/final 342594)”
> auto gnu_major = __GNUC__; // 4
> auto gnu_minor = __GNUC_MINOR__; // 2
> auto gnu_patch = __GNUC_PATCHLEVEL__; // 1
> auto gxx_abi = __GXX_ABI_VERSION; // 1002
>
>
> The two new values will be generally useful to tools that automatically
> handle revisions. For example, we currently have bots that parse clang -v,
> and that output is unfortunately aimed at humans (bots aren’t human).
> That’s broken in the past, and having these two values would help reduce
> the likelihood of breakage because macros have a pretty stable format and
> are easy to test.
>
> Let us know what you think!
>
> JF
>
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20190318/830ff34b/attachment.html>
More information about the cfe-dev
mailing list