#!/usr/bin/env python # Copyright 2017 Google Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # ################################################################################ import os import subprocess import apt SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__)) def ApplyPatch(source_directory, patch_name): """Apply custom patch.""" subprocess.check_call(['patch', '-p1', '-i', os.path.join(SCRIPT_DIR, patch_name)], cwd=source_directory) class PackageException(Exception): """Base package exception.""" class Package(object): """Base package.""" def __init__(self, name, apt_version): self.name = name self.apt_version = apt_version def PreBuild(self, source_directory, env, custom_bin_dir): return def PostBuild(self, source_directory, env, custom_bin_dir): return def PreDownload(self, download_directory): return def PostDownload(self, source_directory): return def InstallBuildDeps(self): """Install build dependencies for a package.""" subprocess.check_call(['apt-get', 'update']) subprocess.check_call(['apt-get', 'build-dep', '-y', self.name]) # Reload package after update. self.apt_version = ( apt.Cache()[self.apt_version.package.name].candidate) def DownloadSource(self, download_directory): """Download the source for a package.""" self.PreDownload(download_directory) source_directory = self.apt_version.fetch_source(download_directory) self.PostDownload(source_directory) return source_directory def Build(self, source_directory, env, custom_bin_dir): """Build .deb packages.""" self.PreBuild(source_directory, env, custom_bin_dir) subprocess.check_call( ['dpkg-buildpackage', '-us', '-uc', '-B'], cwd=source_directory, env=env) self.PostBuild(source_directory, env, custom_bin_dir)