Merged Genie support.

This commit is contained in:
Jussi Pakkanen 2017-06-27 19:01:00 +03:00
commit dfb0414d9c
15 changed files with 86 additions and 9 deletions

View File

@ -18,3 +18,8 @@ Meson will now check the keyword arguments used when calling any function
and print a warning if any of the keyword arguments is not known. In the
future this will become a hard error.
## Add support for Genie to Vala compiler
The Vala compiler has an alternative syntax, Genie, that uses the `.gs`
file extension. Meson now recognises and uses Genie files.

View File

@ -1,14 +1,14 @@
---
title: Vala
short-description: Compiling Vala programs
short-description: Compiling Vala and Genie programs
...
# Compiling Vala applications
Meson has support for compiling Vala programs. A skeleton Vala file looks like this.
Meson has support for compiling Vala and Genie programs. A skeleton `meson.build` file for Vala looks like this:
```meson
project('valaprog', ['vala', 'c'])
project('valaprog', 'vala', 'c')
glib_dep = dependency('glib-2.0')
gobject_dep = dependency('gobject-2.0')

View File

@ -307,7 +307,7 @@ class Backend:
if isinstance(source, mesonlib.File):
source = source.fname
# foo.vala files compile down to foo.c and then foo.c.o, not foo.vala.o
if source.endswith('.vala'):
if source.endswith(('.vala', '.gs')):
if is_unity:
return source[:-5] + '.c.' + self.environment.get_object_suffix()
source = os.path.join(self.get_target_private_dir(target), source[:-5] + '.c')

View File

@ -1005,7 +1005,7 @@ int dummy;
def split_vala_sources(self, t):
"""
Splits the target's sources into .vala, .vapi, and other sources.
Splits the target's sources into .vala, .gs, .vapi, and other sources.
Handles both pre-existing and generated sources.
Returns a tuple (vala, vapi, others) each of which is a dictionary with
@ -1026,7 +1026,7 @@ int dummy;
'mesonlib.File, not {!r}'.format(t, s)
raise InvalidArguments(msg)
f = s.rel_to_builddir(self.build_to_src)
if s.endswith('.vala'):
if s.endswith(('.vala', '.gs')):
srctype = vala
elif s.endswith('.vapi'):
srctype = vapi
@ -1037,7 +1037,7 @@ int dummy;
for gensrc in t.get_generated_sources():
for s in gensrc.get_outputs():
f = self.get_target_generated_dir(t, gensrc, s)
if s.endswith('.vala'):
if s.endswith(('.vala', '.gs')):
srctype = vala
elif s.endswith('.vapi'):
srctype = vapi
@ -1061,7 +1061,7 @@ int dummy;
(vala_src, vapi_src, other_src) = self.split_vala_sources(target)
extra_dep_files = []
if not vala_src:
msg = 'Vala library {!r} has no Vala source files.'
msg = 'Vala library {!r} has no Vala or Genie source files.'
raise InvalidArguments(msg.format(target.name))
valac = target.compilers['vala']

View File

@ -39,7 +39,7 @@ lang_suffixes = {
'objc': ('m',),
'objcpp': ('mm',),
'rust': ('rs',),
'vala': ('vala', 'vapi'),
'vala': ('vala', 'vapi', 'gs'),
'cs': ('cs',),
'swift': ('swift',),
'java': ('java',),

View File

@ -0,0 +1,6 @@
project('genietest', 'vala', 'c')
valadeps = [dependency('glib-2.0'), dependency('gobject-2.0')]
e = executable('genieprog', 'prog.gs', dependencies : valadeps)
test('genietest', e)

View File

@ -0,0 +1,2 @@
init
print ("Genie is working.")

View File

@ -0,0 +1,5 @@
#include <glib.h>
gboolean c_test_one_is_true (void) {
return TRUE;
}

View File

@ -0,0 +1,5 @@
#include <glib.h>
gboolean c_test_two_is_true (void) {
return TRUE;
}

View File

@ -0,0 +1,11 @@
def extern c_test_one_is_true():bool
def extern c_test_two_is_true():bool
init
assert( new Genie.TestOne().is_true() )
assert( new Genie.TestTwo().is_true() )
assert( new Vala.TestOne().is_true() )
assert( new Vala.TestTwo().is_true() )
assert( c_test_one_is_true() )
assert( c_test_two_is_true() )

View File

@ -0,0 +1,19 @@
project( 'Genie multiple and mixed sources', 'vala', 'c' )
genie_deps = [
dependency( 'glib-2.0' ),
dependency( 'gobject-2.0' ),
]
sources = [
'init.gs',
'test_one.gs',
'test_two.gs',
'vala_test_one.vala',
'vala_test_two.vala',
'c_test_one.c',
'c_test_two.c',
]
prog = executable( 'genie_prog', sources, dependencies: genie_deps )
test( 'Given a Genie program when it is compiled from multiple mixed sources then it should work', prog )

View File

@ -0,0 +1,5 @@
namespace Genie
class TestOne
def is_true():bool
return true

View File

@ -0,0 +1,5 @@
namespace Genie
class TestTwo
def is_true():bool
return true

View File

@ -0,0 +1,7 @@
namespace Vala {
public class TestOne {
public bool is_true() {
return true;
}
}
}

View File

@ -0,0 +1,7 @@
namespace Vala {
public class TestTwo {
public bool is_true() {
return true;
}
}
}