You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

83 lines
2.4 KiB

#!/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)