# This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this file, # You can obtain one at http://mozilla.org/MPL/2.0/.
import json import os import pathlib import shutil import tarfile import zipfile from datetime import datetime from pathlib import Path from string import Template from tempfile import TemporaryDirectory
import mozpack.path as mozpath from jinja2 import Environment, FileSystemLoader
from mozbuild.repackaging.application_ini import get_application_ini_values from mozbuild.repackaging.desktop_file import generate_browser_desktop_entry_file_text
def application_ini_data_from_tar(input_tar_file): with TemporaryDirectory() as d: with tarfile.open(input_tar_file) as tar:
application_ini_files = [
tar_info for tar_info in tar.getmembers() if tar_info.name.endswith("/application.ini")
] if len(application_ini_files) == 0: raise ValueError(
f"Cannot find any application.ini file in archive {input_tar_file}"
) if len(application_ini_files) > 1: raise ValueError(
f"Too many application.ini files found in archive {input_tar_file}. "
f"Found: {application_ini_files}"
)
tar.extract(application_ini_files[0], path=d)
return application_ini_data_from_directory(d)
def copy_plain_config(input_template_dir, source_dir):
filenames = [
mozpath.basename(filename) for filename in os.listdir(input_template_dir) if Path(filename).suffix notin [".j2", ".js", ".in"]
]
os.makedirs(source_dir, exist_ok=True)
for filename in filenames:
shutil.copy(
mozpath.join(input_template_dir, filename),
mozpath.join(source_dir, filename),
)
def get_build_variables(
application_ini_data,
arch,
version,
package_name_suffix="",
description_suffix="",
product="",
build_number="1",
): """
Massage the application.ini info and other metadata into a dict suitable for passing into packaging templates """ if product == "devedition":
pkg_install_path = "usr/lib/firefox-devedition"
pkg_name = f"firefox-devedition{package_name_suffix}" else:
pkg_install_path = f"usr/lib/{application_ini_data['remoting_name'].lower()}"
pkg_name = (
f"{application_ini_data['remoting_name'].lower()}{package_name_suffix}"
)
timestamp = datetime.strptime(application_ini_data["build_id"], "%Y%m%d%H%M%S")
# Check to see if a .desktop file is already supplied in the templates directory # If not, continue to generate default Firefox .desktop file if os.path.exists(desktop_entry_template_path):
shutil.move(
desktop_entry_template_path,
mozpath.join(source_dir, desktop_entry_file_filename),
)
return
desktop_entry_file_text = generate_browser_desktop_entry_file_text(
log,
build_variables,
product,
release_type,
fluent_localization,
fluent_resource_loader,
)
os.makedirs(source_dir, exist_ok=True) with open(mozpath.join(source_dir, desktop_entry_file_filename), "w") as f:
f.write(desktop_entry_file_text)
filenames = [
mozpath.basename(filename) for filename in os.listdir(input_template_dir) if Path(filename).suffix in [".j2", ".in"] and filename notin exclude_file_names
]
os.makedirs(source_dir, exist_ok=True)
for file_name in filenames: if file_name.endswith(".in"): with open(mozpath.join(input_template_dir, file_name)) as f:
template = Template(f.read()) with open(mozpath.join(source_dir, Path(file_name).stem), "w") as f:
f.write(template.substitute(build_variables)) elif file_name.endswith(".j2"):
environment = Environment(loader=FileSystemLoader(input_template_dir))
template = environment.get_template(file_name) with open(mozpath.join(source_dir, Path(file_name).stem), "w") as f:
f.write(template.render(build_variables))
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.14 Sekunden
(vorverarbeitet am 2026-08-25)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.