Merge pull request #2413 from tintou/vala-target-dirs

Don't rely on only the basename to distinguish vala-source-file objects
pull/2430/head
Jussi Pakkanen 7 years ago committed by GitHub
commit 295f8e14b1
  1. 13
      mesonbuild/backend/ninjabackend.py
  2. 5
      test cases/vala/22 same target in directories/Subdir/Subdir2/Test.vala
  3. 5
      test cases/vala/22 same target in directories/Subdir/Test.vala
  4. 5
      test cases/vala/22 same target in directories/Subdir2/Test.vala
  5. 5
      test cases/vala/22 same target in directories/Test.vala
  6. 13
      test cases/vala/22 same target in directories/meson.build
  7. 8
      test cases/vala/22 same target in directories/prog.vala

@ -1131,7 +1131,11 @@ int dummy;
# file is outside the build directory, the path components will be # file is outside the build directory, the path components will be
# stripped and just the basename will be used. # stripped and just the basename will be used.
if isinstance(gensrc, (build.CustomTarget, build.GeneratedList)) or gensrc.is_built: if isinstance(gensrc, (build.CustomTarget, build.GeneratedList)) or gensrc.is_built:
vala_c_file = os.path.splitext(vala_file)[0] + '.c' vala_c_file = os.path.splitext(os.path.basename(vala_file))[0] + '.c'
else:
path_to_target = os.path.join(self.build_to_src, target.get_subdir())
if vala_file.startswith(path_to_target):
vala_c_file = os.path.splitext(os.path.relpath(vala_file, path_to_target))[0] + '.c'
else: else:
vala_c_file = os.path.splitext(os.path.basename(vala_file))[0] + '.c' vala_c_file = os.path.splitext(os.path.basename(vala_file))[0] + '.c'
# All this will be placed inside the c_out_dir # All this will be placed inside the c_out_dir
@ -1144,13 +1148,14 @@ int dummy;
# Tell Valac to output everything in our private directory. Sadly this # Tell Valac to output everything in our private directory. Sadly this
# means it will also preserve the directory components of Vala sources # means it will also preserve the directory components of Vala sources
# found inside the build tree (generated sources). # found inside the build tree (generated sources).
args += ['-d', c_out_dir] args += ['--directory', c_out_dir]
args += ['--basedir', os.path.join(self.build_to_src, target.get_subdir())]
if not isinstance(target, build.Executable): if not isinstance(target, build.Executable):
# Library name # Library name
args += ['--library=' + target.name] args += ['--library', target.name]
# Outputted header # Outputted header
hname = os.path.join(self.get_target_dir(target), target.vala_header) hname = os.path.join(self.get_target_dir(target), target.vala_header)
args += ['-H', hname] args += ['--header', hname]
if self.is_unity(target): if self.is_unity(target):
# Without this the declarations will get duplicated in the .c # Without this the declarations will get duplicated in the .c
# files and cause a build failure when all of them are # files and cause a build failure when all of them are

@ -0,0 +1,5 @@
public class Subdir.Subdir2.Test : GLib.Object {
construct {
stdout.printf("Test from Subdir/Subdir2/\n");
}
}

@ -0,0 +1,5 @@
public class Subdir.Test : GLib.Object {
construct {
stdout.printf("Test from Subdir/\n");
}
}

@ -0,0 +1,5 @@
public class Subdir2.Test : GLib.Object {
construct {
stdout.printf("Test from Subdir2/\n");
}
}

@ -0,0 +1,5 @@
public class Test : GLib.Object {
construct {
stdout.printf("Test from main directory\n");
}
}

@ -0,0 +1,13 @@
project('valatest', 'vala', 'c')
valadeps = [dependency('glib-2.0'), dependency('gobject-2.0')]
valafiles = files(
'prog.vala',
'Test.vala',
'Subdir/Test.vala',
'Subdir/Subdir2/Test.vala',
'Subdir2/Test.vala',
)
e = executable('multidir_prog', valafiles, dependencies : valadeps)
test('valatest', e)

@ -0,0 +1,8 @@
int main() {
var test1 = new Test ();
var test2 = new Subdir.Test ();
var test3 = new Subdir2.Test ();
var test4 = new Subdir.Subdir2.Test ();
stdout.printf("Vala is working.\n");
return 0;
}
Loading…
Cancel
Save