aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mesonbuild/compilers/c.py11
-rw-r--r--mesonbuild/interpreter.py4
-rw-r--r--test cases/common/140 get define/meson.build2
3 files changed, 15 insertions, 2 deletions
diff --git a/mesonbuild/compilers/c.py b/mesonbuild/compilers/c.py
index 6145574..dc7a9f5 100644
--- a/mesonbuild/compilers/c.py
+++ b/mesonbuild/compilers/c.py
@@ -12,7 +12,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-import subprocess, os.path
+import subprocess, os.path, re
from .. import mlog
from .. import coredata
@@ -934,6 +934,15 @@ class CCompiler(Compiler):
code = 'int main(int argc, char **argv) { return 0; }'
return self.has_arguments(args, env, code, mode='link')
+ def concatenate_string_literals(self, s):
+ pattern = re.compile(r'(?P<pre>.*([^\\]")|^")(?P<str1>([^\\"]|\\.)*)"\s+"(?P<str2>([^\\"]|\\.)*)(?P<post>".*)')
+ ret = s
+ m = pattern.match(ret)
+ while m:
+ ret = ''.join(m.group('pre', 'str1', 'str2', 'post'))
+ m = pattern.match(ret)
+ return ret
+
class ClangCCompiler(ClangCompiler, CCompiler):
def __init__(self, exelist, version, clang_type, is_cross, exe_wrapper=None, **kwargs):
CCompiler.__init__(self, exelist, version, is_cross, exe_wrapper, **kwargs)
diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py
index 421ddd9..e4ba63c 100644
--- a/mesonbuild/interpreter.py
+++ b/mesonbuild/interpreter.py
@@ -1174,6 +1174,7 @@ class CompilerHolder(InterpreterObject):
'include_directories',
'args',
'dependencies',
+ 'concatenate_string_literals',
})
def get_define_method(self, args, kwargs):
if len(args) != 1:
@@ -1181,12 +1182,15 @@ class CompilerHolder(InterpreterObject):
check_stringlist(args)
element = args[0]
prefix = kwargs.get('prefix', '')
+ concatenate = kwargs.pop('concatenate_string_literals', False)
if not isinstance(prefix, str):
raise InterpreterException('Prefix argument of get_define() must be a string.')
extra_args = self.determine_args(kwargs)
deps = self.determine_dependencies(kwargs)
value = self.compiler.get_define(element, prefix, self.environment, extra_args, deps)
mlog.log('Fetching value of define "%s": %s' % (element, value))
+ if concatenate:
+ value = self.compiler.concatenate_string_literals(value)
return value
@permittedKwargs({
diff --git a/test cases/common/140 get define/meson.build b/test cases/common/140 get define/meson.build
index 761057b..5d7f858 100644
--- a/test cases/common/140 get define/meson.build
+++ b/test cases/common/140 get define/meson.build
@@ -82,6 +82,6 @@ foreach lang : ['c', 'cpp']
endif
have = cc.get_define('TEST_VERSION_STR',
- prefix : '#include <concat.h>', include_directories: include_directories('.'))
+ prefix : '#include <concat.h>', include_directories: include_directories('.'), concatenate_string_literals: true)
assert(have == '"6.0.0"', 'TEST_VERSION_STR value is "@0@" instead of ""6.0.0""'.format(have))
endforeach