bootbox/builder/compile.py

70 lines
1.9 KiB
Python

import logging
import os
import shutil
import subprocess
##
from . import constants
_log = logging.getLogger()
class Target(object):
def __init__(self, target_xml):
self.xml = target_xml
self.subdir = self.xml.attrib.get('subDir', '.')
self.base = self.xml.attrib.get('baseName')
self.target = self.xml.text
if not self.base:
self.base = os.path.basename(self.target)
class IpxeScript(object):
def __init__(self, script_dir, script_xml):
self.xml = script_xml
self.fpath = os.path.join(os.path.abspath(os.path.expanduser(script_dir)),
self.xml.text)
self.prefix = self.xml.attrib['prefix']
class Compiler(object):
def __init__(self, builddir, destdir, upstream, patches, monkey_patches, build_xml):
self.xml = build_xml
self.build = os.path.abspath(os.path.expanduser(builddir))
self.dest = os.path.abspath(os.path.expanduser(destdir))
self.src = upstream.dest
self.upstream = upstream
self.patches = patches
self.monkey_patches = monkey_patches
self.targets = []
self.scripts = []
self._add_targets()
def _add_targets(self):
roms = self.xml.findall('rom')
if roms is None:
def make(self):
# NOTE: 1af41000 is the firmware used by virtIO
self.prep()
self.patch()
def patch(self):
for m in self.monkey_patches:
for pf in m.files:
pf.patch()
for p in self.patches:
for pf in p.files:
pf.patch()
return()
def prep(self):
if self.src != self.build:
shutil.copytree(self.src, self.build, dirs_exist_ok = True)
os.makedirs(self.dest)
# These are standard.
for d in constants.IPXE_CATEGORIES:
dpath = os.path.join(self.dest, d)
os.makedirs(dpath, exist_ok = True)