aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2016-05-28 23:09:59 +0300
committerJussi Pakkanen <jpakkane@gmail.com>2016-05-28 23:09:59 +0300
commitc2082146abd400f8b3f8841acbf2fd324d6cb43a (patch)
treef826e6226e626ed19b70f431c4b0ed4d915b5804
parentaac7f6ef1f1c1b5e8e1a296181f76eff203ef284 (diff)
parenta29d9c2c332bcf6147a6a87eeab408bc43fcd30b (diff)
downloadmeson-c2082146abd400f8b3f8841acbf2fd324d6cb43a.zip
meson-c2082146abd400f8b3f8841acbf2fd324d6cb43a.tar.gz
meson-c2082146abd400f8b3f8841acbf2fd324d6cb43a.tar.bz2
Merge branch 'nioncode-vs-generator'
-rw-r--r--mesonbuild/backend/backends.py13
-rw-r--r--mesonbuild/backend/ninjabackend.py13
-rw-r--r--mesonbuild/backend/vs2010backend.py5
-rw-r--r--test cases/common/59 object generator/meson.build8
-rw-r--r--test cases/common/59 object generator/prog.c3
-rw-r--r--test cases/common/59 object generator/source3.c3
6 files changed, 28 insertions, 17 deletions
diff --git a/mesonbuild/backend/backends.py b/mesonbuild/backend/backends.py
index d4a0f99..4ff1553 100644
--- a/mesonbuild/backend/backends.py
+++ b/mesonbuild/backend/backends.py
@@ -433,6 +433,19 @@ class Backend():
final_args.append(a)
return final_args
+ def replace_outputs(self, args, private_dir, output_list):
+ newargs = []
+ regex = re.compile('@OUTPUT(\d+)@')
+ for arg in args:
+ m = regex.search(arg)
+ while m is not None:
+ index = int(m.group(1))
+ src = '@OUTPUT%d@' % index
+ arg = arg.replace(src, os.path.join(private_dir, output_list[index]))
+ m = regex.search(arg)
+ newargs.append(arg)
+ return newargs
+
def get_custom_target_provided_libraries(self, target):
libs = []
for t in target.get_generated_sources():
diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py
index 05702fd..3bec19d 100644
--- a/mesonbuild/backend/ninjabackend.py
+++ b/mesonbuild/backend/ninjabackend.py
@@ -1286,19 +1286,6 @@ rule FORTRAN_DEP_HACK
self.generate_pch_rule_for(langname, compiler, qstr, True, outfile)
outfile.write('\n')
- def replace_outputs(self, args, private_dir, output_list):
- newargs = []
- regex = re.compile('@OUTPUT(\d+)@')
- for arg in args:
- m = regex.search(arg)
- while m is not None:
- index = int(m.group(1))
- src = '@OUTPUT%d@' % index
- arg = arg.replace(src, os.path.join(private_dir, output_list[index]))
- m = regex.search(arg)
- newargs.append(arg)
- return newargs
-
def generate_custom_generator_rules(self, target, outfile):
for genlist in target.get_generated_sources():
if isinstance(genlist, build.CustomTarget):
diff --git a/mesonbuild/backend/vs2010backend.py b/mesonbuild/backend/vs2010backend.py
index 82d0dc9..355798d 100644
--- a/mesonbuild/backend/vs2010backend.py
+++ b/mesonbuild/backend/vs2010backend.py
@@ -96,11 +96,12 @@ class Vs2010Backend(backends.Backend):
sole_output = ''
curfile = infilelist[i]
infilename = os.path.join(self.environment.get_source_dir(), curfile)
- outfiles = genlist.get_outputs_for(curfile)
- outfiles = [os.path.join(target_private_dir, of) for of in outfiles]
+ outfiles_rel = genlist.get_outputs_for(curfile)
+ outfiles = [os.path.join(target_private_dir, of) for of in outfiles_rel]
generator_output_files += outfiles
args = [x.replace("@INPUT@", infilename).replace('@OUTPUT@', sole_output)\
for x in base_args]
+ args = self.replace_outputs(args, target_private_dir, outfiles_rel)
args = [x.replace("@SOURCE_DIR@", self.environment.get_source_dir()).replace("@BUILD_DIR@", target_private_dir)
for x in args]
fullcmd = exe_arr + self.replace_extra_args(args, genlist)
diff --git a/test cases/common/59 object generator/meson.build b/test cases/common/59 object generator/meson.build
index fc31ed6..0bdefb8 100644
--- a/test cases/common/59 object generator/meson.build
+++ b/test cases/common/59 object generator/meson.build
@@ -20,6 +20,12 @@ gen = generator(python,
generated = gen.process(['source.c', 'source2.c'])
-e = executable('prog', 'prog.c', generated)
+# Generate an object file with indexed OUTPUT replacement.
+gen2 = generator(python,
+ output : outputname,
+ arguments : [comp, cc, '@INPUT@', '@OUTPUT0@'])
+generated2 = gen2.process(['source3.c'])
+
+e = executable('prog', 'prog.c', generated, generated2)
test('objgen', e) \ No newline at end of file
diff --git a/test cases/common/59 object generator/prog.c b/test cases/common/59 object generator/prog.c
index ba793f2..60459d6 100644
--- a/test cases/common/59 object generator/prog.c
+++ b/test cases/common/59 object generator/prog.c
@@ -1,6 +1,7 @@
int func1_in_obj();
int func2_in_obj();
+int func3_in_obj();
int main(int argc, char **argv) {
- return func1_in_obj() + func2_in_obj();
+ return func1_in_obj() + func2_in_obj() + func3_in_obj();
}
diff --git a/test cases/common/59 object generator/source3.c b/test cases/common/59 object generator/source3.c
new file mode 100644
index 0000000..1580f1e
--- /dev/null
+++ b/test cases/common/59 object generator/source3.c
@@ -0,0 +1,3 @@
+int func3_in_obj() {
+ return 0;
+}