We have a fourth component of the version tuple that can go out of sync, so we should check it.
		
			
				
	
	
		
			201 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			201 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/env python3
 | 
						|
 | 
						|
import re
 | 
						|
import sys
 | 
						|
 | 
						|
try:
 | 
						|
    configure_ac = sys.argv[1]
 | 
						|
except Exception:
 | 
						|
    configure_ac = 'configure.ac'
 | 
						|
 | 
						|
try:
 | 
						|
    meson_build = sys.argv[2]
 | 
						|
except Exception:
 | 
						|
    meson_build = 'meson.build'
 | 
						|
 | 
						|
CONFIGURE_MAJOR_VERSION_RE = re.compile(
 | 
						|
    r'''
 | 
						|
    ^
 | 
						|
    \s*
 | 
						|
    m4_define\(
 | 
						|
    \s*
 | 
						|
    \[gtk_major_version\]
 | 
						|
    \s*
 | 
						|
    ,
 | 
						|
    \s*
 | 
						|
    \[
 | 
						|
    (?P<version>[0-9]+)
 | 
						|
    \]
 | 
						|
    \s*
 | 
						|
    \)
 | 
						|
    $
 | 
						|
    ''',
 | 
						|
    re.UNICODE | re.VERBOSE
 | 
						|
)
 | 
						|
 | 
						|
CONFIGURE_MINOR_VERSION_RE = re.compile(
 | 
						|
    r'''
 | 
						|
    ^
 | 
						|
    \s*
 | 
						|
    m4_define\(
 | 
						|
    \s*
 | 
						|
    \[gtk_minor_version\]
 | 
						|
    \s*
 | 
						|
    ,
 | 
						|
    \s*
 | 
						|
    \[
 | 
						|
    (?P<version>[0-9]+)
 | 
						|
    \]
 | 
						|
    \s*
 | 
						|
    \)
 | 
						|
    $
 | 
						|
    ''',
 | 
						|
    re.UNICODE | re.VERBOSE
 | 
						|
)
 | 
						|
 | 
						|
CONFIGURE_MICRO_VERSION_RE = re.compile(
 | 
						|
    r'''
 | 
						|
    ^
 | 
						|
    \s*
 | 
						|
    m4_define\(
 | 
						|
    \s*
 | 
						|
    \[gtk_micro_version\]
 | 
						|
    \s*
 | 
						|
    ,
 | 
						|
    \s*
 | 
						|
    \[
 | 
						|
    (?P<version>[0-9]+)
 | 
						|
    \]
 | 
						|
    \s*
 | 
						|
    \)
 | 
						|
    $
 | 
						|
    ''',
 | 
						|
    re.UNICODE | re.VERBOSE
 | 
						|
)
 | 
						|
 | 
						|
CONFIGURE_INTERFACE_AGE_RE = re.compile(
 | 
						|
    r'''
 | 
						|
    ^
 | 
						|
    \s*
 | 
						|
    m4_define\(
 | 
						|
    \s*
 | 
						|
    \[gtk_interface_age\]
 | 
						|
    \s*
 | 
						|
    ,
 | 
						|
    \s*
 | 
						|
    \[
 | 
						|
    (?P<age>[0-9]+)
 | 
						|
    \]
 | 
						|
    \s*
 | 
						|
    \)
 | 
						|
    $
 | 
						|
    ''',
 | 
						|
    re.UNICODE | re.VERBOSE
 | 
						|
)
 | 
						|
 | 
						|
MESON_VERSION_RE = re.compile(
 | 
						|
    r'''
 | 
						|
    ^
 | 
						|
    \s*
 | 
						|
    version
 | 
						|
    \s*
 | 
						|
    :{1}
 | 
						|
    \s*
 | 
						|
    \'{1}
 | 
						|
    (?P<major>[0-9]+)
 | 
						|
    \.{1}
 | 
						|
    (?P<minor>[0-9]+)
 | 
						|
    \.{1}
 | 
						|
    (?P<micro>[0-9]+)
 | 
						|
    \'{1}
 | 
						|
    \s*
 | 
						|
    ,?
 | 
						|
    $
 | 
						|
    ''',
 | 
						|
    re.UNICODE | re.VERBOSE
 | 
						|
)
 | 
						|
 | 
						|
MESON_INTERFACE_AGE_RE = re.compile(
 | 
						|
    r'''
 | 
						|
    ^\s*gtk_interface_age\s*={1}\s*(?P<age>[0-9]+)\s*$
 | 
						|
    ''',
 | 
						|
    re.UNICODE | re.VERBOSE
 | 
						|
)
 | 
						|
 | 
						|
version = {}
 | 
						|
 | 
						|
with open(configure_ac, 'r') as f:
 | 
						|
    line = f.readline()
 | 
						|
    while line:
 | 
						|
        res = CONFIGURE_MAJOR_VERSION_RE.match(line)
 | 
						|
        if res:
 | 
						|
            if 'major' in version:
 | 
						|
                print(f'Redefinition of major version; version is already set to {version["major"]}')
 | 
						|
                sys.exit(1)
 | 
						|
            version['major'] = res.group('version')
 | 
						|
            line = f.readline()
 | 
						|
            continue
 | 
						|
        res = CONFIGURE_MINOR_VERSION_RE.match(line)
 | 
						|
        if res:
 | 
						|
            if 'minor' in version:
 | 
						|
                print(f'Redefinition of minor version; version is already set to {version["minor"]}')
 | 
						|
                sys.exit(1)
 | 
						|
            version['minor'] = res.group('version')
 | 
						|
            line = f.readline()
 | 
						|
            continue
 | 
						|
        res = CONFIGURE_MICRO_VERSION_RE.match(line)
 | 
						|
        if res:
 | 
						|
            if 'micro' in version:
 | 
						|
                print(f'Redefinition of micro version; version is already set to {version["micro"]}')
 | 
						|
                sys.exit(1)
 | 
						|
            version['micro'] = res.group('version')
 | 
						|
            line = f.readline()
 | 
						|
            continue
 | 
						|
        res = CONFIGURE_INTERFACE_AGE_RE.match(line)
 | 
						|
        if res:
 | 
						|
            if 'age' in version:
 | 
						|
                print(f'Redefinition of interface age; age is already set to {version["age"]}')
 | 
						|
                sys.exit(1)
 | 
						|
            version['age'] = res.group('age')
 | 
						|
            line = f.readline()
 | 
						|
            continue
 | 
						|
        if ('major', 'minor', 'micro', 'age') in version:
 | 
						|
            break
 | 
						|
        line = f.readline()
 | 
						|
 | 
						|
print(f'GTK version defined in {configure_ac}: {version["major"]}.{version["minor"]}.{version["micro"]} (age: {version["age"]})')
 | 
						|
 | 
						|
configure_version = version
 | 
						|
version = {}
 | 
						|
 | 
						|
with open(meson_build, 'r') as f:
 | 
						|
    line = f.readline()
 | 
						|
    inside_project = False
 | 
						|
    while line:
 | 
						|
        if line.startswith('project('):
 | 
						|
            inside_project = True
 | 
						|
        if inside_project:
 | 
						|
            res = MESON_VERSION_RE.match(line)
 | 
						|
            if res:
 | 
						|
                version['major'] = res.group('major')
 | 
						|
                version['minor'] = res.group('minor')
 | 
						|
                version['micro'] = res.group('micro')
 | 
						|
        if inside_project and line.endswith(')'):
 | 
						|
            inside_project = False
 | 
						|
        res = MESON_INTERFACE_AGE_RE.match(line)
 | 
						|
        if res:
 | 
						|
            version['age'] = res.group('age')
 | 
						|
        if ('major', 'minor', 'micro', 'age') in version:
 | 
						|
            break
 | 
						|
        line = f.readline()
 | 
						|
 | 
						|
print(f'GTK version defined in {meson_build}: {version["major"]}.{version["minor"]}.{version["micro"]} (age: {version["age"]})')
 | 
						|
 | 
						|
meson_version = version
 | 
						|
 | 
						|
if configure_version != meson_version:
 | 
						|
    print('Version mismatch between Autotools and Meson builds')
 | 
						|
    sys.exit(1)
 | 
						|
 | 
						|
sys.exit(0)
 |