13
0

Do not unconditionally query git revision

Set version for configure, build and dist only.
This fixes an issue with `sudo ./waf install` where
`sudo git describe` can fail.


See also
 https://discourse.ardour.org/t/waf-error-when-buliding-on-linux-ubuntu/107201/11
 https://github.blog/2022-04-12-git-security-vulnerability-announced/
This commit is contained in:
Robin Gareus 2022-05-10 16:43:09 +02:00
parent be90b4e0ca
commit f9353243c2
Signed by: rgareus
GPG Key ID: A090BCE02CF57F04

62
wscript
View File

@ -187,28 +187,8 @@ def fetch_tarball_revision_date():
return rev, date return rev, date
if os.path.isdir (os.path.join(os.getcwd(), '.git')): def set_version ():
rev, rev_date = fetch_git_revision_date() def sanitize(s):
else:
rev, rev_date = fetch_tarball_revision_date()
#
# rev is now of the form MAJOR.MINOR[-rcX]-rev-commit
# or, if right at the same rev as a release, MAJOR.MINOR[-rcX]
#
parts = rev.split ('.', 1)
MAJOR = parts[0]
other = parts[1].split('-', 1)
MINOR = other[0]
if len(other) > 1:
MICRO = other[1].rsplit('-',1)[0].replace('-','.')
else:
MICRO = '0'
V = MAJOR + '.' + MINOR + '.' + MICRO
def sanitize(s):
# round-trip to remove anything in the string that is not encodable in # round-trip to remove anything in the string that is not encodable in
# ASCII, yet still keep a real (utf8-encoded internally) string. # ASCII, yet still keep a real (utf8-encoded internally) string.
s = s.encode ('ascii', 'ignore').decode ("utf-8") s = s.encode ('ascii', 'ignore').decode ("utf-8")
@ -227,9 +207,38 @@ def sanitize(s):
if not isinstance(s, str): if not isinstance(s, str):
s = s.encode("utf-8") s = s.encode("utf-8")
return s return s
VERSION = sanitize(V)
PROGRAM_VERSION = sanitize(MAJOR) global MAJOR
del sanitize global MINOR
global MICRO
global VERSION
global PROGRAM_VERSION
global rev_date
if os.path.isdir (os.path.join(os.getcwd(), '.git')):
rev, rev_date = fetch_git_revision_date()
else:
rev, rev_date = fetch_tarball_revision_date()
#
# rev is now of the form MAJOR.MINOR[-rcX]-rev-commit
# or, if right at the same rev as a release, MAJOR.MINOR[-rcX]
#
parts = rev.split ('.', 1)
MAJOR = parts[0]
other = parts[1].split('-', 1)
MINOR = other[0]
if len(other) > 1:
MICRO = other[1].rsplit('-',1)[0].replace('-','.')
else:
MICRO = '0'
V = MAJOR + '.' + MINOR + '.' + MICRO
VERSION = sanitize(V)
PROGRAM_VERSION = sanitize(MAJOR)
if any(arg in ('dist', 'distcheck') for arg in sys.argv[1:]): if any(arg in ('dist', 'distcheck') for arg in sys.argv[1:]):
if not 'APPNAME' in os.environ: if not 'APPNAME' in os.environ:
@ -310,6 +319,7 @@ def fetch_gcc_version (CC):
return version return version
def create_stored_revision(): def create_stored_revision():
set_version ()
rev = "" rev = ""
if os.path.exists('.git'): if os.path.exists('.git'):
rev, rev_date = fetch_git_revision_date() rev, rev_date = fetch_git_revision_date()
@ -940,6 +950,7 @@ def sub_config_and_use(conf, name, has_objects = True):
autowaf.set_local_lib(conf, name, has_objects) autowaf.set_local_lib(conf, name, has_objects)
def configure(conf): def configure(conf):
set_version ()
conf.load('compiler_c') conf.load('compiler_c')
conf.load('compiler_cxx') conf.load('compiler_cxx')
if Options.options.dist_target == 'mingw': if Options.options.dist_target == 'mingw':
@ -1594,5 +1605,6 @@ def test(bld):
subprocess.call("gtk2_ardour/artest") subprocess.call("gtk2_ardour/artest")
def help2man(bld): def help2man(bld):
set_version ()
cmd = "help2man -s 1 -N -o ardour.1 -n Ardour --version-string='Ardour %s' gtk2_ardour/ardev" % PROGRAM_VERSION cmd = "help2man -s 1 -N -o ardour.1 -n Ardour --version-string='Ardour %s' gtk2_ardour/ardev" % PROGRAM_VERSION
subprocess.call(cmd, shell=True) subprocess.call(cmd, shell=True)