# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
# vim: set filetype=python:
# 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/.

with Files("**"):
    BUG_COMPONENT = ("Core", "Preferences: Backend")

if CONFIG["ENABLE_TESTS"]:
    DIRS += ["test/gtest"]

XPCSHELL_TESTS_MANIFESTS += [
    "test/unit/xpcshell.ini",
    "test/unit_ipc/xpcshell.ini",
]

BROWSER_CHROME_MANIFESTS += ["test/browser/browser.ini"]

XPIDL_SOURCES += [
    "nsIPrefBranch.idl",
    "nsIPrefLocalizedString.idl",
    "nsIPrefService.idl",
    "nsIRelativeFilePref.idl",
]

XPIDL_MODULE = "pref"

pref_groups = [
    "accessibility",
    "alerts",
    "apz",
    "beacon",
    "bidi",
    "browser",
    "canvas",
    "channelclassifier",
    "clipboard",
    "content",
    "converter",
    "cookiebanners",
    "datareporting",
    "device",
    "devtools",
    "docshell",
    "dom",
    "editor",
    "extensions",
    "fission",
    "font",
    "full_screen_api",
    "general",
    "geo",
    "gfx",
    "gl",
    "html5",
    "idle_period",
    "image",
    "intl",
    "javascript",
    "layers",
    "layout",
    "mathml",
    "media",
    "midi",
    "mousewheel",
    "mozilla",
    "network",
    "nglayout",
    "page_load",
    "pdfjs",
    "permissions",
    "places",
    "plain_text",
    "preferences",
    "print",
    "privacy",
    "prompts",
    "security",
    "signon",
    "slider",
    "storage",
    "svg",
    "telemetry",
    "test",
    "threads",
    "timer",
    "toolkit",
    "ui",
    "urlclassifier",
    "view_source",
    "webgl",
    "widget",
    "zoom",
]
if CONFIG["OS_TARGET"] == "Android":
    pref_groups += [
        "android",
        "consoleservice",
    ]
if CONFIG["FUZZING"]:
    pref_groups += ["fuzzing"]
pref_groups = tuple(sorted(pref_groups))

# Note: generate_static_pref_list.py relies on StaticPrefListAll.h being first.
gen_h = ["init/StaticPrefListAll.h"]
gen_h += ["StaticPrefsAll.h"]
gen_h += ["init/StaticPrefList_{}.h".format(pg) for pg in pref_groups]
gen_h += ["StaticPrefs_{}.h".format(pg) for pg in pref_groups]

gen_cpp = ["init/StaticPrefsCGetters.cpp"]

gen_rs = ["static_prefs.rs"]

EXPORTS.mozilla += [
    "init/StaticPrefListBegin.h",
    "init/StaticPrefListEnd.h",
    "nsRelativeFilePref.h",
    "Preferences.h",
    "StaticPrefsBase.h",
]
EXPORTS.mozilla += sorted(["!" + g for g in gen_h])

UNIFIED_SOURCES += [
    "Preferences.cpp",
    "SharedPrefMap.cpp",
]

gen_all_tuple = tuple(gen_h + gen_cpp + gen_rs)

GeneratedFile(
    *gen_all_tuple,
    script="init/generate_static_pref_list.py",
    entry_point="emit_code",
    inputs=["init/StaticPrefList.yaml"]
)

PYTHON_UNITTEST_MANIFESTS += [
    "test/python.ini",
]

XPCOM_MANIFESTS += [
    "components.conf",
]

SPHINX_TREES["/modules/libpref"] = "docs"

include("/ipc/chromium/chromium-config.mozbuild")

FINAL_LIBRARY = "xul"

DEFINES["OS_ARCH"] = CONFIG["OS_ARCH"]
DEFINES["MOZ_WIDGET_TOOLKIT"] = CONFIG["MOZ_WIDGET_TOOLKIT"]

if CONFIG["MOZ_SERVICES_SYNC"]:
    DEFINES["MOZ_SERVICES_SYNC"] = True

if CONFIG["MOZ_BUILD_APP"] == "browser":
    DEFINES["MOZ_BUILD_APP_IS_BROWSER"] = True

if CONFIG["MOZ_WIDGET_TOOLKIT"] == "android":
    if not CONFIG["MOZ_ANDROID_FAT_AAR_ARCHITECTURES"]:
        FINAL_TARGET_PP_FILES[CONFIG["ANDROID_CPU_ARCH"]] += [
            "greprefs.js",
        ]
    else:
        for arch in CONFIG["MOZ_ANDROID_FAT_AAR_ARCHITECTURES"]:
            FINAL_TARGET_FILES[arch] += [
                "!/dist/fat-aar/output/{arch}/greprefs.js".format(arch=arch),
            ]
else:
    FINAL_TARGET_PP_FILES += [
        "greprefs.js",
    ]