diff options
Diffstat (limited to 'meta')
-rw-r--r-- | meta/recipes-devtools/meson/meson.inc | 3 | ||||
-rw-r--r-- | meta/recipes-devtools/meson/meson/cross-libdir.patch | 18 | ||||
-rw-r--r-- | meta/recipes-devtools/meson/meson/many-cross.patch | 207 |
3 files changed, 215 insertions, 13 deletions
diff --git a/meta/recipes-devtools/meson/meson.inc b/meta/recipes-devtools/meson/meson.inc index ca448b00a0..2d18f72c0c 100644 --- a/meta/recipes-devtools/meson/meson.inc +++ b/meta/recipes-devtools/meson/meson.inc | |||
@@ -11,10 +11,11 @@ SRC_URI = "https://github.com/mesonbuild/meson/releases/download/${PV}/meson-${P | |||
11 | file://0003-native_bindir.patch \ | 11 | file://0003-native_bindir.patch \ |
12 | file://0001-python-module-do-not-manipulate-the-environment-when.patch \ | 12 | file://0001-python-module-do-not-manipulate-the-environment-when.patch \ |
13 | file://disable-rpath-handling.patch \ | 13 | file://disable-rpath-handling.patch \ |
14 | file://cross-libdir.patch \ | ||
15 | file://0001-modules-windows-split-WINDRES-env-variable.patch \ | 14 | file://0001-modules-windows-split-WINDRES-env-variable.patch \ |
16 | file://0002-environment.py-detect-windows-also-if-the-system-str.patch \ | 15 | file://0002-environment.py-detect-windows-also-if-the-system-str.patch \ |
17 | file://cross-prop-default.patch \ | 16 | file://cross-prop-default.patch \ |
17 | file://many-cross.patch \ | ||
18 | file://cross-libdir.patch \ | ||
18 | " | 19 | " |
19 | SRC_URI[sha256sum] = "ef9f14326ec1e30d3ba1a26df0f92826ede5a79255ad723af78a2691c37109fd" | 20 | SRC_URI[sha256sum] = "ef9f14326ec1e30d3ba1a26df0f92826ede5a79255ad723af78a2691c37109fd" |
20 | SRC_URI[md5sum] = "0267b0871266056184c484792572c682" | 21 | SRC_URI[md5sum] = "0267b0871266056184c484792572c682" |
diff --git a/meta/recipes-devtools/meson/meson/cross-libdir.patch b/meta/recipes-devtools/meson/meson/cross-libdir.patch index 2bd4fb3f9e..7395fdbdaa 100644 --- a/meta/recipes-devtools/meson/meson/cross-libdir.patch +++ b/meta/recipes-devtools/meson/meson/cross-libdir.patch | |||
@@ -7,17 +7,11 @@ Date: Thu, 27 Dec 2018 23:43:35 +0200 | |||
7 | Subject: [PATCH] Default libdir is "lib" when cross compiling. Closes #2535. | 7 | Subject: [PATCH] Default libdir is "lib" when cross compiling. Closes #2535. |
8 | 8 | ||
9 | --- | 9 | --- |
10 | docs/markdown/snippets/crosslib.md | 7 +++++++ | ||
11 | mesonbuild/coredata.py | 8 ++++++++ | ||
12 | run_unittests.py | 13 +++++++++++++ | ||
13 | 3 files changed, 28 insertions(+) | ||
14 | create mode 100644 docs/markdown/snippets/crosslib.md | ||
15 | |||
16 | diff --git a/mesonbuild/coredata.py b/mesonbuild/coredata.py | 10 | diff --git a/mesonbuild/coredata.py b/mesonbuild/coredata.py |
17 | index d70c23038c..4e2f3e008c 100644 | 11 | index ff810683..9ee23a69 100644 |
18 | --- a/mesonbuild/coredata.py | 12 | --- a/mesonbuild/coredata.py |
19 | +++ b/mesonbuild/coredata.py | 13 | +++ b/mesonbuild/coredata.py |
20 | @@ -299,6 +299,7 @@ def __init__(self, options): | 14 | @@ -298,6 +298,7 @@ class CoreData: |
21 | # Only to print a warning if it changes between Meson invocations. | 15 | # Only to print a warning if it changes between Meson invocations. |
22 | self.pkgconf_envvar = os.environ.get('PKG_CONFIG_PATH', '') | 16 | self.pkgconf_envvar = os.environ.get('PKG_CONFIG_PATH', '') |
23 | self.config_files = self.__load_config_files(options.native_file) | 17 | self.config_files = self.__load_config_files(options.native_file) |
@@ -25,15 +19,15 @@ index d70c23038c..4e2f3e008c 100644 | |||
25 | 19 | ||
26 | @staticmethod | 20 | @staticmethod |
27 | def __load_config_files(filenames): | 21 | def __load_config_files(filenames): |
28 | @@ -348,6 +349,13 @@ def __load_cross_file(filename): | 22 | @@ -309,6 +310,13 @@ class CoreData: |
29 | 23 | for f in filenames] | |
30 | raise MesonException('Cannot find specified cross file: ' + filename) | 24 | return filenames |
31 | 25 | ||
32 | + def libdir_cross_fixup(self): | 26 | + def libdir_cross_fixup(self): |
33 | + # By default set libdir to "lib" when cross compiling since | 27 | + # By default set libdir to "lib" when cross compiling since |
34 | + # getting the "system default" is always wrong on multiarch | 28 | + # getting the "system default" is always wrong on multiarch |
35 | + # platforms as it gets a value like lib/x86_64-linux-gnu. | 29 | + # platforms as it gets a value like lib/x86_64-linux-gnu. |
36 | + if self.cross_file is not None: | 30 | + if self.cross_files: |
37 | + self.builtins['libdir'].value = 'lib' | 31 | + self.builtins['libdir'].value = 'lib' |
38 | + | 32 | + |
39 | def sanitize_prefix(self, prefix): | 33 | def sanitize_prefix(self, prefix): |
diff --git a/meta/recipes-devtools/meson/meson/many-cross.patch b/meta/recipes-devtools/meson/meson/many-cross.patch new file mode 100644 index 0000000000..d04c28b8a3 --- /dev/null +++ b/meta/recipes-devtools/meson/meson/many-cross.patch | |||
@@ -0,0 +1,207 @@ | |||
1 | mesonbuild: allow multiple --cross-file options | ||
2 | |||
3 | Just like --native-file, allow multiple --cross-file options. This is mostly | ||
4 | unifying the logic between cross_files and config_files. | ||
5 | |||
6 | Upstream-Status: Backport [will be in 0.50.1] | ||
7 | Signed-off-by: Ross Burton <ross.burton@intel.com> | ||
8 | |||
9 | diff --git a/mesonbuild/backend/backends.py b/mesonbuild/backend/backends.py | ||
10 | index 40402513..4b9bcb59 100644 | ||
11 | --- a/mesonbuild/backend/backends.py | ||
12 | +++ b/mesonbuild/backend/backends.py | ||
13 | @@ -726,8 +726,7 @@ class Backend: | ||
14 | deps = [os.path.join(self.build_to_src, df) | ||
15 | for df in self.interpreter.get_build_def_files()] | ||
16 | if self.environment.is_cross_build(): | ||
17 | - deps.append(os.path.join(self.build_to_src, | ||
18 | - self.environment.coredata.cross_file)) | ||
19 | + deps.extend(self.environment.coredata.cross_files) | ||
20 | deps.append('meson-private/coredata.dat') | ||
21 | if os.path.exists(os.path.join(self.environment.get_source_dir(), 'meson_options.txt')): | ||
22 | deps.append(os.path.join(self.build_to_src, 'meson_options.txt')) | ||
23 | diff --git a/mesonbuild/coredata.py b/mesonbuild/coredata.py | ||
24 | index c3f5a745..ff810683 100644 | ||
25 | --- a/mesonbuild/coredata.py | ||
26 | +++ b/mesonbuild/coredata.py | ||
27 | @@ -201,8 +201,8 @@ class UserFeatureOption(UserComboOption): | ||
28 | return self.value == 'auto' | ||
29 | |||
30 | |||
31 | -def load_configs(filenames): | ||
32 | - """Load native files.""" | ||
33 | +def load_configs(filenames, subdir): | ||
34 | + """Load configuration files from a named subdirectory.""" | ||
35 | def gen(): | ||
36 | for f in filenames: | ||
37 | f = os.path.expanduser(os.path.expandvars(f)) | ||
38 | @@ -215,7 +215,7 @@ def load_configs(filenames): | ||
39 | os.environ.get('XDG_DATA_HOME', os.path.expanduser('~/.local/share')), | ||
40 | ] + os.environ.get('XDG_DATA_DIRS', '/usr/local/share:/usr/share').split(':') | ||
41 | for path in paths: | ||
42 | - path_to_try = os.path.join(path, 'meson', 'native', f) | ||
43 | + path_to_try = os.path.join(path, 'meson', subdir, f) | ||
44 | if os.path.isfile(path_to_try): | ||
45 | yield path_to_try | ||
46 | break | ||
47 | @@ -291,7 +291,7 @@ class CoreData: | ||
48 | self.compiler_options = {} | ||
49 | self.base_options = {} | ||
50 | self.external_preprocess_args = {} # CPPFLAGS only | ||
51 | - self.cross_file = self.__load_cross_file(options.cross_file) | ||
52 | + self.cross_files = self.__load_config_files(options.cross_file) | ||
53 | self.compilers = OrderedDict() | ||
54 | self.cross_compilers = OrderedDict() | ||
55 | self.deps = OrderedDict() | ||
56 | @@ -301,52 +301,14 @@ class CoreData: | ||
57 | |||
58 | @staticmethod | ||
59 | def __load_config_files(filenames): | ||
60 | + # Need to try and make the passed filenames absolute because when the | ||
61 | + # files are parsed later we'll have chdir()d. | ||
62 | if not filenames: | ||
63 | return [] | ||
64 | filenames = [os.path.abspath(os.path.expanduser(os.path.expanduser(f))) | ||
65 | for f in filenames] | ||
66 | return filenames | ||
67 | |||
68 | - @staticmethod | ||
69 | - def __load_cross_file(filename): | ||
70 | - """Try to load the cross file. | ||
71 | - | ||
72 | - If the filename is None return None. If the filename is an absolute | ||
73 | - (after resolving variables and ~), return that absolute path. Next, | ||
74 | - check if the file is relative to the current source dir. If the path | ||
75 | - still isn't resolved do the following: | ||
76 | - Windows: | ||
77 | - - Error | ||
78 | - *: | ||
79 | - - $XDG_DATA_HOME/meson/cross (or ~/.local/share/meson/cross if | ||
80 | - undefined) | ||
81 | - - $XDG_DATA_DIRS/meson/cross (or | ||
82 | - /usr/local/share/meson/cross:/usr/share/meson/cross if undefined) | ||
83 | - - Error | ||
84 | - | ||
85 | - Non-Windows follows the Linux path and will honor XDG_* if set. This | ||
86 | - simplifies the implementation somewhat. | ||
87 | - """ | ||
88 | - if filename is None: | ||
89 | - return None | ||
90 | - filename = os.path.expanduser(os.path.expandvars(filename)) | ||
91 | - if os.path.isabs(filename): | ||
92 | - return filename | ||
93 | - path_to_try = os.path.abspath(filename) | ||
94 | - if os.path.isfile(path_to_try): | ||
95 | - return path_to_try | ||
96 | - if sys.platform != 'win32': | ||
97 | - paths = [ | ||
98 | - os.environ.get('XDG_DATA_HOME', os.path.expanduser('~/.local/share')), | ||
99 | - ] + os.environ.get('XDG_DATA_DIRS', '/usr/local/share:/usr/share').split(':') | ||
100 | - for path in paths: | ||
101 | - path_to_try = os.path.join(path, 'meson', 'cross', filename) | ||
102 | - if os.path.isfile(path_to_try): | ||
103 | - return path_to_try | ||
104 | - raise MesonException('Cannot find specified cross file: ' + filename) | ||
105 | - | ||
106 | - raise MesonException('Cannot find specified cross file: ' + filename) | ||
107 | - | ||
108 | def sanitize_prefix(self, prefix): | ||
109 | if not os.path.isabs(prefix): | ||
110 | raise MesonException('prefix value {!r} must be an absolute path' | ||
111 | @@ -558,8 +520,8 @@ def read_cmd_line_file(build_dir, options): | ||
112 | options.cmd_line_options = d | ||
113 | |||
114 | properties = config['properties'] | ||
115 | - if options.cross_file is None: | ||
116 | - options.cross_file = properties.get('cross_file', None) | ||
117 | + if not options.cross_file: | ||
118 | + options.cross_file = ast.literal_eval(properties.get('cross_file', '[]')) | ||
119 | if not options.native_file: | ||
120 | # This will be a string in the form: "['first', 'second', ...]", use | ||
121 | # literal_eval to get it into the list of strings. | ||
122 | @@ -570,7 +532,7 @@ def write_cmd_line_file(build_dir, options): | ||
123 | config = CmdLineFileParser() | ||
124 | |||
125 | properties = {} | ||
126 | - if options.cross_file is not None: | ||
127 | + if options.cross_file: | ||
128 | properties['cross_file'] = options.cross_file | ||
129 | if options.native_file: | ||
130 | properties['native_file'] = options.native_file | ||
131 | diff --git a/mesonbuild/environment.py b/mesonbuild/environment.py | ||
132 | index 6d86daf9..406ab8b8 100644 | ||
133 | --- a/mesonbuild/environment.py | ||
134 | +++ b/mesonbuild/environment.py | ||
135 | @@ -355,8 +355,8 @@ class Environment: | ||
136 | self.machines = MachineInfos() | ||
137 | # Will be fully initialized later using compilers later. | ||
138 | self.machines.detect_build() | ||
139 | - if self.coredata.cross_file: | ||
140 | - self.cross_info = CrossBuildInfo(self.coredata.cross_file) | ||
141 | + if self.coredata.cross_files: | ||
142 | + self.cross_info = CrossBuildInfo(self.coredata.cross_files) | ||
143 | if 'exe_wrapper' in self.cross_info.config['binaries']: | ||
144 | from .dependencies import ExternalProgram | ||
145 | self.exe_wrapper = ExternalProgram.from_bin_list( | ||
146 | @@ -373,7 +373,7 @@ class Environment: | ||
147 | |||
148 | if self.coredata.config_files: | ||
149 | self.config_info = coredata.ConfigData( | ||
150 | - coredata.load_configs(self.coredata.config_files)) | ||
151 | + coredata.load_configs(self.coredata.config_files, 'native')) | ||
152 | else: | ||
153 | self.config_info = coredata.ConfigData() | ||
154 | |||
155 | @@ -1113,13 +1113,8 @@ class CrossBuildInfo: | ||
156 | def ok_type(self, i): | ||
157 | return isinstance(i, (str, int, bool)) | ||
158 | |||
159 | - def parse_datafile(self, filename): | ||
160 | - config = configparser.ConfigParser() | ||
161 | - try: | ||
162 | - with open(filename, 'r') as f: | ||
163 | - config.read_file(f, filename) | ||
164 | - except FileNotFoundError: | ||
165 | - raise EnvironmentException('File not found: %s.' % filename) | ||
166 | + def parse_datafile(self, filenames): | ||
167 | + config = coredata.load_configs(filenames, 'cross') | ||
168 | # This is a bit hackish at the moment. | ||
169 | for s in config.sections(): | ||
170 | self.config[s] = {} | ||
171 | diff --git a/mesonbuild/msetup.py b/mesonbuild/msetup.py | ||
172 | index 56a0e9a7..f0a1ae19 100644 | ||
173 | --- a/mesonbuild/msetup.py | ||
174 | +++ b/mesonbuild/msetup.py | ||
175 | @@ -27,7 +27,9 @@ from .mesonlib import MesonException | ||
176 | |||
177 | def add_arguments(parser): | ||
178 | coredata.register_builtin_arguments(parser) | ||
179 | - parser.add_argument('--cross-file', default=None, | ||
180 | + parser.add_argument('--cross-file', | ||
181 | + default=[], | ||
182 | + action='append', | ||
183 | help='File describing cross compilation environment.') | ||
184 | parser.add_argument('--native-file', | ||
185 | default=[], | ||
186 | diff --git a/run_unittests.py b/run_unittests.py | ||
187 | index e6874b25..1d247291 100755 | ||
188 | --- a/run_unittests.py | ||
189 | +++ b/run_unittests.py | ||
190 | @@ -529,7 +529,7 @@ class InternalTests(unittest.TestCase): | ||
191 | config.write(configfile) | ||
192 | configfile.flush() | ||
193 | configfile.close() | ||
194 | - detected_value = mesonbuild.environment.CrossBuildInfo(configfile.name).need_exe_wrapper() | ||
195 | + detected_value = mesonbuild.environment.CrossBuildInfo((configfile.name,)).need_exe_wrapper() | ||
196 | os.unlink(configfilename) | ||
197 | |||
198 | desired_value = not detected_value | ||
199 | @@ -541,7 +541,7 @@ class InternalTests(unittest.TestCase): | ||
200 | configfilename = configfile.name | ||
201 | config.write(configfile) | ||
202 | configfile.close() | ||
203 | - forced_value = mesonbuild.environment.CrossBuildInfo(configfile.name).need_exe_wrapper() | ||
204 | + forced_value = mesonbuild.environment.CrossBuildInfo((configfile.name,)).need_exe_wrapper() | ||
205 | os.unlink(configfilename) | ||
206 | |||
207 | self.assertEqual(forced_value, desired_value) | ||