|
|
|
project('ninja special characters' ,'c')
|
|
|
|
|
|
|
|
python = import('python3').find_python()
|
|
|
|
|
|
|
|
# Without newlines, this should appear directly in build.ninja.
|
|
|
|
gen = custom_target('gen',
|
|
|
|
command : [
|
|
|
|
python,
|
|
|
|
files('check_quoting.py'),
|
|
|
|
'dollar=$',
|
|
|
|
'colon=:',
|
|
|
|
'space= ',
|
|
|
|
'''multi1= ::$$ ::$$''',
|
|
|
|
'@OUTPUT@'],
|
|
|
|
output : 'result',
|
|
|
|
install : true,
|
|
|
|
install_dir : get_option('datadir'))
|
|
|
|
|
|
|
|
# With newlines, this should go through the exe wrapper.
|
|
|
|
gen2 = custom_target('gen2',
|
|
|
|
command : [
|
|
|
|
python,
|
|
|
|
files('check_quoting.py'),
|
|
|
|
'''newline=
|
|
|
|
''',
|
|
|
|
'dollar=$',
|
|
|
|
'colon=:',
|
|
|
|
'space= ',
|
|
|
|
'''multi2= ::$$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
::$$''',
|
|
|
|
'@OUTPUT@'],
|
|
|
|
output : 'result2',
|
|
|
|
install : true,
|
|
|
|
install_dir : get_option('datadir'))
|
|
|
|
|
|
|
|
# Test that we can pass these special characters in compiler arguments
|
|
|
|
#
|
|
|
|
# (this part of the test is crafted so we don't try to use these special
|
|
|
|
# characters in filenames or target names)
|
|
|
|
#
|
|
|
|
# TODO: similar tests needed for languages other than C
|
|
|
|
# TODO: add similar test for quote, doublequote, and hash, carefully
|
|
|
|
# Re hash, see
|
|
|
|
# https://docs.microsoft.com/en-us/cpp/build/reference/d-preprocessor-definitions
|
|
|
|
|
|
|
|
special = [
|
|
|
|
['amp', '&'],
|
|
|
|
['at', '@'],
|
|
|
|
['backslash', '\\'],
|
|
|
|
['dollar', '$'],
|
|
|
|
['gt', '>'],
|
|
|
|
['lt', '<'],
|
|
|
|
['slash', '/'],
|
|
|
|
]
|
|
|
|
|
|
|
|
cc = meson.get_compiler('c')
|
|
|
|
|
|
|
|
foreach s : special
|
|
|
|
args = '-DCHAR="@0@"'.format(s[1])
|
|
|
|
e = executable('arg-string-' + s[0], 'arg-string-test.c', c_args: args)
|
|
|
|
test('arg-string-' + s[0], e, args: s[1])
|
|
|
|
|
|
|
|
args = '-DCHAR=@0@'.format(s[1])
|
|
|
|
e = executable('arg-unquoted-' + s[0], 'arg-unquoted-test.c', c_args: args)
|
|
|
|
test('arg-unquoted-' + s[0], e, args: s[1])
|
|
|
|
endforeach
|
|
|
|
|
|
|
|
foreach s : special
|
|
|
|
args = '-DCHAR=\'@0@\''.format(s[1])
|
|
|
|
e = executable('arg-char-' + s[0], 'arg-char-test.c', c_args: args)
|
|
|
|
test('arg-char-' + s[0], e, args: s[1])
|
|
|
|
endforeach
|