 c348d78e37
			
		
	
	c348d78e37
	
	
	
		
			
			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)
 |