Do not add custom target dir automatically when implicit false.
This commit is contained in:
parent
448b11cb7f
commit
e80ff985fb
|
@ -0,0 +1,17 @@
|
|||
## Do not add custom target dir to header path if `implicit_include_directories` is `false`
|
||||
|
||||
If you do the following:
|
||||
|
||||
```meson
|
||||
# in some subdirectory
|
||||
gen_h = custom_target(...)
|
||||
# in some other directory
|
||||
executable('foo', 'foo.c', gen_h)
|
||||
```
|
||||
|
||||
then the output directory of the custom target is automatically added
|
||||
to the header search path. This is convenient, but sometimes it can
|
||||
lead to problems. Starting with this version, the directory will no
|
||||
longer be put in the search path if the target has
|
||||
`implicit_include_directories: false`. In these cases you need to set
|
||||
up the path manually with `include_directories`.
|
|
@ -2377,10 +2377,8 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485'''))
|
|||
commands += self.generate_basic_compiler_args(target, compiler, no_warn_args)
|
||||
# Add custom target dirs as includes automatically, but before
|
||||
# target-specific include directories.
|
||||
# XXX: Not sure if anyone actually uses this? It can cause problems in
|
||||
# situations which increase the likelihood for a header name collision,
|
||||
# such as in subprojects.
|
||||
commands += self.get_custom_target_dir_include_args(target, compiler)
|
||||
if target.implicit_include_directories:
|
||||
commands += self.get_custom_target_dir_include_args(target, compiler)
|
||||
# Add include dirs from the `include_directories:` kwarg on the target
|
||||
# and from `include_directories:` of internal deps of the target.
|
||||
#
|
||||
|
|
|
@ -5616,6 +5616,23 @@ class AllPlatformTests(BasePlatformTests):
|
|||
self.assertEqual(0, output.count('File reformatted:'))
|
||||
self.build('clang-format-check')
|
||||
|
||||
def test_custom_target_implicit_include(self):
|
||||
testdir = os.path.join(self.unit_test_dir, '94 custominc')
|
||||
self.init(testdir)
|
||||
self.build()
|
||||
compdb = self.get_compdb()
|
||||
matches = 0
|
||||
for c in compdb:
|
||||
if 'prog.c' in c['file']:
|
||||
self.assertNotIn('easytogrepfor', c['command'])
|
||||
matches += 1
|
||||
self.assertEqual(matches, 1)
|
||||
matches = 0
|
||||
for c in compdb:
|
||||
if 'prog2.c' in c['file']:
|
||||
self.assertIn('easytogrepfor', c['command'])
|
||||
matches += 1
|
||||
self.assertEqual(matches, 1)
|
||||
|
||||
class FailureTests(BasePlatformTests):
|
||||
'''
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import sys
|
||||
|
||||
f = open(sys.argv[1], 'w')
|
||||
f.write('#define RETURN_VALUE 0')
|
||||
f.close()
|
|
@ -0,0 +1,3 @@
|
|||
genh = custom_target('header',
|
||||
output: 'generated.h',
|
||||
command: [find_program('genh.py'), '@OUTPUT@'])
|
|
@ -0,0 +1,5 @@
|
|||
#include<generated.h>
|
||||
|
||||
int func(void) {
|
||||
return RETURN_VALUE;
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
project('implicit custom dirs', 'c')
|
||||
|
||||
subdir('easytogrepfor')
|
||||
|
||||
l = static_library('helper', 'helper.c', genh)
|
||||
d = declare_dependency(link_with: l, sources: genh)
|
||||
executable('prog', 'prog.c', dependencies: d, implicit_include_directories: false)
|
||||
|
||||
executable('prog2', 'prog2.c', dependencies: d)
|
|
@ -0,0 +1,9 @@
|
|||
#include<stdlib.h>
|
||||
|
||||
int func(void);
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
(void)argc;
|
||||
(void)(argv);
|
||||
return func();
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
#include<stdlib.h>
|
||||
#include<generated.h>
|
||||
|
||||
int func(void);
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
(void)argc;
|
||||
(void)(argv);
|
||||
return func() + RETURN_VALUE;
|
||||
}
|
Loading…
Reference in New Issue