def __init__(self, specuri, authinfo = None): # process args if not isinstance(specuri, URI): specuri = URI(specuri) if authinfo: specuri.set_auth_info(authinfo) self.authinfo = authinfo # read spec file, we'll need it :) self.set_spec_file(specuri) if specuri.is_remote_file(): #make local here and f**k up self.specdir = self.fetch_files() else: self.specdir = dirname(self.specuri.get_uri()) self.sourceArchive = SourceArchive(self.spec, self.pkg_work_dir()) self.set_environment_vars() self.actionLocals = None self.actionGlobals = None self.srcDir = None
def __init__(self, pspec): self.bctx = BuildContext(pspec) self.pspecDir = os.path.dirname(os.path.realpath(self.bctx.pspecfile)) self.spec = self.bctx.spec self.sourceArchive = SourceArchive(self.bctx) self.set_environment_vars() self.actionLocals = None self.actionGlobals = None self.srcDir = None
def __init__(self, specuri): # process args if not isinstance(specuri, URI): specuri = URI(specuri) # read spec file, we'll need it :) self.set_spec_file(specuri) if specuri.is_remote_file(): #make local here and f**k up self.specdir = self.fetch_files() else: self.specdir = dirname(self.specuri.get_uri()) self.sourceArchive = SourceArchive(self.spec, self.pkg_work_dir()) self.set_environment_vars() self.actionLocals = None self.actionGlobals = None self.srcDir = None
class Builder: """Provides the package build and creation routines""" #FIXME: this class and every other class must use URLs as paths! @staticmethod def from_name(name): # download package and return an installer object # find package in repository sf, reponame = ctx.sourcedb.get_spec_repo(name) src = sf.source if src: src_uri = URI(src.sourceURI) if src_uri.is_absolute_path(): src_path = str(src_uri) else: repo = ctx.repodb.get_repo(reponame) #FIXME: don't use dirname to work on URLs src_path = os.path.join(os.path.dirname(repo.indexuri.get_uri()), str(src_uri.path())) ctx.ui.debug(_("Source URI: %s") % src_path) return Builder(src_path) else: raise Error(_("Source %s not found in any active repository.") % name) def __init__(self, specuri): # process args if not isinstance(specuri, URI): specuri = URI(specuri) # read spec file, we'll need it :) self.set_spec_file(specuri) if specuri.is_remote_file(): #make local here and f**k up self.specdir = self.fetch_files() else: self.specdir = dirname(self.specuri.get_uri()) self.sourceArchive = SourceArchive(self.spec, self.pkg_work_dir()) self.set_environment_vars() self.actionLocals = None self.actionGlobals = None self.srcDir = None def set_spec_file(self, specuri): if not specuri.is_remote_file(): specuri = URI(os.path.realpath(specuri.get_uri())) # FIXME: doesn't work for file:// self.specuri = specuri spec = SpecFile() spec.read(specuri, ctx.config.tmp_dir()) self.spec = spec # directory accessor functions # pkg_x_dir: per package directory for storing info type x def pkg_dir(self): "package build directory" packageDir = self.spec.source.name + '-' + \ self.spec.source.version + '-' + self.spec.source.release return util.join_path(ctx.config.dest_dir(), ctx.config.values.dirs.tmp_dir, packageDir) def pkg_work_dir(self): return self.pkg_dir() + ctx.const.work_dir_suffix def pkg_debug_dir(self): return self.pkg_dir() + ctx.const.debug_dir_suffix def pkg_install_dir(self): return self.pkg_dir() + ctx.const.install_dir_suffix def set_state(self, state): stateFile = util.join_path(self.pkg_work_dir(), "pisiBuildState") open(stateFile, "w").write(state) def get_state(self): stateFile = util.join_path(self.pkg_work_dir(), "pisiBuildState") if not os.path.exists(stateFile): # no state return None return open(stateFile, "r").read() def build(self): """Build the package in one shot.""" ctx.ui.status(_("Building PISI source package: %s") % self.spec.source.name) self.compile_action_script() # check if all patch files exists, if there are missing no need to unpack! self.patch_exists() self.check_build_dependencies() self.fetch_component() self.fetch_source_archive() self.unpack_source_archive() # apply the patches and prepare a source directory for build. self.apply_patches() self.run_setup_action() self.run_build_action() self.run_install_action() # after all, we are ready to build/prepare the packages return self.build_packages() def set_environment_vars(self): """Sets the environment variables for actions API to use""" # Each time a builder is created we must reset # environment. See bug #2575 pisi.actionsapi.variables.initVariables() env = { "PKG_DIR": self.pkg_dir(), "WORK_DIR": self.pkg_work_dir(), "INSTALL_DIR": self.pkg_install_dir(), "SRC_NAME": self.spec.source.name, "SRC_VERSION": self.spec.source.version, "SRC_RELEASE": self.spec.source.release } os.environ.update(env) # First check icecream, if not found use ccache, no need to use both # together (according to kde-wiki it cause performance loss) if ctx.config.values.build.buildhelper == "icecream": if os.path.exists("/opt/icecream/bin/gcc"): # Add icecream directory for support distributed compiling :) os.environ["PATH"] = "/opt/icecream/bin/:%s" % os.environ["PATH"] ctx.ui.info(_("IceCream detected. Make sure your daemon is up and running...")) elif ctx.config.values.build.buildhelper == "ccache": if os.path.exists("/usr/lib/ccache/bin/gcc"): # Add ccache directory for support Compiler Cache :) os.environ["PATH"] = "/usr/lib/ccache/bin/:%s" % os.environ["PATH"] ctx.ui.info(_("CCache detected...")) def fetch_files(self): self.specdiruri = dirname(self.specuri.get_uri()) pkgname = basename(self.specdiruri) self.destdir = join(ctx.config.tmp_dir(), pkgname) #self.location = dirname(self.url.uri) self.fetch_actionsfile() self.fetch_patches() self.fetch_comarfiles() self.fetch_additionalFiles() return self.destdir def fetch_actionsfile(self): actionsuri = join(self.specdiruri, ctx.const.actions_file) self.download(actionsuri, self.destdir) def fetch_patches(self): spec = self.spec for patch in spec.source.patches: file_name = basename(patch.filename) dir_name = dirname(patch.filename) patchuri = join(self.specdiruri, ctx.const.files_dir, dir_name, file_name) self.download(patchuri, join(self.destdir, ctx.const.files_dir, dir_name)) def fetch_comarfiles(self): spec = self.spec for package in spec.packages: for pcomar in package.providesComar: comaruri = join(self.specdiruri, ctx.const.comar_dir, pcomar.script) self.download(comaruri, join(self.destdir, ctx.const.comar_dir)) def fetch_additionalFiles(self): spec = self.spec for pkg in spec.packages: for afile in pkg.additionalFiles: file_name = basename(afile.filename) dir_name = dirname(afile.filename) afileuri = join(self.specdiruri, ctx.const.files_dir, dir_name, file_name) self.download(afileuri, join(self.destdir, ctx.const.files_dir, dir_name)) def download(self, uri, transferdir): # fix auth info and download uri = File.make_uri(uri) File.download(uri, transferdir) def fetch_component(self): if not self.spec.source.partOf: ctx.ui.warning(_('PartOf tag not defined, looking for component')) diruri = parenturi(self.specuri.get_uri()) parentdir = parenturi(diruri) url = util.join_path(parentdir, 'component.xml') progress = ctx.ui.Progress if URI(url).is_remote_file(): fetch_url(url, self.pkg_work_dir(), progress) path = util.join_path(self.pkg_work_dir(), 'component.xml') else: if not os.path.exists(url): raise Exception(_('Cannot find component.xml in upper directory')) path = url comp = component.Component() comp.read(path) ctx.ui.info(_('Source is part of %s component') % comp.name) self.spec.source.partOf = comp.name self.spec.override_tags() def fetch_source_archive(self): ctx.ui.info(_("Fetching source from: %s") % self.spec.source.archive.uri) self.sourceArchive.fetch() ctx.ui.info(_("Source archive is stored: %s/%s") %(ctx.config.archives_dir(), self.spec.source.archive.name)) def unpack_source_archive(self): ctx.ui.info(_("Unpacking archive..."), noln = True) self.sourceArchive.unpack() ctx.ui.info(_(" unpacked (%s)") % self.pkg_work_dir()) self.set_state("unpack") def run_setup_action(self): # Run configure, build and install phase ctx.ui.action(_("Setting up source...")) self.run_action_function(ctx.const.setup_func) self.set_state("setupaction") def run_build_action(self): ctx.ui.action(_("Building source...")) self.run_action_function(ctx.const.build_func) self.set_state("buildaction") def run_install_action(self): ctx.ui.action(_("Installing...")) # Before install make sure install_dir is clean if os.path.exists(self.pkg_install_dir()): util.clean_dir(self.pkg_install_dir()) # install function is mandatory! self.run_action_function(ctx.const.install_func, True) self.set_state("installaction") def get_abandoned_files(self): # return the files those are not collected from the install dir install_dir = self.pkg_dir() + ctx.const.install_dir_suffix abandoned_files = [] all_paths_in_packages = [] for package in self.spec.packages: for path in package.files: map(lambda p: all_paths_in_packages.append(p), [p for p in glob.glob(install_dir + path.path)]) for root, dirs, files in os.walk(install_dir): for file_ in files: already_in_package = False fpath = util.join_path(root, file_) for path in all_paths_in_packages: if not fpath.find(path): already_in_package = True if not already_in_package: abandoned_files.append(fpath) return abandoned_files def compile_action_script(self): """Compiles actions.py and sets the actionLocals and actionGlobals""" scriptfile = util.join_path(self.specdir, ctx.const.actions_file) try: localSymbols = globalSymbols = {} buf = open(scriptfile).read() exec compile(buf, "error", "exec") in localSymbols, globalSymbols except IOError, e: raise Error(_("Unable to read Action Script (%s): %s") %(scriptfile,e)) except SyntaxError, e: raise Error(_("SyntaxError in Action Script (%s): %s") %(scriptfile,e))
class PisiBuild: """PisiBuild class, provides the package build and creation routines""" def __init__(self, pspec): self.bctx = BuildContext(pspec) self.pspecDir = os.path.dirname(os.path.realpath(self.bctx.pspecfile)) self.spec = self.bctx.spec self.sourceArchive = SourceArchive(self.bctx) self.set_environment_vars() self.actionLocals = None self.actionGlobals = None self.srcDir = None def set_state(self, state): stateFile = os.path.join(self.bctx.pkg_work_dir(), "pisiBuildState") open(stateFile, "w").write(state) def get_state(self): stateFile = os.path.join(self.bctx.pkg_work_dir(), "pisiBuildState") if not os.path.exists(stateFile): # no state return None return open(stateFile, "r").read() def build(self): """Build the package in one shot.""" ctx.ui.info(_("Building PISI source package: %s") % self.spec.source.name) util.xterm_title(_("Building PISI source package: %s\n") % self.spec.source.name) self.compile_action_script() # check if all patch files exists, if there are missing no need to unpack! self.patch_exists() self.fetch_source_archive() self.unpack_source_archive() self.solve_build_dependencies() # apply the patches and prepare a source directory for build. self.apply_patches() self.run_setup_action() self.run_build_action() self.run_install_action() self.strip_install_dir() # after all, we are ready to build/prepare the packages self.build_packages() def set_environment_vars(self): """Sets the environment variables for actions API to use""" evn = { "PKG_DIR": self.bctx.pkg_dir(), "WORK_DIR": self.bctx.pkg_work_dir(), "INSTALL_DIR": self.bctx.pkg_install_dir(), "SRC_NAME": self.spec.source.name, "SRC_VERSION": self.spec.source.version, "SRC_RELEASE": self.spec.source.release } os.environ.update(evn) def fetch_source_archive(self): ctx.ui.info(_("Fetching source from: %s") % self.spec.source.archiveUri) self.sourceArchive.fetch() ctx.ui.info(_("Source archive is stored: %s/%s") %(ctx.config.archives_dir(), self.spec.source.archiveName)) def unpack_source_archive(self): ctx.ui.info(_("Unpacking archive...")) self.sourceArchive.unpack() ctx.ui.info(_(" unpacked (%s)") % self.bctx.pkg_work_dir()) self.set_state("unpack") def run_setup_action(self): # Run configure, build and install phase ctx.ui.action(_("Setting up source...")) self.run_action_function(ctx.const.setup_func) self.set_state("setupaction") def run_build_action(self): ctx.ui.action(_("Building source...")) self.run_action_function(ctx.const.build_func) self.set_state("buildaction") def run_install_action(self): ctx.ui.action(_("Installing...")) # Before install make sure install_dir is clean if os.path.exists(self.bctx.pkg_install_dir()): util.clean_dir(self.bctx.pkg_install_dir()) # install function is mandatory! self.run_action_function(ctx.const.install_func, True) self.set_state("installaction") def compile_action_script(self): """Compiles actions.py and sets the actionLocals and actionGlobals""" specdir = os.path.dirname(self.bctx.pspecfile) scriptfile = os.path.join(specdir, ctx.const.actions_file) try: localSymbols = globalSymbols = {} buf = open(scriptfile).read() exec compile(buf, "error", "exec") in localSymbols, globalSymbols except IOError, e: ctx.ui.error(_("Unable to read Action Script (%s): %s") %(scriptfile,e)) sys.exit(1) except SyntaxError, e: ctx.ui.error (_("SyntaxError in Action Script (%s): %s") %(scriptfile,e)) sys.exit(1)
class Builder: """Provides the package build and creation routines""" #FIXME: this class and every other class must use URLs as paths! @staticmethod def from_name(name): # download package and return an installer object # find package in repository sf, reponame = ctx.sourcedb.get_spec_repo(name) src = sf.source if src: src_uri = URI(src.sourceURI) if src_uri.is_absolute_path(): src_path = str(src_uri) else: repo = ctx.repodb.get_repo(reponame) #FIXME: don't use dirname to work on URLs src_path = os.path.join( os.path.dirname(repo.indexuri.get_uri()), str(src_uri.path())) ctx.ui.debug(_("Source URI: %s") % src_path) return Builder(src_path) else: raise Error( _("Source %s not found in any active repository.") % name) def __init__(self, specuri): # process args if not isinstance(specuri, URI): specuri = URI(specuri) # read spec file, we'll need it :) self.set_spec_file(specuri) if specuri.is_remote_file(): #make local here and f**k up self.specdir = self.fetch_files() else: self.specdir = dirname(self.specuri.get_uri()) self.sourceArchive = SourceArchive(self.spec, self.pkg_work_dir()) self.set_environment_vars() self.actionLocals = None self.actionGlobals = None self.srcDir = None def set_spec_file(self, specuri): if not specuri.is_remote_file(): # FIXME: doesn't work for file:// specuri = URI(os.path.realpath(specuri.get_uri())) self.specuri = specuri spec = SpecFile() spec.read(specuri, ctx.config.tmp_dir()) self.spec = spec # directory accessor functions # pkg_x_dir: per package directory for storing info type x def pkg_dir(self): "package build directory" packageDir = self.spec.source.name + '-' + \ self.spec.source.version + '-' + self.spec.source.release return util.join_path(ctx.config.dest_dir(), ctx.config.values.dirs.tmp_dir, packageDir) def pkg_work_dir(self): return self.pkg_dir() + ctx.const.work_dir_suffix def pkg_debug_dir(self): return self.pkg_dir() + ctx.const.debug_dir_suffix def pkg_install_dir(self): return self.pkg_dir() + ctx.const.install_dir_suffix def set_state(self, state): stateFile = util.join_path(self.pkg_work_dir(), "pisiBuildState") open(stateFile, "w").write(state) def get_state(self): stateFile = util.join_path(self.pkg_work_dir(), "pisiBuildState") if not os.path.exists(stateFile): # no state return None return open(stateFile, "r").read() def build(self): """Build the package in one shot.""" ctx.ui.status( _("Building PISI source package: %s") % self.spec.source.name) self.compile_action_script() # check if all patch files exists, if there are missing no need to unpack! self.patch_exists() self.check_build_dependencies() self.fetch_component() self.fetch_source_archive() self.unpack_source_archive() # apply the patches and prepare a source directory for build. self.apply_patches() self.run_setup_action() self.run_build_action() self.run_install_action() # after all, we are ready to build/prepare the packages return self.build_packages() def set_environment_vars(self): """Sets the environment variables for actions API to use""" # Each time a builder is created we must reset # environment. See bug #2575 pisi.actionsapi.variables.initVariables() #print '***** MEOWW *****' env = { "PKG_DIR": self.pkg_dir(), "WORK_DIR": self.pkg_work_dir(), "INSTALL_DIR": self.pkg_install_dir(), "SRC_NAME": self.spec.source.name, "SRC_VERSION": self.spec.source.version, "SRC_RELEASE": self.spec.source.release } os.environ.update(env) # First check icecream, if not found use ccache, no need to use both # together (according to kde-wiki it cause performance loss) if ctx.config.values.build.buildhelper == "icecream": if os.path.exists("/opt/icecream/bin/gcc"): # Add icecream directory for support distributed compiling :) os.environ[ "PATH"] = "/opt/icecream/bin/:%s" % os.environ["PATH"] ctx.ui.info( _("IceCream detected. Make sure your daemon is up and running..." )) elif ctx.config.values.build.buildhelper == "ccache": if os.path.exists("/usr/lib/ccache/bin/gcc"): # Add ccache directory for support Compiler Cache :) os.environ[ "PATH"] = "/usr/lib/ccache/bin/:%s" % os.environ["PATH"] ctx.ui.info(_("CCache detected...")) def fetch_files(self): self.specdiruri = dirname(self.specuri.get_uri()) pkgname = basename(self.specdiruri) self.destdir = join(ctx.config.tmp_dir(), pkgname) #self.location = dirname(self.url.uri) self.fetch_actionsfile() self.fetch_patches() self.fetch_comarfiles() self.fetch_additionalFiles() return self.destdir def fetch_actionsfile(self): actionsuri = join(self.specdiruri, ctx.const.actions_file) self.download(actionsuri, self.destdir) def fetch_patches(self): spec = self.spec for patch in spec.source.patches: file_name = basename(patch.filename) dir_name = dirname(patch.filename) patchuri = join(self.specdiruri, ctx.const.files_dir, dir_name, file_name) self.download(patchuri, join(self.destdir, ctx.const.files_dir, dir_name)) def fetch_comarfiles(self): spec = self.spec for package in spec.packages: for pcomar in package.providesComar: comaruri = join(self.specdiruri, ctx.const.comar_dir, pcomar.script) self.download(comaruri, join(self.destdir, ctx.const.comar_dir)) def fetch_additionalFiles(self): spec = self.spec for pkg in spec.packages: for afile in pkg.additionalFiles: file_name = basename(afile.filename) dir_name = dirname(afile.filename) afileuri = join(self.specdiruri, ctx.const.files_dir, dir_name, file_name) self.download( afileuri, join(self.destdir, ctx.const.files_dir, dir_name)) def download(self, uri, transferdir): # fix auth info and download uri = File.make_uri(uri) File.download(uri, transferdir) def fetch_component(self): if not self.spec.source.partOf: ctx.ui.warning(_('PartOf tag not defined, looking for component')) diruri = parenturi(self.specuri.get_uri()) parentdir = parenturi(diruri) url = util.join_path(parentdir, 'component.xml') progress = ctx.ui.Progress if URI(url).is_remote_file(): fetch_url(url, self.pkg_work_dir(), progress) path = util.join_path(self.pkg_work_dir(), 'component.xml') else: if not os.path.exists(url): raise Exception( _('Cannot find component.xml in upper directory')) path = url comp = component.Component() comp.read(path) ctx.ui.info(_('Source is part of %s component') % comp.name) self.spec.source.partOf = comp.name self.spec.override_tags() def fetch_source_archive(self): ctx.ui.info( _("Fetching source from: %s") % self.spec.source.archive.uri) self.sourceArchive.fetch() ctx.ui.info( _("Source archive is stored: %s/%s") % (ctx.config.archives_dir(), self.spec.source.archive.name)) def unpack_source_archive(self): ctx.ui.info(_("Unpacking archive..."), noln=True) if self.spec.source.archive.norootdir == "true": self.sourceArchive.unpack(target_dir=self.srcDir) else: self.sourceArchive.unpack() ctx.ui.info(_("Unpacked (%s)") % self.pkg_work_dir()) self.set_state("unpack") def run_setup_action(self): # Run configure, build and install phase ctx.ui.action(_("Setting up source...")) self.run_action_function(ctx.const.setup_func) self.set_state("setupaction") def run_build_action(self): ctx.ui.action(_("Building source...")) self.run_action_function(ctx.const.build_func) self.set_state("buildaction") def run_install_action(self): ctx.ui.action(_("Installing...")) # Before install make sure install_dir is clean if os.path.exists(self.pkg_install_dir()): util.clean_dir(self.pkg_install_dir()) # install function is mandatory! self.run_action_function(ctx.const.install_func, True) self.set_state("installaction") def get_abandoned_files(self): # return the files those are not collected from the install dir install_dir = self.pkg_dir() + ctx.const.install_dir_suffix abandoned_files = [] all_paths_in_packages = [] for package in self.spec.packages: for path in package.files: map(lambda p: all_paths_in_packages.append(p), [p for p in glob.glob(install_dir + path.path)]) for root, dirs, files in os.walk(install_dir): for file_ in files: already_in_package = False fpath = util.join_path(root, file_) for path in all_paths_in_packages: if not fpath.find(path): already_in_package = True if not already_in_package: abandoned_files.append(fpath) return abandoned_files def compile_action_script(self): """Compiles actions.py and sets the actionLocals and actionGlobals""" ctx.ui.info(_('Compiling action script')) scriptfile = util.join_path(self.specdir, ctx.const.actions_file) try: localSymbols = globalSymbols = {} #localSymbols = {} #globalSymbols = {} #localSymbols = locals() #globalSymbols = globals() buf = open(scriptfile).read() exec compile(buf, "error", "exec") in localSymbols, globalSymbols except IOError, e: raise Error( _("Unable to read Action Script (%s): %s") % (scriptfile, e)) except SyntaxError, e: raise Error( _("SyntaxError in Action Script (%s): %s") % (scriptfile, e))
class Builder: """Provides the package build and creation routines""" def __init__(self, pspec): self.bctx = BuildContext(pspec) self.pspecDir = os.path.dirname(os.path.realpath(self.bctx.pspecfile)) self.spec = self.bctx.spec self.sourceArchive = SourceArchive(self.bctx) self.set_environment_vars() self.actionLocals = None self.actionGlobals = None self.srcDir = None def set_state(self, state): stateFile = util.join_path(self.bctx.pkg_work_dir(), "pisiBuildState") open(stateFile, "w").write(state) def get_state(self): stateFile = util.join_path(self.bctx.pkg_work_dir(), "pisiBuildState") if not os.path.exists(stateFile): # no state return None return open(stateFile, "r").read() def build(self): """Build the package in one shot.""" ctx.ui.info(_("Building PISI source package: %s") % self.spec.source.name) util.xterm_title(_("Building PISI source package: %s\n") % self.spec.source.name) self.compile_action_script() # check if all patch files exists, if there are missing no need to unpack! self.patch_exists() self.check_build_dependencies() self.fetch_source_archive() self.unpack_source_archive() # apply the patches and prepare a source directory for build. self.apply_patches() self.run_setup_action() self.run_build_action() self.run_install_action() # after all, we are ready to build/prepare the packages self.build_packages() def set_environment_vars(self): """Sets the environment variables for actions API to use""" evn = { "PKG_DIR": self.bctx.pkg_dir(), "WORK_DIR": self.bctx.pkg_work_dir(), "INSTALL_DIR": self.bctx.pkg_install_dir(), "SRC_NAME": self.spec.source.name, "SRC_VERSION": self.spec.source.version, "SRC_RELEASE": self.spec.source.release, } os.environ.update(evn) # First check icecream, if not found use ccache, no need to use both # together (according to kde-wiki it cause performance loss) if os.path.exists("/opt/icecream/bin/gcc"): # Add icecream directory for support distributed compiling :) os.environ["PATH"] = "/opt/icecream/bin/:" + os.environ["PATH"] ctx.ui.info(_("IceCream detected. Make sure your daemon is up and running...")) elif os.path.exists("/usr/lib/ccache/bin/gcc"): # Add ccache directory for support Compiler Cache :) os.environ["PATH"] = "/usr/lib/ccache/bin/:" + os.environ["PATH"] ctx.ui.info(_("CCache detected...")) def fetch_source_archive(self): ctx.ui.info(_("Fetching source from: %s") % self.spec.source.archive.uri) self.sourceArchive.fetch() ctx.ui.info(_("Source archive is stored: %s/%s") % (ctx.config.archives_dir(), self.spec.source.archive.name)) def unpack_source_archive(self): ctx.ui.info(_("Unpacking archive...")) self.sourceArchive.unpack() ctx.ui.info(_(" unpacked (%s)") % self.bctx.pkg_work_dir()) self.set_state("unpack") def run_setup_action(self): # Run configure, build and install phase ctx.ui.action(_("Setting up source...")) self.run_action_function(ctx.const.setup_func) self.set_state("setupaction") def run_build_action(self): ctx.ui.action(_("Building source...")) self.run_action_function(ctx.const.build_func) self.set_state("buildaction") def run_install_action(self): ctx.ui.action(_("Installing...")) # Before install make sure install_dir is clean if os.path.exists(self.bctx.pkg_install_dir()): util.clean_dir(self.bctx.pkg_install_dir()) # install function is mandatory! self.run_action_function(ctx.const.install_func, True) self.set_state("installaction") def compile_action_script(self): """Compiles actions.py and sets the actionLocals and actionGlobals""" specdir = os.path.dirname(self.bctx.pspecfile) scriptfile = util.join_path(specdir, ctx.const.actions_file) try: localSymbols = globalSymbols = {} buf = open(scriptfile).read() exec compile(buf, "error", "exec") in localSymbols, globalSymbols except IOError, e: raise Error(_("Unable to read Action Script (%s): %s") % (scriptfile, e)) except SyntaxError, e: raise Error(_("SyntaxError in Action Script (%s): %s") % (scriptfile, e))