Add test script to generate a static library with a custom target.
This commit is contained in:
parent
7a02b76e70
commit
4b95dd3a6d
|
@ -334,6 +334,7 @@ the following special string substitutions:
|
|||
- `@DEPFILE@` the full path to the dependency file passed to `depfile`
|
||||
- `@PLAINNAME@`: the input filename, without a path
|
||||
- `@BASENAME@`: the input filename, with extension removed
|
||||
- `@PRIVATE_DIR@`: path to a directory where the custom target must store all its intermediate files, available since 0.50.1
|
||||
|
||||
The `depfile` keyword argument also accepts the `@BASENAME@` and `@PLAINNAME@`
|
||||
substitutions. *(since 0.47)*
|
||||
|
|
|
@ -964,6 +964,12 @@ class Backend:
|
|||
raise MesonException(msg)
|
||||
dfilename = os.path.join(outdir, target.depfile)
|
||||
i = i.replace('@DEPFILE@', dfilename)
|
||||
elif '@PRIVATE_DIR@' in i:
|
||||
if target.absolute_paths:
|
||||
pdir = self.get_target_private_dir_abs(target)
|
||||
else:
|
||||
pdir = self.get_target_private_dir(target)
|
||||
i = i.replace('@PRIVATE_DIR@', pdir)
|
||||
elif '@PRIVATE_OUTDIR_' in i:
|
||||
match = re.search(r'@PRIVATE_OUTDIR_(ABS_)?([^/\s*]*)@', i)
|
||||
if not match:
|
||||
|
|
|
@ -0,0 +1,38 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import os, sys, subprocess, argparse, pathlib
|
||||
|
||||
parser = argparse.ArgumentParser()
|
||||
|
||||
parser.add_argument('--private-dir', required=True)
|
||||
parser.add_argument('-o', required=True)
|
||||
parser.add_argument('cmparr', nargs='+')
|
||||
|
||||
static_linker = 'ar'
|
||||
|
||||
contents = '''#include<stdio.h>
|
||||
|
||||
void flob() {
|
||||
printf("Now flobbing.\\n");
|
||||
}
|
||||
'''
|
||||
|
||||
def generate_lib(outfile, private_dir, compiler_array):
|
||||
outdir = pathlib.Path(private_dir)
|
||||
if not outdir.exists():
|
||||
outdir.mkdir()
|
||||
c_file = outdir / 'flob.c'
|
||||
c_file.write_text(contents)
|
||||
o_file = c_file.with_suffix('.o')
|
||||
compile_cmd = compiler_array + ['-c', '-g', '-O2', '-o', o_file, c_file]
|
||||
subprocess.check_call(compile_cmd)
|
||||
out_file = pathlib.Path(outfile)
|
||||
if out_file.exists():
|
||||
out_file.unlink()
|
||||
link_cmd = [static_linker, 'csrD', outfile, o_file]
|
||||
subprocess.check_call(link_cmd)
|
||||
|
||||
if __name__ == '__main__':
|
||||
options = parser.parse_args()
|
||||
generate_lib(options.o, options.private_dir, options.cmparr)
|
||||
sys.exit(1)
|
|
@ -0,0 +1,20 @@
|
|||
project('linkcustom', 'c')
|
||||
|
||||
# This would require passing the static linker to the build script or having
|
||||
# it detect it by itself. I'm too lazy to implement it now and it is not
|
||||
# really needed for testing that custom targets work. It is the responsibility
|
||||
# of the custom target to produce things in the correct format.
|
||||
assert(not meson.is_cross(), 'MESON_SKIP_TEST cross checking not implemented.')
|
||||
|
||||
cc = meson.get_compiler('c')
|
||||
genprog = find_program('custom_stlib.py')
|
||||
|
||||
clib = custom_target('linkcustom',
|
||||
output: 'libflob.a',
|
||||
command: [genprog,
|
||||
'-o', '@OUTPUT@',
|
||||
'--private-dir', '@PRIVATE_DIR@'] + cc.cmd_array())
|
||||
|
||||
#exe = executable('prog', 'prog.c', link_with: clib)
|
||||
#test('linkcustom', exe)
|
||||
|
Loading…
Reference in New Issue