#!/usr/bin/env 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/. import glob import os import re import subprocess import sys
# load modules from parent dir
sys.path.insert(1, os.path.dirname(sys.path[0]))
# import the guts import mozharness from mozharness.base.log import DEBUG, ERROR, FATAL from mozharness.base.transfer import TransferMixin from mozharness.base.vcs.vcsbase import VCSScript from mozharness.mozilla.tooltool import TooltoolMixin
if self._is_windows(): # We don't have git on our windows builders, so download a zip # package instead.
path = repo.replace(".git", "/archive/") + rev + ".zip"
self.download_file(path)
self.unzip(rev + ".zip", dirs["abs_work_dir"])
self.move(
os.path.join(dirs["abs_work_dir"], "openh264-" + rev),
os.path.join(dirs["abs_work_dir"], "openh264"),
)
# Retrieve in-tree version of gmp-api
self.copytree(
os.path.join(dirs["abs_src_dir"], "dom", "media", "gmp", "gmp-api"),
os.path.join(repo_dir, "gmp-api"),
)
# We need gas-preprocessor.pl for arm64 builds if self.config["arch"] == "aarch64":
openh264_dir = os.path.join(dirs["abs_work_dir"], "openh264")
self.download_file(
( "https://raw.githubusercontent.com/libav/" "gas-preprocessor/c2bc63c96678d9739509e58" "7aa30c94bdc0e636d/gas-preprocessor.pl"
),
parent_dir=openh264_dir,
)
self.chmod(os.path.join(openh264_dir, "gas-preprocessor.pl"), 744)
# gas-preprocessor.pl expects cpp to exist # os.symlink is not available on Windows until we switch to # Python 3.
os.system( "ln -s %s %s"
% (
os.path.join(
os.environ["MOZ_FETCHES_DIR"], "clang", "bin", "clang.exe"
),
os.path.join(openh264_dir, "cpp"),
)
) return 0
# Checkout gmp-api # TODO: Nothing here updates it yet, or enforces versions! ifnot os.path.exists(os.path.join(repo_dir, "gmp-api")):
retval = self.run_make("gmp-bootstrap") if retval != 0:
self.fatal("couldn't bootstrap gmp") else:
self.info("skipping gmp bootstrap - we have it locally")
# Checkout gtest # TODO: Requires svn! ifnot os.path.exists(os.path.join(repo_dir, "gtest")):
retval = self.run_make("gtest-bootstrap") if retval != 0:
self.fatal("couldn't bootstrap gtest") else:
self.info("skipping gtest bootstrap - we have it locally")
def package(self):
dirs = self.query_abs_dirs()
srcdir = os.path.join(dirs["abs_work_dir"], "openh264")
package_name = self.query_package_name()
package_file = os.path.join(dirs["abs_work_dir"], package_name) if os.path.exists(package_file):
os.unlink(package_file)
to_package = [] for f in glob.glob(os.path.join(srcdir, "*gmpopenh264*")): ifnot re.search(
r"(?:lib)?gmpopenh264(?!\.\d)\.(?:dylib|so|dll|info)(?!\.\d)", f
): # Don't package unnecessary zip bloat # Blocks things like libgmpopenh264.2.dylib and libgmpopenh264.so.1
self.log("Skipping packaging of {package}".format(package=f)) continue
to_package.append(os.path.basename(f))
self.log("Packaging files %s" % to_package)
cmd = ["zip", package_file] + to_package
retval = self.run_command(cmd, cwd=srcdir) if retval != 0:
self.fatal("couldn't make package")
self.copy_to_upload_dir(
package_file, dest=os.path.join(srcdir, "artifacts", package_name)
)
# Taskcluster expects this path to exist, but we don't use it # because our builds are private.
path = os.path.join(
self.query_abs_dirs()["abs_work_dir"], "..", "public", "build"
)
self.mkdir_p(path)
Potentially update a manifest in the future if we go that route.
Currently only copies a single file; would be nice to allow for
recursive copying; that would probably done by creating a helper
_copy_file_to_upload_dir(). """
dest_filename_given = dest isnotNone if upload_dir isNone:
upload_dir = self.query_abs_dirs()["abs_upload_dir"] if dest isNone:
dest = os.path.basename(target) if dest.endswith("/"):
dest_file = os.path.basename(target)
dest_dir = os.path.join(upload_dir, dest)
dest_filename_given = False else:
dest_file = os.path.basename(dest)
dest_dir = os.path.join(upload_dir, os.path.dirname(dest)) if compress andnot dest_filename_given:
dest_file += ".gz"
dest = os.path.join(dest_dir, dest_file) ifnot os.path.exists(target):
self.log("%s doesn't exist!" % target, level=error_level) returnNone
self.mkdir_p(dest_dir)
self.copyfile(target, dest, log_level=log_level, compress=compress) if os.path.exists(dest): return dest else:
self.log("%s doesn't exist after copy!" % dest, level=error_level) returnNone
# main {{{1 if __name__ == "__main__":
myScript = OpenH264Build()
myScript.run_and_exit()
¤ Dauer der Verarbeitung: 0.26 Sekunden
(vorverarbeitet)
¤
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 ist noch experimentell.