aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/backend
diff options
context:
space:
mode:
authorTristan Partin <tristan@partin.io>2022-03-01 12:05:28 -0600
committerJussi Pakkanen <jpakkane@gmail.com>2022-03-22 13:21:26 +0200
commit39f1d52e4a82cc75a4a3a41c3cc17fe2dabdb30b (patch)
treeec8855a6f7ea0c937736f366258ae8ca2629ea9d /mesonbuild/backend
parenta559dbe70d113ebaa9bab406e371e54251d66e71 (diff)
downloadmeson-39f1d52e4a82cc75a4a3a41c3cc17fe2dabdb30b.zip
meson-39f1d52e4a82cc75a4a3a41c3cc17fe2dabdb30b.tar.gz
meson-39f1d52e4a82cc75a4a3a41c3cc17fe2dabdb30b.tar.bz2
Add ability to add resources to jars
Previously Meson lacked the ability to add resources to jar files. Fixes #9945
Diffstat (limited to 'mesonbuild/backend')
-rw-r--r--mesonbuild/backend/ninjabackend.py14
1 files changed, 9 insertions, 5 deletions
diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py
index 614e864..c630cc3 100644
--- a/mesonbuild/backend/ninjabackend.py
+++ b/mesonbuild/backend/ninjabackend.py
@@ -1231,10 +1231,11 @@ class NinjaBackend(backends.Backend):
elem = NinjaBuildElement(self.all_outputs, 'PHONY', 'phony', '')
self.add_build(elem)
- def generate_jar_target(self, target):
+ def generate_jar_target(self, target: build.Jar):
fname = target.get_filename()
outname_rel = os.path.join(self.get_target_dir(target), fname)
src_list = target.get_sources()
+ resources = target.get_java_resources()
class_list = []
compiler = target.compilers['java']
c = 'c'
@@ -1280,6 +1281,9 @@ class NinjaBackend(backends.Backend):
commands += ['-C', self.get_target_private_dir(target), '.']
elem = NinjaBuildElement(self.all_outputs, outname_rel, jar_rule, [])
elem.add_dep(class_dep_list)
+ if resources:
+ # Copy all resources into the root of the jar.
+ elem.add_orderdep(self.__generate_sources_structure(Path(self.get_target_private_dir(target)), resources)[0])
elem.add_item('ARGS', commands)
self.add_build(elem)
# Create introspection information
@@ -1663,11 +1667,10 @@ class NinjaBackend(backends.Backend):
elem.add_orderdep(instr)
self.add_build(elem)
- def __generate_compile_structure(self, target: build.BuildTarget) -> T.Tuple[T.List[str], T.Optional[str]]:
+ def __generate_sources_structure(self, root: Path, structured_sources: build.StructuredSources) -> T.Tuple[T.List[str], T.Optional[str]]:
first_file: T.Optional[str] = None
orderdeps: T.List[str] = []
- root = Path(self.get_target_private_dir(target)) / 'structured'
- for path, files in target.structured_sources.sources.items():
+ for path, files in structured_sources.sources.items():
for file in files:
if isinstance(file, File):
out = root / path / Path(file.fname).name
@@ -1706,7 +1709,8 @@ class NinjaBackend(backends.Backend):
main_rust_file = None
if target.structured_sources:
if target.structured_sources.needs_copy():
- _ods, main_rust_file = self.__generate_compile_structure(target)
+ _ods, main_rust_file = self.__generate_sources_structure(Path(
+ self.get_target_private_dir(target)) / 'structured', target.structured_sources)
orderdeps.extend(_ods)
else:
# The only way to get here is to have only files in the "root"