summaryrefslogtreecommitdiffstats
path: root/toolkit/mozapps/installer/l10n-repack.py
blob: 4957f7e64405d23c72b65ea22d6bc33b7008214e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# 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/.

"""
Replace localized parts of a packaged directory with data from a langpack
directory.
"""

from mozpack.packager import l10n
from argparse import ArgumentParser
import buildconfig

# Set of files or directories not listed in a chrome.manifest but that are
# localized.
NON_CHROME = set(
    [
        "**/crashreporter*.ini",
        "dictionaries",
        "defaultagent_localized.ini",
        "defaults/profile",
        "defaults/pref*/*-l10n.js",
        "locale.ini",
        "update.locale",
        "updater.ini",
        "extensions/langpack-*@*",
        "distribution/extensions/langpack-*@*",
        "**/multilocale.txt",
    ]
)


def valid_extra_l10n(arg):
    if "=" not in arg:
        raise ValueError("Invalid value")
    return tuple(arg.split("=", 1))


def main():
    parser = ArgumentParser()
    parser.add_argument("build", help="Directory containing the build to repack")
    parser.add_argument("l10n", help="Directory containing the staged langpack")
    parser.add_argument(
        "extra_l10n",
        nargs="*",
        metavar="BASE=PATH",
        type=valid_extra_l10n,
        help="Extra directories with staged localized files "
        "to be considered under the given base in the "
        "repacked build",
    )
    parser.add_argument(
        "--non-resource",
        nargs="+",
        metavar="PATTERN",
        default=[],
        help="Extra files not to be considered as resources",
    )
    args = parser.parse_args()

    buildconfig.substs["USE_ELF_HACK"] = False
    buildconfig.substs["PKG_STRIP"] = False
    l10n.repack(
        args.build,
        args.l10n,
        extra_l10n=dict(args.extra_l10n),
        non_resources=args.non_resource,
        non_chrome=NON_CHROME,
    )


if __name__ == "__main__":
    main()