[Buildroot] [PATCH] Makefile: properly account for custom tags in BR2_VERSION_FULL

Peter Korsgaard peter at korsgaard.com
Mon Jul 27 16:49:18 UTC 2020


>>>>> "Thomas" == Thomas Petazzoni <thomas.petazzoni at bootlin.com> writes:

 > BR2_VERSION_FULL is currently defined as follows:
 >   BR2_VERSION_FULL := $(BR2_VERSION)$(shell $(TOPDIR)/support/scripts/setlocalversion)

 > This BR2_VERSION_FULL value then gets used as the "VERSION" variable
 > in the /etc/os-release file.

 > The logic of "setlocalversion" is that if it is exactly on a tag, it
 > returns nothing.

 > If it is on a tag + a number of commits, then it returns only
 > -XYZ-gABC where XYZ is the number of commits since the last tag, and
 > ABC the git commit hash (these are extracted from git describe).

 > This output then gets concatenated to BR2_VERSION which gives
 > something like 2020.05 or 2020.05-00123-g5bc6a.

 > The issue is that when you're on a tag specific to your project, which
 > is not a Buildroot YYYY.MM tag, then the output of setlocalversion is
 > empty, and all you get as VERSION in os-release is $(BR2_VERSION)
 > which is not really nice. Worse, if you have another non-official
 > Buildroot tag between the last official Buildroot tag/version and
 > where you are, you will get $(BR2_VERSION)-XYZ-gABC, but XYZ will not
 > correspond to the number of commits since BR2_VERSION, but since the
 > last tag that "git describe" as found, which is clearly incorrect.

 > Here is an example: you're on master, "make print-version" (which
 > displays BR2_VERSION_FULL) will show:

 > $ make print-version
 > 2020.08-git-00758-gc351877a6e

 > So far so good. Now, you create a tag say 5 commits "before" master,
 > and show BR2_VERSION_FULL again:

 > $ git tag -a -m "dummy tag" dummy-tag HEAD~5
 > $ make print-version
 > 2020.08-git-00005-gc351877a6e

 > This makes you believe you are 5 commits above 2020.08, which is
 > absolutely wrong.

 > So this commit simplifies the logic of setlocalversion to simply
 > return what "git describe" provides, and not prepend $(BR2_VERSION) in
 > the main Makefile. Since official Buildroot tags match official
 > Buildroot version names, you get the same output when you're on an
 > official Buildroot tag, or some commits above a Buildroot tag. An in
 > other cases, you get a sensible output. The logic is also adjusted for
 > the Mercurial case.

 > In the above situation, with this commit applied, we get:

 > $ make print-version
 > dummy-tag-6-g6258cdddeb

 > (6 commits instead of 5 as we have this very commit applied, but at
 > least it's 6 commits on top of the dummy-tag)

 > Finally, if you're not using a version control system, setlocalversion
 > was already returning nothing, so in this case, the Makefile simply
 > sets BR2_VERSION_FULL to BR2_VERSION to preserve this behavior.

 > Signed-off-by: Thomas Petazzoni <thomas.petazzoni at bootlin.com>

Committed, thanks.

-- 
Bye, Peter Korsgaard



More information about the buildroot mailing list