diff --git a/pisi/actionsapi/mesontools.py b/pisi/actionsapi/mesontools.py new file mode 100644 index 00000000..9bada612 --- /dev/null +++ b/pisi/actionsapi/mesontools.py @@ -0,0 +1,99 @@ +# -*- coding: utf-8 -*- +import gettext + +import pisi.actionsapi +import pisi.context as ctx +from pisi.actionsapi import get +from pisi.actionsapi.shelltools import system + +__trans = gettext.translation('pisi', fallback=True) +_ = __trans.ugettext + + +class ConfigureError(pisi.actionsapi.Error): + def __init__(self, value=''): + pisi.actionsapi.Error.__init__(self, value) + self.value = value + ctx.ui.error(value) + + +class CompileError(pisi.actionsapi.Error): + def __init__(self, value=''): + pisi.actionsapi.Error.__init__(self, value) + self.value = value + ctx.ui.error(value) + + +class InstallError(pisi.actionsapi.Error): + def __init__(self, value=''): + pisi.actionsapi.Error.__init__(self, value) + self.value = value + ctx.ui.error(value) + + +def configure(parameters='', build_dir='build'): + """ + Configures the project into the build directory with the parameters using meson. + + Args: + parameters (str): Extra parameters for the command. Default is empty string. + build_dir (str): Build directory. Default is 'build'. + + Examples: + >>> mesontools.configure() + >>> mesontools.configure('extra parameters') + >>> mesontools.configure('extra parameters', 'custom_build_dir') + """ + default_parameters = ' '.join([ + '--prefix=/%s' % get.defaultprefixDIR(), + '--bindir=/usr/bin', + '--datadir=/%s' % get.dataDIR(), + '--includedir=/usr/include', + '--infodir=/%s' % get.infoDIR(), + '--libdir=/%s' % ('usr/lib32' if get.buildTYPE() == 'emul32' else 'usr/lib'), + '--libexecdir=/%s' % get.libexecDIR(), + '--localedir=/usr/share/locale', + '--localstatedir=/%s' % get.localstateDIR(), + '--mandir=/%s' % get.manDIR(), + '--sbindir=/%s' % get.sbinDIR(), + '--sharedstatedir=com', + '--sysconfdir=/etc', + '--default-library=shared', + ]) + if system('meson setup %s %s %s' % (default_parameters, parameters, build_dir)): + raise ConfigureError(_('Configuration failed.')) + + +def build(parameters='', build_dir='build'): + """ + Builds the project into the build directory with the parameters using ninja. Instead of letting ninja + to detect number of cores, this function gets the number from PISI configurations. + + Args: + parameters (str): Extra parameters for the command. Default is empty string. + build_dir (str): Build directory. Default is 'build'. + + Examples: + >>> mesontools.build() + >>> mesontools.build('extra parameters') + >>> mesontools.build('extra parameters', 'custom_build_dir') + """ + if system('ninja -C %s %s %s' % (build_dir, parameters, get.makeJOBS())): + raise CompileError(_('Make failed.')) + + +def install(parameters='', build_dir='build'): + """ + Installs the project to the destination directory. + + Args: + parameters (str): Extra parameters for the command. Default is empty string. + build_dir (str): Build directory. Default is 'build'. + + Examples: + >>> mesontools.install() + >>> mesontools.install('extra parameters') + >>> mesontools.install('extra parameters', 'custom_build_dir') + """ + if system('DESTDIR=%s ninja -C %s %s install' % (get.installDIR(), build_dir, parameters, )): + raise InstallError(_('Install failed.'))