mirror of
				https://github.com/YosysHQ/sby.git
				synced 2025-11-04 06:39:11 +00:00 
			
		
		
		
	Make tests runnable on Windows, as long as a unix like environment as e.g. provided by MSYS2 is available.
		
			
				
	
	
		
			53 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			53 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from pathlib import Path
 | 
						|
import re
 | 
						|
 | 
						|
tests = []
 | 
						|
checked_dirs = []
 | 
						|
 | 
						|
SAFE_PATH = re.compile(r"^[a-zA-Z0-9_./\\]*$")
 | 
						|
 | 
						|
 | 
						|
def collect(path):
 | 
						|
    # don't pick up any paths that need escaping nor any sby workdirs
 | 
						|
    if not SAFE_PATH.match(str(path)) or (path / "config.sby").exists():
 | 
						|
        return
 | 
						|
 | 
						|
    checked_dirs.append(path)
 | 
						|
    for entry in path.glob("*.sby"):
 | 
						|
        filename = str(entry)
 | 
						|
        if not SAFE_PATH.match(filename):
 | 
						|
            print(f"skipping {filename!r}, use only [a-zA-Z0-9_./] in filenames")
 | 
						|
            continue
 | 
						|
        tests.append(entry)
 | 
						|
    for entry in path.glob("*"):
 | 
						|
        if entry.is_dir():
 | 
						|
            collect(entry)
 | 
						|
 | 
						|
 | 
						|
def unix_path(path):
 | 
						|
    return "/".join(path.parts)
 | 
						|
 | 
						|
 | 
						|
collect(Path("."))
 | 
						|
collect(Path("../docs/examples"))
 | 
						|
 | 
						|
out_file = Path("make/rules/collect.mk")
 | 
						|
out_file.parent.mkdir(exist_ok=True)
 | 
						|
 | 
						|
with out_file.open("w") as output:
 | 
						|
 | 
						|
    for checked_dir in checked_dirs:
 | 
						|
        print(f"{out_file}: {checked_dir}", file=output)
 | 
						|
 | 
						|
    for test in tests:
 | 
						|
        test_unix = unix_path(test)
 | 
						|
        print(f"make/rules/test/{test_unix}.mk: {test_unix}", file=output)
 | 
						|
        for ext in [".sh", ".py"]:
 | 
						|
            script_file = test.parent / (test.stem + ext)
 | 
						|
            if script_file.exists():
 | 
						|
                script_file_unix = unix_path(script_file)
 | 
						|
                print(f"make/rules/test/{test_unix}.mk: {script_file_unix}", file=output)
 | 
						|
        print(f"make/rules/test/{test_unix}.mk: make/test_rules.py", file=output)
 | 
						|
    for test in tests:
 | 
						|
        test_unix = unix_path(test)
 | 
						|
        print(f"-include make/rules/test/{test_unix}.mk", file=output)
 |