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