aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2018-09-17 22:49:01 +0300
committerGitHub <noreply@github.com>2018-09-17 22:49:01 +0300
commitb6f03f897b63b83dcecafbe49439064ef86ebe72 (patch)
tree56ca7803b500c5d02d5e2b318eaa246048e0f215
parentd0648ee077c6009609bbba474882283a74f5e649 (diff)
parent623a8010e63fd55b596cc19ac6a9bc6e93f53cef (diff)
downloadmeson-b6f03f897b63b83dcecafbe49439064ef86ebe72.zip
meson-b6f03f897b63b83dcecafbe49439064ef86ebe72.tar.gz
meson-b6f03f897b63b83dcecafbe49439064ef86ebe72.tar.bz2
Merge pull request #4174 from jon-turney/link-with-custom-target
Improve error when trying to link_with a custom_target
-rw-r--r--mesonbuild/build.py5
-rw-r--r--test cases/failing/89 link_with custom target/demo.c5
-rw-r--r--test cases/failing/89 link_with custom target/foo.c3
-rwxr-xr-xtest cases/failing/89 link_with custom target/lib_generator.py24
-rw-r--r--test cases/failing/89 link_with custom target/meson.build23
5 files changed, 57 insertions, 3 deletions
diff --git a/mesonbuild/build.py b/mesonbuild/build.py
index ec6e1e6..eb0e294 100644
--- a/mesonbuild/build.py
+++ b/mesonbuild/build.py
@@ -363,6 +363,8 @@ a hard error in the future.''' % name)
result[k] = v
return result
+ def is_linkable_target(self):
+ return False
class BuildTarget(Target):
known_kwargs = known_build_target_kwargs
@@ -1103,9 +1105,6 @@ You probably should put it in link_with instead.''')
return True
return False
- def is_linkable_target(self):
- return False
-
def check_module_linking(self):
'''
Warn if shared modules are linked with target: (link_with) #2865
diff --git a/test cases/failing/89 link_with custom target/demo.c b/test cases/failing/89 link_with custom target/demo.c
new file mode 100644
index 0000000..b6feaca
--- /dev/null
+++ b/test cases/failing/89 link_with custom target/demo.c
@@ -0,0 +1,5 @@
+int func_in_foo();
+
+int main(int argc, char **argv) {
+ return func_in_foo();
+}
diff --git a/test cases/failing/89 link_with custom target/foo.c b/test cases/failing/89 link_with custom target/foo.c
new file mode 100644
index 0000000..2c71422
--- /dev/null
+++ b/test cases/failing/89 link_with custom target/foo.c
@@ -0,0 +1,3 @@
+int func_in_foo() {
+ return 0;
+}
diff --git a/test cases/failing/89 link_with custom target/lib_generator.py b/test cases/failing/89 link_with custom target/lib_generator.py
new file mode 100755
index 0000000..98ed5a8
--- /dev/null
+++ b/test cases/failing/89 link_with custom target/lib_generator.py
@@ -0,0 +1,24 @@
+#!/usr/bin/env python3
+
+# Mimic a binary that generates a static library
+
+import os
+import subprocess
+import sys
+
+if __name__ == '__main__':
+ if len(sys.argv) != 4:
+ print(sys.argv[0], 'compiler input_file output_file')
+ sys.exit(1)
+ compiler = sys.argv[1]
+ ifile = sys.argv[2]
+ ofile = sys.argv[3]
+ tmp = ifile + '.o'
+ if compiler.endswith('cl'):
+ subprocess.check_call([compiler, '/nologo', '/MDd', '/Fo' + tmp, '/c', ifile])
+ subprocess.check_call(['lib', '/nologo', '/OUT:' + ofile, tmp])
+ else:
+ subprocess.check_call([compiler, '-c', ifile, '-o', tmp])
+ subprocess.check_call(['ar', 'csr', ofile, tmp])
+
+os.unlink(tmp)
diff --git a/test cases/failing/89 link_with custom target/meson.build b/test cases/failing/89 link_with custom target/meson.build
new file mode 100644
index 0000000..6977ca1
--- /dev/null
+++ b/test cases/failing/89 link_with custom target/meson.build
@@ -0,0 +1,23 @@
+project('link_with custom target', ['c'])
+
+#
+# libraries created by a custom_target currently can be used in sources: (see
+# common/100 manygen/ for an example of that), but not in link_with:
+#
+
+lib_generator = find_program('lib_generator.py')
+
+cc = meson.get_compiler('c').cmd_array().get(-1)
+
+libfoo_target = custom_target(
+ 'libfoo',
+ input: ['foo.c'],
+ output: ['libfoo.a'],
+ command: [lib_generator, cc, '@INPUT@', '@OUTPUT@']
+)
+
+libfoo = declare_dependency(
+ link_with: libfoo_target,
+)
+
+executable('demo', ['demo.c'], dependencies: [libfoo])