Merge pull request #2943 from ximion/master

Don't fail loading subprojects if subprojects_dir is in a subdirectory
pull/3090/head
Jussi Pakkanen 7 years ago committed by GitHub
commit 1841d53a84
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 18
      mesonbuild/interpreter.py
  2. 15
      test cases/common/177 subproject nested subproject dirs/contrib/subprojects/alpha/a.c
  3. 4
      test cases/common/177 subproject nested subproject dirs/contrib/subprojects/alpha/meson.build
  4. 1
      test cases/common/177 subproject nested subproject dirs/contrib/subprojects/alpha/var/subprojects/wrap_files_might_be_here
  5. 14
      test cases/common/177 subproject nested subproject dirs/contrib/subprojects/beta/b.c
  6. 3
      test cases/common/177 subproject nested subproject dirs/contrib/subprojects/beta/meson.build
  7. 7
      test cases/common/177 subproject nested subproject dirs/meson.build
  8. 5
      test cases/common/177 subproject nested subproject dirs/prog.c

@ -33,6 +33,7 @@ from .modules import ModuleReturnValue
import os, sys, shutil, uuid
import re, shlex
from collections import namedtuple
from pathlib import PurePath
import importlib
@ -1981,7 +1982,7 @@ to directly access options of other subprojects.''')
@noKwargs
def func_error(self, node, args, kwargs):
self.validate_arguments(args, 1, [str])
raise InterpreterException('Error encountered: ' + args[0])
raise InterpreterException('Problem encountered: ' + args[0])
def detect_compilers(self, lang, need_cross_compiler):
cross_comp = None
@ -2358,10 +2359,10 @@ root and issuing %s.
raise
# If the subproject execution failed in a non-fatal way, don't raise an
# exception; let the caller handle things.
except:
except Exception as e:
mlog.log('Also couldn\'t find a fallback subproject in',
mlog.bold(os.path.join(self.subproject_dir, dirname)),
'for the dependency', mlog.bold(name))
'for the dependency', mlog.bold(name), '\nReason:', str(e))
return None
dep = self.get_subproject_dep(name, dirname, varname, kwargs.get('required', True))
if not dep:
@ -2982,11 +2983,16 @@ different subdirectory.
def evaluate_subproject_info(self, path_from_source_root, subproject_dirname):
depth = 0
subproj_name = ''
segs = path_from_source_root.split(os.path.sep)
while segs and segs[0] == subproject_dirname:
depth += 1
segs = PurePath(path_from_source_root).parts
segs_spd = PurePath(subproject_dirname).parts
while segs and segs[0] == segs_spd[0]:
if len(segs_spd) == 1:
subproj_name = segs[1]
segs = segs[2:]
depth += 1
else:
segs_spd = segs_spd[1:]
segs = segs[1:]
return (depth, subproj_name)
# Check that the indicated file is within the same subproject

@ -0,0 +1,15 @@
int func2();
#if defined _WIN32 || defined __CYGWIN__
#define DLL_PUBLIC __declspec(dllexport)
#else
#if defined __GNUC__
#define DLL_PUBLIC __attribute__ ((visibility("default")))
#else
#pragma message ("Compiler does not support symbol visibility.")
#define DLL_PUBLIC
#endif
#endif
int DLL_PUBLIC func() { return func2(); }

@ -0,0 +1,4 @@
project('alpha project', 'c', subproject_dir: 'var/subprojects')
b = subproject('beta')
l = shared_library('a', 'a.c', link_with : b.get_variable('lb'))

@ -0,0 +1,14 @@
#if defined _WIN32 || defined __CYGWIN__
#define DLL_PUBLIC __declspec(dllexport)
#else
#if defined __GNUC__
#define DLL_PUBLIC __attribute__ ((visibility("default")))
#else
#pragma message ("Compiler does not support symbol visibility.")
#define DLL_PUBLIC
#endif
#endif
int DLL_PUBLIC func2() {
return 42;
}

@ -0,0 +1,3 @@
project('beta project', 'c')
lb = shared_library('b', 'b.c')

@ -0,0 +1,7 @@
project('gamma project', 'c', subproject_dir: 'contrib/subprojects')
a = subproject('alpha')
lib = a.get_variable('l')
exe = executable('prog', 'prog.c', link_with : lib)
test('basic', exe)

@ -0,0 +1,5 @@
int func();
int main(int argc, char **argv) {
return func() == 42 ? 0 : 1;
}
Loading…
Cancel
Save