|
|
|
# This file should expose all possible meson syntaxes
|
|
|
|
# and ensure the AstInterpreter and RawPrinter are able
|
|
|
|
|
|
|
|
# to parse and write a file identical to the original.
|
|
|
|
|
|
|
|
project ( # project comment 1
|
|
|
|
# project comment 2
|
|
|
|
'rewrite' , # argument comment
|
|
|
|
# project comment 3
|
|
|
|
'cpp',
|
|
|
|
'c',
|
|
|
|
default_options: [
|
|
|
|
'unity=on',
|
|
|
|
'unity_size=50', # number of cpp / unity. default is 4...
|
|
|
|
'warning_level=2', # eqv to /W3
|
|
|
|
'werror=true', # treat warnings as errors
|
|
|
|
'b_ndebug=if-release', # disable assert in Release
|
|
|
|
'cpp_eh=a', # /EHa exception handling
|
|
|
|
'cpp_std=c++17',
|
|
|
|
'cpp_winlibs=' + ','.join([ # array comment
|
|
|
|
# in array
|
|
|
|
# comment
|
|
|
|
'kernel32.lib',
|
|
|
|
'user32.lib',
|
|
|
|
'gdi32.lib',
|
|
|
|
'winspool.lib',
|
|
|
|
'comdlg32.lib',
|
|
|
|
'advapi32.lib',
|
|
|
|
'shell32.lib'
|
|
|
|
# before comma comment
|
|
|
|
,
|
|
|
|
# after comma comment
|
|
|
|
'ole32.lib',
|
|
|
|
'oleaut32.lib',
|
|
|
|
'uuid.lib',
|
|
|
|
'odbc32.lib',
|
|
|
|
'odbccp32.lib',
|
|
|
|
'Delayimp.lib', # For delay loaded dll
|
|
|
|
'OLDNAMES.lib',
|
|
|
|
'dbghelp.lib',
|
|
|
|
'psapi.lib',
|
|
|
|
]),
|
|
|
|
],
|
|
|
|
meson_version: '>=1.2',
|
|
|
|
version: '1.0.0',
|
|
|
|
) # project comment 4
|
|
|
|
|
|
|
|
cppcoro_dep = dependency('andreasbuhr-cppcoro-cppcoro')
|
|
|
|
cppcoro = declare_dependency(
|
|
|
|
dependencies: [cppcoro_dep.partial_dependency(
|
|
|
|
includes: true,
|
|
|
|
link_args: true,
|
|
|
|
links: true,
|
|
|
|
sources: true,
|
|
|
|
)],
|
|
|
|
# '/await:strict' allows to use <coroutine> rather than <experimental/coroutine> with C++17.
|
|
|
|
# We can remove '/await:strict' once we update to C++20.
|
|
|
|
compile_args: ['/await:strict'],
|
|
|
|
# includes:true doesn't work for now in partial_dependency()
|
|
|
|
# This line could be removed once https://github.com/mesonbuild/meson/pull/10122 is released.
|
|
|
|
include_directories: cppcoro_dep.get_variable('includedir1'),
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
if get_option('unicode') #if comment
|
|
|
|
#if comment 2
|
|
|
|
mfc=cpp_compiler.find_library(get_option('debug')?'mfc140ud':'mfc140u')
|
|
|
|
# if comment 3
|
|
|
|
else#elsecommentnowhitespaces
|
|
|
|
# else comment 1
|
|
|
|
mfc = cpp_compiler.find_library( get_option( 'debug' ) ? 'mfc140d' : 'mfc140')
|
|
|
|
# else comment 2
|
|
|
|
endif #endif comment
|
|
|
|
|
|
|
|
|
|
|
|
assert(1 in [1, 2], '''1 should be in [1, 2]''')
|
|
|
|
assert(3 not in [1, 2], '''3 shouldn't be in [1, 2]''')
|
|
|
|
assert(not (3 in [1, 2]), '''3 shouldn't be in [1, 2]''')
|
|
|
|
|
|
|
|
assert('b' in ['a', 'b'], ''''b' should be in ['a', 'b']''')
|
|
|
|
assert('c' not in ['a', 'b'], ''''c' shouldn't be in ['a', 'b']''')
|
|
|
|
|
|
|
|
assert(exe1 in [exe1, exe2], ''''exe1 should be in [exe1, exe2]''')
|
|
|
|
assert(exe3 not in [exe1, exe2], ''''exe3 shouldn't be in [exe1, exe2]''')
|
|
|
|
|
|
|
|
assert('a' in {'a': 'b'}, '''1 should be in {'a': 'b'}''')
|
|
|
|
assert('b'not in{'a':'b'}, '''1 should be in {'a': 'b'}''')
|
|
|
|
|
|
|
|
assert('a'in'abc')
|
|
|
|
assert('b' not in 'def')
|
|
|
|
|
|
|
|
|
|
|
|
w = 'world'
|
|
|
|
d = {'a': 1, 'b': 0b10101010, 'c': 'pi', 'd': '''a
|
|
|
|
b
|
|
|
|
c''', 'e': f'hello @w@', 'f': f'''triple
|
|
|
|
formatted
|
|
|
|
string # this is not a comment
|
|
|
|
hello @w@
|
|
|
|
''', 'g': [1, 2, 3],
|
|
|
|
|
|
|
|
'h' # comment a
|
|
|
|
: # comment b
|
|
|
|
0xDEADBEEF # comment c
|
|
|
|
, # comment d
|
|
|
|
'hh': 0xfeedc0de, # lowercase hexa
|
|
|
|
'hhh': 0XaBcD0123, # mixed case hexa
|
|
|
|
'oo': 0O123456, # upper O octa
|
|
|
|
'bb': 0B1111, # upper B binary
|
|
|
|
'i': {'aa': 11, # this is a comment
|
|
|
|
'bb': 22}, # a comment inside a dict
|
|
|
|
'o': 0o754,
|
|
|
|
'm': -12, # minus number
|
|
|
|
'eq': 1 + 3 - 3 % 4 + -( 7 * 8 ),
|
|
|
|
} # end of dict comment
|
|
|
|
|
|
|
|
hw = d['e']
|
|
|
|
one = d['g'][0]
|
|
|
|
w += '!'
|
|
|
|
|
|
|
|
|
|
|
|
components = {
|
|
|
|
'foo': ['foo.c'],
|
|
|
|
'bar': ['bar.c'],
|
|
|
|
'baz': ['baz.c'], # this line is indented with a tab!
|
|
|
|
}
|
|
|
|
|
|
|
|
# compute a configuration based on system dependencies, custom logic
|
|
|
|
conf = configuration_data()
|
|
|
|
conf.set('USE_FOO', 1)
|
|
|
|
|
|
|
|
# Determine the sources to compile
|
|
|
|
sources_to_compile = []
|
|
|
|
foreach name, sources : components
|
|
|
|
if conf.get('USE_@0@'.format(name.to_upper()), 0) == 1
|
|
|
|
sources_to_compile += sources
|
|
|
|
endif
|
|
|
|
endforeach
|
|
|
|
|
|
|
|
|
|
|
|
items = ['a', 'continue', 'b', 'break', 'c']
|
|
|
|
result = []
|
|
|
|
foreach i : items
|
|
|
|
if i == 'continue'
|
|
|
|
continue
|
|
|
|
elif i == 'break'
|
|
|
|
break
|
|
|
|
endif
|
|
|
|
result += i
|
|
|
|
endforeach
|
|
|
|
# result is ['a', 'b']
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if a and b
|
|
|
|
# do something
|
|
|
|
endif
|
|
|
|
if c or d
|
|
|
|
# do something
|
|
|
|
endif
|
|
|
|
if not e
|
|
|
|
# do something
|
|
|
|
endif
|
|
|
|
if not (f or g)
|
|
|
|
# do something
|
|
|
|
endif
|
|
|
|
|
|
|
|
single_quote = 'contains a \' character'
|
|
|
|
string_escapes = '\\\'\a\b\f\n\r\t\v\046\x26\u2D4d\U00002d4d\N{GREEK CAPITAL LETTER DELTA}'
|
|
|
|
no_string_escapes = '''\\\'\a\b\f\n\r\t\v\046\x26\u2D4d\U00002d4d\N{GREEK CAPITAL LETTER DELTA}'''
|
|
|
|
|
|
|
|
# FIXME: is it supposed to work? (cont_eol inside string)
|
|
|
|
# cont_string = 'blablabla\
|
|
|
|
# blablabla'
|
|
|
|
|
|
|
|
# cont_eol with whitespace and comments after
|
|
|
|
if a \ # comment in cont 1
|
|
|
|
and b \ # comment in cont 2
|
|
|
|
or c # comment in cont 3
|
|
|
|
message('ok')
|
|
|
|
endif
|
|
|
|
|
|
|
|
if a \
|
|
|
|
or b
|
|
|
|
debug('help!')
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
|
|
# End of file comment with no linebreak
|