68 lines
1.8 KiB
Python
Executable File
68 lines
1.8 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
import os
|
|
import pathlib
|
|
import re
|
|
|
|
|
|
root = os.path.abspath(pathlib.Path(__file__).parent.parent.parent)
|
|
|
|
# filename, pattern, number of occurrences
|
|
file_pattern_count = [
|
|
(
|
|
f"{root}/meson.build",
|
|
r"version: '(\d+)\.(\d+)\.(\d+)'",
|
|
1),
|
|
(
|
|
f"{root}/include/ankerl/unordered_dense.h",
|
|
r"Version (\d+)\.(\d+)\.(\d+)\n",
|
|
1),
|
|
(
|
|
f"{root}/CMakeLists.txt",
|
|
r"^\s+VERSION (\d+)\.(\d+)\.(\d+)\n",
|
|
1),
|
|
(
|
|
f"{root}/test/unit/namespace.cpp",
|
|
r"unordered_dense::v(\d+)_(\d+)_(\d+)",
|
|
1
|
|
)
|
|
]
|
|
|
|
# let's parse the reference from svector.h
|
|
major = "??"
|
|
minor = "??"
|
|
patch = "??"
|
|
with open(f"{root}/include/ankerl/unordered_dense.h", "r") as f:
|
|
for line in f:
|
|
r = re.search(r"#define ANKERL_UNORDERED_DENSE_VERSION_([A-Z]+) (\d+)", line)
|
|
if not r:
|
|
continue
|
|
|
|
if "MAJOR" == r.group(1):
|
|
major = r.group(2)
|
|
elif "MINOR" == r.group(1):
|
|
minor = r.group(2)
|
|
elif "PATCH" == r.group(1):
|
|
patch = r.group(2)
|
|
else:
|
|
"match but with something else!"
|
|
exit(1)
|
|
|
|
is_ok = True
|
|
for (filename, pattern, count) in file_pattern_count:
|
|
num_found = 0
|
|
with open(filename, "r") as f:
|
|
for line in f:
|
|
r = re.search(pattern, line)
|
|
if r:
|
|
num_found += 1
|
|
if major != r.group(1) or minor != r.group(2) or patch != r.group(3):
|
|
is_ok = False
|
|
print(f"ERROR in {filename}: got '{line.strip()}' but version should be '{major}.{minor}.{patch}'")
|
|
if num_found != count:
|
|
is_ok = False
|
|
print(f"ERROR in {filename}: expected {count} occurrences but found it {num_found} times")
|
|
|
|
if not is_ok:
|
|
exit(1)
|
|
|