ninja: Deduplicate dependent vapis

The Vala compiler does not like being fed the same .vapi multiple times.
pull/1779/merge
Ole André Vadla Ravnås 8 years ago committed by Jussi Pakkanen
parent 1472f419ea
commit 9b5df6e442
  1. 8
      mesonbuild/backend/ninjabackend.py
  2. 11
      test cases/vala/18 vapi consumed twice/app.vala
  3. 10
      test cases/vala/18 vapi consumed twice/beer.vala
  4. 15
      test cases/vala/18 vapi consumed twice/meson.build
  5. 16
      test cases/vala/18 vapi consumed twice/person.vala

@ -20,7 +20,7 @@ from .. import mlog
from .. import dependencies from .. import dependencies
from .. import compilers from .. import compilers
from ..compilers import CompilerArgs from ..compilers import CompilerArgs
from ..mesonlib import File, MesonException from ..mesonlib import File, MesonException, OrderedSet
from ..mesonlib import get_meson_script, get_compiler_for_source, Popen_safe from ..mesonlib import get_meson_script, get_compiler_for_source, Popen_safe
from .backends import CleanTrees, InstallData from .backends import CleanTrees, InstallData
from ..build import InvalidArguments from ..build import InvalidArguments
@ -976,7 +976,7 @@ int dummy;
the same name as the BuildTarget and return the path to it relative to the same name as the BuildTarget and return the path to it relative to
the build directory. the build directory.
""" """
result = [] result = OrderedSet()
for dep in target.link_targets: for dep in target.link_targets:
for i in dep.sources: for i in dep.sources:
if hasattr(i, 'fname'): if hasattr(i, 'fname'):
@ -984,9 +984,9 @@ int dummy;
if i.endswith('vala'): if i.endswith('vala'):
vapiname = dep.name + '.vapi' vapiname = dep.name + '.vapi'
fullname = os.path.join(self.get_target_dir(dep), vapiname) fullname = os.path.join(self.get_target_dir(dep), vapiname)
result.append(fullname) result.add(fullname)
break break
return result return list(result)
def split_vala_sources(self, t): def split_vala_sources(self, t):
""" """

@ -0,0 +1,11 @@
namespace App {
public static int main(string[] args) {
var person = new Person();
print("Favorite beer of \"%s\" is %s\n", person.name, person.favorite_beer.flavor);
var beer = new Beer("tasty");
print("This beer is %s\n", beer.flavor);
return 0;
}
}

@ -0,0 +1,10 @@
public class Beer : Object {
public string flavor {
get;
construct;
}
public Beer(string flavor) {
Object(flavor: flavor);
}
}

@ -0,0 +1,15 @@
project('vapi consumed twice', 'vala', 'c')
base_deps = [dependency('glib-2.0'), dependency('gobject-2.0')]
beer = library('beer', 'beer.vala', dependencies : base_deps)
beer_dep = declare_dependency(link_with : beer)
person = library('person', 'person.vala', link_with : beer,
dependencies : base_deps)
person_dep = declare_dependency(link_with : person, dependencies : [beer_dep])
app = executable('app', 'app.vala',
dependencies : base_deps + [person_dep, beer_dep])
test('valavapiconsumedtwicetest', app)

@ -0,0 +1,16 @@
public class Person : Object {
public string name {
get {
return "Joe Badger";
}
}
public Beer favorite_beer {
get;
construct;
}
public Person() {
Object(favorite_beer: new Beer("smooth"));
}
}
Loading…
Cancel
Save