fix build error in a shallow-cloned source tree

Cloning the repository with the --depth option is useful when you do
not need the full git history, but it fails to build core/version.c

  $ git clone --depth 1 git://git.ipxe.org/ipxe.git
  $ cd ipxe/src
  $ make
   [snip]
      [VERSION] bin/version.ipxe.dsk.o
  In file included from include/ipxe/features.h:6,
                   from core/version.c:33:
  <command-line>: error: unsigned conversion from ‘int’ to ‘unsigned char’ changes value from ‘9062’ to ‘102’ [-Werror=overflow]
  include/ipxe/dhcp.h:529:58: note: in definition of macro ‘DHCP_OPTION’
    529 | #define DHCP_OPTION( ... ) VA_ARG_COUNT ( __VA_ARGS__ ), __VA_ARGS__
        |                                                          ^~~~~~~~~~~
    ...

A shallow-cloned repository may not have any tag at all, then it returns
only a commit hash.

  $ git describe --tags --always --long --abbrev=1 --match "v*"
  9062

In such a case, VERSION_MINOR becomes empty, causing the build error.

If 'git describe' does not find any tag, let the version macros fall
back to the default:

  VERSION_MAJOR   = 1
  VERSION_MINOR   = 0
  VERSION_PATCH   = 0
  EXTRAVERSION    = +

Setting sha1 to GITVERSION is still useful.

Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
pull/534/head
Masahiro Yamada 2021-12-04 02:50:07 +09:00
parent 9062544f6a
commit 37c2d10e0c
1 changed files with 4 additions and 2 deletions

View File

@ -208,8 +208,9 @@ install :
#
# Version number calculations
#
ifneq ($(wildcard ../.git),)
VERSIONS := $(shell git describe --tags --always --long --abbrev=1 --match "v*")
VERSIONS := $(if $(wildcard ../.git),$(shell git describe --tags --always --long --abbrev=1 --match "v*"))
ifneq ($(filter v%, $(VERSIONS)),)
VERSION_TUPLE := $(subst ., ,$(subst -, ,$(patsubst v%,%,$(VERSIONS))))
VERSION_MAJOR := $(word 1,$(VERSION_TUPLE))
VERSION_MINOR := $(word 2,$(VERSION_TUPLE))
@ -225,6 +226,7 @@ VERSION_MAJOR = 1
VERSION_MINOR = 0
VERSION_PATCH = 0
EXTRAVERSION = +
GITVERSION = $(VERSIONS)
endif
MM_VERSION = $(VERSION_MAJOR).$(VERSION_MINOR)
VERSION = $(MM_VERSION).$(VERSION_PATCH)$(EXTRAVERSION)