Support rsp in linker intercept

This commit is contained in:
Andrea Fioraldi 2023-07-24 17:37:39 +02:00
parent e5cd808701
commit dcbf46b8ef

View File

@ -1,6 +1,6 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import subprocess, json, sys, os import subprocess, shutil, json, sys, os
FILTER = ['-shared'] FILTER = ['-shared']
@ -12,28 +12,44 @@ args = sys.argv[1:]
out_args = [] out_args = []
shareds = [] shareds = []
search = [] search = []
prev_o = False
for i in range(len(args)): def process_args(args):
if prev_o: global out_args, shareds, search
prev_o = False prev_o = False
continue
elif args[i] in FILTER: for i in range(len(args)):
continue if prev_o:
elif args[i].endswith('.so') and not args[i].startswith('-'): prev_o = False
name = os.path.basename(args[i])[3:-3] # remove prefix and suffix continue
shareds.append(name) elif args[i] in FILTER:
continue continue
elif args[i] == '-o': elif args[i].endswith('.so') and not args[i].startswith('-'):
prev_o = True name = os.path.basename(args[i])[3:-3] # remove prefix and suffix
continue shareds.append(name)
elif args[i].startswith('-l'): continue
shareds.append(args[i][2:]) elif args[i] == '-o':
continue prev_o = True
elif args[i].startswith('-L'): continue
search.append(args[i][2:]) elif args[i].startswith('-l'):
out_args.append(args[i]) shareds.append(args[i][2:])
continue
elif args[i].endswith('.rsp'):
fname = args[i][1:] # remove initial @
with open(fname) as f:
rsp = f.read().split()
process_args(rsp)
continue
elif args[i].startswith('-L'):
search.append(args[i][2:])
out_args.append(args[i])
process_args(args)
with open(OUT, 'w') as f: with open(OUT, 'w') as f:
json.dump({'cmd': out_args, 'libs': shareds, 'search': search}, f, indent=2) json.dump({
'cmd': out_args,
'libs': shareds,
'search': search,
}, f, indent=2)
subprocess.run([CXX] + args) subprocess.run([CXX] + args)