Merge pull request #4174 from jon-turney/link-with-custom-target

Improve error when trying to link_with a custom_target
pull/4205/head
Jussi Pakkanen 6 years ago committed by GitHub
commit b6f03f897b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 5
      mesonbuild/build.py
  2. 5
      test cases/failing/89 link_with custom target/demo.c
  3. 3
      test cases/failing/89 link_with custom target/foo.c
  4. 24
      test cases/failing/89 link_with custom target/lib_generator.py
  5. 23
      test cases/failing/89 link_with custom target/meson.build

@ -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

@ -0,0 +1,5 @@
int func_in_foo();
int main(int argc, char **argv) {
return func_in_foo();
}

@ -0,0 +1,3 @@
int func_in_foo() {
return 0;
}

@ -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)

@ -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])
Loading…
Cancel
Save