parent
4af4145d09
commit
ee9832cdb1
5 changed files with 67 additions and 0 deletions
@ -0,0 +1 @@ |
||||
base |
@ -0,0 +1 @@ |
||||
subbie |
@ -0,0 +1,47 @@ |
||||
#!/usr/bin/env python3 |
||||
|
||||
import os, sys, argparse |
||||
import pathlib |
||||
|
||||
h_templ = '''#pragma once |
||||
|
||||
int %s(); |
||||
''' |
||||
|
||||
c_templ = '''#include"%s.h" |
||||
|
||||
int %s() { |
||||
return 0; |
||||
} |
||||
''' |
||||
|
||||
parser = argparse.ArgumentParser() |
||||
parser.add_argument('--searchdir', required=True) |
||||
parser.add_argument('--outdir', required=True) |
||||
parser.add_argument('ifiles', nargs='+') |
||||
|
||||
options = parser.parse_args() |
||||
|
||||
searchdir = options.searchdir |
||||
outdir = options.outdir |
||||
ifiles = options.ifiles |
||||
|
||||
rel_ofiles = [] |
||||
|
||||
for ifile in ifiles: |
||||
if not ifile.startswith(options.searchdir): |
||||
sys.exit('Input file %s does not start with search dir %s.' % (ifile, searchdir)) |
||||
rel_ofile = ifile[len(searchdir):] |
||||
if rel_ofile[0] == '/' or rel_ofile[0] == '\\': |
||||
rel_ofile = rel_ofile[1:] |
||||
rel_ofiles.append(os.path.splitext(rel_ofile)[0]) |
||||
|
||||
ofile_bases = [os.path.join(outdir, i) for i in rel_ofiles] |
||||
|
||||
for i, ifile_name in enumerate(ifiles): |
||||
proto_name = open(ifile_name).readline().strip() |
||||
h_out = ofile_bases[i] + '.h' |
||||
c_out = ofile_bases[i] + '.c' |
||||
os.makedirs(os.path.split(ofile_bases[i])[0], exist_ok=True) |
||||
open(h_out, 'w').write(h_templ % (proto_name)) |
||||
open(c_out, 'w').write(c_templ % (proto_name, proto_name)) |
@ -0,0 +1,12 @@ |
||||
project('preserve subdir', 'c') |
||||
|
||||
gprog = find_program('genprog.py') |
||||
|
||||
gen = generator(gprog, \ |
||||
output : ['@BASENAME@.c', '@BASENAME@.h'], |
||||
preserve_path_from : meson.current_source_dir(), |
||||
arguments : ['--searchdir=@CURRENT_SOURCE_DIR@', '--outdir=@BUILD_DIR@', '@INPUT@']) |
||||
|
||||
generated = gen.process('base.inp', 'com/mesonbuild/subbie.inp') |
||||
e = executable('testprog', 'testprog.c', generated) |
||||
test('testprog', e) |
@ -0,0 +1,6 @@ |
||||
#include"base.h" |
||||
#include"com/mesonbuild/subbie.h" |
||||
|
||||
int main(int argc, char **argv) { |
||||
return base() + subbie(); |
||||
} |
Loading…
Reference in new issue