summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/markdown/Reference-manual.md6
-rw-r--r--docs/markdown/snippets/includestr.md16
-rw-r--r--mesonbuild/interpreter.py17
-rw-r--r--test cases/common/19 includedir/src/meson.build3
-rw-r--r--test cases/common/84 declare dep/entity/meson.build2
5 files changed, 40 insertions, 4 deletions
diff --git a/docs/markdown/Reference-manual.md b/docs/markdown/Reference-manual.md
index 92a7aed7e..0ddd4a921 100644
--- a/docs/markdown/Reference-manual.md
+++ b/docs/markdown/Reference-manual.md
@@ -349,7 +349,8 @@ keyword arguments.
- `compile_args`, compile arguments to use
- `dependencies`, other dependencies needed to use this dependency
- - `include_directories`, the directories to add to header search path
+ - `include_directories`, the directories to add to header search path,
+ must be include_directories objects or, since 0.50.0, plain strings
- `link_args`, link arguments to use
- `link_with`, libraries to link against
- `link_whole`, libraries to link fully, same as [`executable`](#executable)
@@ -530,7 +531,8 @@ be passed to [shared and static libraries](#library).
adds the current source and build directories to the include path,
defaults to `true`, since 0.42.0
- `include_directories` one or more objects created with the
- `include_directories` function
+ `include_directories` function, or, since 0.50.0, strings, which
+ will be transparently expanded to include directory objects
- `install`, when set to true, this executable should be installed
- `install_dir` override install directory for this file. The value is
relative to the `prefix` specified. F.ex, if you want to install
diff --git a/docs/markdown/snippets/includestr.md b/docs/markdown/snippets/includestr.md
new file mode 100644
index 000000000..fd4c1303c
--- /dev/null
+++ b/docs/markdown/snippets/includestr.md
@@ -0,0 +1,16 @@
+## `include_directories` accepts a string
+
+The `include_directories` keyword argument now accepts plain strings
+rather than an include directory object. Meson will transparently
+expand it so that a declaration like this:
+
+```meson
+executable(..., include_directories: 'foo')
+```
+
+Is equivalent to this:
+
+```meson
+foo_inc = include_directories('foo')
+executable(..., include_directories: inc)
+```
diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py
index 39d1b81bd..61481a491 100644
--- a/mesonbuild/interpreter.py
+++ b/mesonbuild/interpreter.py
@@ -2209,7 +2209,7 @@ class Interpreter(InterpreterBase):
version = kwargs.get('version', self.project_version)
if not isinstance(version, str):
raise InterpreterException('Version must be a string.')
- incs = extract_as_list(kwargs, 'include_directories', unholder=True)
+ incs = self.entries_to_incdirs(extract_as_list(kwargs, 'include_directories', unholder=True))
libs = extract_as_list(kwargs, 'link_with', unholder=True)
libs_whole = extract_as_list(kwargs, 'link_whole', unholder=True)
sources = extract_as_list(kwargs, 'sources')
@@ -3708,6 +3708,19 @@ This will become a hard error in the future.''' % kwargs['input'])
self.build.data.append(build.Data([cfile], idir, install_mode))
return mesonlib.File.from_built_file(self.subdir, output)
+ def entries_to_incdirs(self, prospectives):
+ if not isinstance(prospectives, list):
+ return self.entries_to_incdirs([prospectives])[0]
+ result = []
+ for p in prospectives:
+ if isinstance(p, (IncludeDirsHolder, build.IncludeDirs)):
+ result.append(p)
+ elif isinstance(p, str):
+ result.append(self.build_incdir_object([p]))
+ else:
+ raise InterpreterException('Include directory objects can only be created from strings or include directories.')
+ return result
+
@permittedKwargs(permitted_kwargs['include_directories'])
@stringArgs
def func_include_directories(self, node, args, kwargs):
@@ -4069,6 +4082,8 @@ Try setting b_lundef to false instead.'''.format(self.coredata.base_options['b_s
# passed to library() when default_library == 'static'.
kwargs = {k: v for k, v in kwargs.items() if k in targetclass.known_kwargs}
+ if 'include_directories' in kwargs:
+ kwargs['include_directories'] = self.entries_to_incdirs(kwargs['include_directories'])
target = targetclass(name, self.subdir, self.subproject, is_cross, sources, objs, self.environment, kwargs)
if is_cross:
diff --git a/test cases/common/19 includedir/src/meson.build b/test cases/common/19 includedir/src/meson.build
index 87bd22489..20d9db10c 100644
--- a/test cases/common/19 includedir/src/meson.build
+++ b/test cases/common/19 includedir/src/meson.build
@@ -1,2 +1,5 @@
exe = executable('prog', 'prog.c', 'func.c', include_directories : inc)
test('inc test', exe)
+
+exe2 = executable('prog2', 'prog.c', 'func.c', include_directories : '../include')
+test('inc test 2', exe2)
diff --git a/test cases/common/84 declare dep/entity/meson.build b/test cases/common/84 declare dep/entity/meson.build
index 3bfe13cd8..5feb1b929 100644
--- a/test cases/common/84 declare dep/entity/meson.build
+++ b/test cases/common/84 declare dep/entity/meson.build
@@ -1,7 +1,7 @@
entity_lib = static_library('entity', 'entity1.c')
entity_dep = declare_dependency(link_with : [[entity_lib]],
- include_directories : include_directories('.'),
+ include_directories : '.',
sources : 'entity2.c',
compile_args : ['-DUSING_ENT=1'],
version : '1.2.3',