aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmil Styrke <emil.styrke@contextvision.se>2018-07-17 13:33:32 +0200
committerNirbheek Chauhan <nirbheek.chauhan@gmail.com>2018-08-07 04:57:34 -0700
commit2e3e2abcebb14fb1175fdd8facb0524fb0df4259 (patch)
tree1e743addbb4ab983ea2f420d50b8dea0501103c5
parent69a65006f2261953083df30d14cd67b5d8998897 (diff)
downloadmeson-2e3e2abcebb14fb1175fdd8facb0524fb0df4259.zip
meson-2e3e2abcebb14fb1175fdd8facb0524fb0df4259.tar.gz
meson-2e3e2abcebb14fb1175fdd8facb0524fb0df4259.tar.bz2
Fix @CURRENT_SOURCE_DIR@ in generator()
Fix @CURRENT_SOURCE_DIR@ pointing to the wrong directory if generator() is called from a subdir.
-rw-r--r--mesonbuild/backend/vs2010backend.py2
-rw-r--r--test cases/common/205 generator in subdir/com/mesonbuild/genprog.py46
-rw-r--r--test cases/common/205 generator in subdir/com/mesonbuild/meson.build10
-rw-r--r--test cases/common/205 generator in subdir/com/mesonbuild/subbie.inp1
-rw-r--r--test cases/common/205 generator in subdir/com/mesonbuild/testprog.c5
-rw-r--r--test cases/common/205 generator in subdir/meson.build3
6 files changed, 66 insertions, 1 deletions
diff --git a/mesonbuild/backend/vs2010backend.py b/mesonbuild/backend/vs2010backend.py
index c36022f..acbb12d 100644
--- a/mesonbuild/backend/vs2010backend.py
+++ b/mesonbuild/backend/vs2010backend.py
@@ -105,7 +105,7 @@ class Vs2010Backend(backends.Backend):
exe = generator.get_exe()
infilelist = genlist.get_inputs()
outfilelist = genlist.get_outputs()
- source_dir = os.path.join(self.build_to_src, genlist.subdir)
+ source_dir = os.path.join(down, self.build_to_src, genlist.subdir)
exe_arr = self.exe_object_to_cmd_array(exe)
idgroup = ET.SubElement(parent_node, 'ItemGroup')
for i in range(len(infilelist)):
diff --git a/test cases/common/205 generator in subdir/com/mesonbuild/genprog.py b/test cases/common/205 generator in subdir/com/mesonbuild/genprog.py
new file mode 100644
index 0000000..1e10998
--- /dev/null
+++ b/test cases/common/205 generator in subdir/com/mesonbuild/genprog.py
@@ -0,0 +1,46 @@
+#!/usr/bin/env python3
+
+import os, sys, argparse
+
+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))
diff --git a/test cases/common/205 generator in subdir/com/mesonbuild/meson.build b/test cases/common/205 generator in subdir/com/mesonbuild/meson.build
new file mode 100644
index 0000000..4808743
--- /dev/null
+++ b/test cases/common/205 generator in subdir/com/mesonbuild/meson.build
@@ -0,0 +1,10 @@
+gprog = find_program('genprog.py')
+
+gen = generator(gprog, \
+ output : ['@BASENAME@.c', '@BASENAME@.h'],
+ arguments : ['--searchdir=@CURRENT_SOURCE_DIR@', '--outdir=@BUILD_DIR@', '@INPUT@'])
+
+generated = gen.process('subbie.inp')
+
+e = executable('testprog', 'testprog.c', generated)
+test('testprog', e)
diff --git a/test cases/common/205 generator in subdir/com/mesonbuild/subbie.inp b/test cases/common/205 generator in subdir/com/mesonbuild/subbie.inp
new file mode 100644
index 0000000..df0f4e9
--- /dev/null
+++ b/test cases/common/205 generator in subdir/com/mesonbuild/subbie.inp
@@ -0,0 +1 @@
+subbie
diff --git a/test cases/common/205 generator in subdir/com/mesonbuild/testprog.c b/test cases/common/205 generator in subdir/com/mesonbuild/testprog.c
new file mode 100644
index 0000000..58867ad
--- /dev/null
+++ b/test cases/common/205 generator in subdir/com/mesonbuild/testprog.c
@@ -0,0 +1,5 @@
+#include"subbie.h"
+
+int main(int argc, char **argv) {
+ return subbie();
+}
diff --git a/test cases/common/205 generator in subdir/meson.build b/test cases/common/205 generator in subdir/meson.build
new file mode 100644
index 0000000..9b8eb7c
--- /dev/null
+++ b/test cases/common/205 generator in subdir/meson.build
@@ -0,0 +1,3 @@
+project('generator in subdir', 'c')
+
+subdir('com/mesonbuild')