import subprocess import json import sys import os # Configuration from ENV ignore_deps = set(os.environ.get("BUILDREQ_IGNORE_DEP", "").split()) only_required = os.environ.get("BUILDREQ_ONLY_REQUIRED", "false").lower() == "true" # Run introspection try: result = subprocess.run([sys.argv[1], "introspect", "--dependencies", "meson.build"], capture_output=True, text=True, check=True) deps_json = json.loads(result.stdout) except Exception as e: print(f"Error: {e}", file=sys.stderr) sys.exit(1) deps = {} for entry in deps_json: name = entry['name'] if name in ignore_deps: continue if only_required and not entry.get('required', True): continue deps[name] = entry['version'] for lib, versions in deps.items(): formatted_versions = [] for v in versions: # Step 1: Remove all spaces to get a "clean" string like ">=2.72.0" v = v.replace(" ", "") # Step 2: Separate the operator from the version # We find where the first digit or letter starts pivot = 0 for i, char in enumerate(v): if char.isalnum(): pivot = i break # Step 3: Reconstruct with exactly one space: ">= 2.72.0" if pivot > 0: v = f"{v[:pivot]} {v[pivot:]}" formatted_versions.append(v) # Step 4: Ensure a space exists before the version block starts # This ensures "pkgconfig(lib) >= 1.0" instead of "pkgconfig(lib)>= 1.0" version_str = f" {' '.join(formatted_versions)}" if formatted_versions else "" line = [] for prefix in ["cmake", "pkgconfig", "qmake"]: buildreq = f"{prefix}({lib}){version_str}" # Cleanup: remove trailing operators if version was empty if buildreq.endswith(('=', '<', '>')): buildreq = buildreq.rstrip('=<>') line.append(buildreq) print(f"({' or '.join(line)})")