[PATCH] Makefile: localversion fix (was: [2.6.16-rc6] CONFIG_LOCALVERSION_AUTO)

From: Mathis Ahrens
Date: Thu Mar 16 2006 - 15:12:03 EST


Mathis Ahrens wrote:
> 1.
> Semantics of LOCALVERSION are confusing and probably buggy.
> The Makefile states:
>
> # Take the contents of any files called localversion* and the config
> # variable CONFIG_LOCALVERSION and append them to KERNELRELEASE.
> # LOCALVERSION from the command line override all of this
>
> whereas my simplified view of current code is:
>
> version = major + minor + patch + extra
> release = version + localver-full
> localver-full = localver + localver-auto
> localver = <concat all localversions*> + $CONFIG_LOCALVERSION
> localver-auto = $LOCALVERSION + <some -gxxxxxx>
>
> LOCALVERSION does not seem to /override/ anything if specified on the
> command line, but rather (with CONFIG_LOCALVERSION_AUTO=y) gets
> /inserted/.
>
> Also, with CONFIG_LOCALVERSION_AUTO=n, specifying LOCALVERSION
> on the command line currently does nothing at all. This is a regression
> from 2.6.15, I suppose.
>

Hmm, no comments on this?
I am not sure if different behaviour is desired, but here goes my proposal:

From: Mathis Ahrens <Mathis.Ahrens@xxxxxx>

Fix Makefile to honor LOCALVERSION if specified on the command line.
Make it then replace any other localversions from files, CONFIG_LOCALVERSION
or CONFIG_LOCALVERSION_AUTO.

Signed-off-by: Mathis Ahrens <Mathis.Ahrens@xxxxxx>

--- linux/Makefile.orig 2006-03-15 01:49:26.000000000 +0100
+++ linux/Makefile 2006-03-16 18:10:38.000000000 +0100
@@ -760,22 +760,27 @@ $(vmlinux-dirs): prepare scripts
# The KERNELRELEASE is stored in a file named .kernelrelease
# to be used when executing for example make install or make
modules_install
#
-# Take the contents of any files called localversion* and the config
-# variable CONFIG_LOCALVERSION and append them to KERNELRELEASE.
-# LOCALVERSION from the command line override all of this
+# If LOCALVERSION from the command line is not empty, that is
+# appended to the KERNELRELEASE.
+#
+# Else we append in that order
+# - the contents of any files called localversion*
+# - the config variable CONFIG_LOCALVERSION
+# - if CONFIG_LOCALVERSION_AUTO is set, another scm-specific string

nullstring :=
space := $(nullstring) # end of line

-___localver = $(objtree)/localversion* $(srctree)/localversion*
-__localver = $(sort $(wildcard $(___localver)))
+__localver-filelist = $(objtree)/localversion* $(srctree)/localversion*
+_localver-filelist = $(sort $(wildcard $(__localver-filelist)))
# skip backup files (containing '~')
-_localver = $(foreach f, $(__localver), $(if $(findstring ~, $(f)),,$(f)))
+localver-filelist = $(foreach f, $(_localver-filelist), \
+ $(if $(findstring ~, $(f)),,$(f)))
+
+localver-files = $(subst $(space),, $(shell cat /dev/null
$(localver-filelist)))
+localver-conf = $(subst $(space),, $(patsubst
"%",%,$(CONFIG_LOCALVERSION)))
+

-localver = $(subst $(space),, \
- $(shell cat /dev/null $(_localver)) \
- $(patsubst "%",%,$(CONFIG_LOCALVERSION)))
-
# If CONFIG_LOCALVERSION_AUTO is set scripts/setlocalversion is called
# and if the SCM is know a tag from the SCM is appended.
# The appended tag is determinded by the SCM used.
@@ -784,12 +789,15 @@ localver = $(subst $(space),, \
# Other SCMs can edit scripts/setlocalversion and add the appropriate
# checks as needed.
ifdef CONFIG_LOCALVERSION_AUTO
- _localver-auto = $(shell $(CONFIG_SHELL) \
+ localver-auto = $(shell $(CONFIG_SHELL) \
$(srctree)/scripts/setlocalversion $(srctree))
- localver-auto = $(LOCALVERSION)$(_localver-auto)
endif

-localver-full = $(localver)$(localver-auto)
+ifeq ($(LOCALVERSION),)
+ localver-full = $(localver-files)$(localver-conf)$(localver-auto)
+else
+ localver-full = $(subst $(space),, $(LOCALVERSION))
+endif

# Store (new) KERNELRELASE string in .kernelrelease
kernelrelease = $(KERNELVERSION)$(localver-full)


-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/