summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTakaRikka <38417346+TakaRikka@users.noreply.github.com>2023-01-26 23:41:09 -0800
committerGitHub <noreply@github.com>2023-01-26 23:41:09 -0800
commit55af01665388c29243a4c5e4dd67c0cd8e7bb334 (patch)
tree1ccb78a10e2fcb29e7b90f8444dc9826ffa08696
parenta8136f1968e137d14d0aa1c0a331acbb9a5fb1ff (diff)
parentb63d35d9cf0d13e03ed4582908ce7b66b07dcf9e (diff)
Merge pull request #257 from Jcw87/dep_allow_missing_headers
fake the -MP compiler option
-rwxr-xr-xtools/transform-dep.py88
1 files changed, 51 insertions, 37 deletions
diff --git a/tools/transform-dep.py b/tools/transform-dep.py
index 412e3bd61d..0e2d4d0531 100755
--- a/tools/transform-dep.py
+++ b/tools/transform-dep.py
@@ -3,57 +3,71 @@
import argparse
import os
from platform import uname
+from typing import List
if os.name != 'nt':
wineprefix = os.environ.get('WINEPREFIX', os.path.join(os.environ['HOME'], '.wine'))
winedevices = os.path.join(wineprefix, 'dosdevices')
+
def in_wsl() -> bool:
# wsl1 has Microsoft, wsl2 has microsoft-standard
release = uname().release
return 'microsoft-standard' in release or 'Microsoft' in release
-def import_d_file(in_file) -> str:
- out_lines = []
- with open(in_file) as file:
- for idx, line in enumerate(file):
- if idx == 0:
- if line.endswith(' \\\n'):
- out_lines.append(line[:-3].replace('\\', '/') + " \\\n")
- else:
- out_lines.append(line.replace('\\', '/'))
+def convert_path(path: str) -> str:
+ # lowercase drive letter
+ path = path[0].lower() + path[1:]
+ if os.name == 'nt':
+ return path.replace('\\', '/')
+ elif path[0] == 'z':
+ # shortcut for z:
+ return path[2:].replace('\\', '/')
+ elif in_wsl():
+ if path.startswith(r'\\wsl'):
+ # first part could be wsl$ or wsl.localhost
+ pos = path.find('\\', 2)
+ pos = path.find('\\', pos + 1)
+ path = path[pos:]
+ return path.replace('\\', '/')
+ else:
+ path = path[0:1] + path[2:]
+ return os.path.join('/mnt', path.replace('\\', '/'))
+ else:
+ # use $WINEPREFIX/dosdevices to resolve path
+ return os.path.realpath(os.path.join(winedevices, path.replace('\\', '/')))
+
+
+def import_d_file(in_file: str) -> str:
+ out_lines: List[str] = []
+
+ with open(in_file, 'r') as file:
+ it = iter(file)
+ line = next(it)
+ if line.endswith(' \\\n'):
+ out_lines.append(line[:-3].replace('\\', '/') + " \\\n")
+ else:
+ out_lines.append(line.replace('\\', '/'))
+
+ headers: List[str] = []
+ for line in it:
+ suffix = ''
+ if line.endswith(' \\\n'):
+ suffix = ' \\'
+ path = line.lstrip()[:-3]
else:
- suffix = ''
- if line.endswith(' \\\n'):
- suffix = ' \\'
- path = line.lstrip()[:-3]
- else:
- path = line.strip()
- # lowercase drive letter
- path = path[0].lower() + path[1:]
- if os.name == 'nt':
- path = path.replace('\\', '/')
- elif path[0] == 'z':
- # shortcut for z:
- path = path[2:].replace('\\', '/')
- elif in_wsl():
- if path.startswith(r'\\wsl'):
- # first part could be wsl$ or wsl.localhost
- pos = path.find('\\', 2)
- pos = path.find('\\', pos + 1)
- path = path[pos:]
- path = path.replace('\\', '/')
- else:
- path = path[0:1] + path[2:]
- path = os.path.join('/mnt', path.replace('\\', '/'))
- else:
- # use $WINEPREFIX/dosdevices to resolve path
- path = os.path.realpath(os.path.join(winedevices, path.replace('\\', '/')))
- out_lines.append(f"\t{path}{suffix}\n")
+ path = line.strip()
+
+ path = convert_path(path)
+ headers.append(path)
+ out_lines.append(f"\t{path}{suffix}\n")
+ # the metrowerks compiler doesn't support -MP
+ out_lines.extend([f'{header}:\n' for header in headers])
return ''.join(out_lines)
+
def main():
parser = argparse.ArgumentParser(
description="""Transform a .d file from Wine paths to normal paths"""
@@ -75,4 +89,4 @@ def main():
if __name__ == "__main__":
- main() \ No newline at end of file
+ main()