diff -Nuar a/pisi/actionsapi/qt6.py b/pisi/actionsapi/qt6.py --- a/pisi/actionsapi/qt6.py 1970-01-01 02:00:00.000000000 +0200 +++ b/pisi/actionsapi/qt6.py 2025-02-10 12:32:02.252762587 +0300 @@ -0,0 +1,134 @@ +# -*- coding: utf-8 -*- + +import os + +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) + +basename = "qt6" + +prefix = "/%s" % get.defaultprefixDIR() +libdir = "%s/lib" % prefix +bindirQt6 = "%s/%s" % (libdir, basename) +libexecdir = "%s/libexec" % prefix +sysconfdir= "/etc" +bindir = "%s/bin" % prefix +includedir = "%s/include" % prefix + +# qt5 spesific variables + +headerdir = "%s/include/%s" % (prefix, basename) +datadir = "%s/share/%s" % (prefix, basename) +docdir = "/%s/%s" % (get.docDIR(), basename) +archdatadir = "%s/%s" % (libdir, basename) +mkspecsdir = "%s/%s/mkspecs" % (libdir, basename) +examplesdir = "%s/%s/examples" % (libdir, basename) +testdir = "%s/share/%s" % (prefix, basename) +translationdir = "%s/translations" % datadir + +#Temporary bindir to avoid qt5 conflicts +# qmake = "%s/qt-configure-module-qt6" % bindir +qmake = "%s/qmake-qt6" % bindir + + +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([ + '-DCMAKE_INSTALL_PREFIX=%s' % prefix, + '-DCMAKE_C_FLAGS="%s"' % get.CFLAGS() , + '-DCMAKE_CXX_FLAGS="%s"' % get.CXXFLAGS(), + '-DCMAKE_LD_FLAGS="%s"' % get.LDFLAGS(), + '-DCMAKE_BUILD_TYPE=RelWithDebInfo' , + '-DINSTALL_BINDIR=%s' % bindirQt6, + '-DINSTALL_INCLUDEDIR=%s' % headerdir, + '-DINSTALL_ARCHDATADIR=%s' % archdatadir, + '-DINSTALL_DOCDIR=%s' % docdir, + '-DINSTALL_DATADIR=%s' % datadir, + '-DINSTALL_MKSPECSDIR=%s' % mkspecsdir, + '-DINSTALL_EXAMPLESDIR=%s' % examplesdir, + '-DQT_FEATURE_libproxy=ON' , + '-DQT_FEATURE_vulkan=ON' , + '-DQT_FEATURE_system_freetype=ON' , + '-DQT_FEATURE_system_harfbuzz=ON' , + '-DQT_FEATURE_system_sqlite=ON' , + '-DQT_FEATURE_dbus_linked=ON' , + '-DCMAKE_MESSAGE_LOG_LEVEL=STATUS' , + '-DQT_FEATURE_openssl_linked=ON' , + # '-DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON' , + ]) + if system('cmake -B %s -G Ninja %s %s' % (build_dir, default_parameters, parameters)): + raise ConfigureError(_('Configuration failed.')) + + +def make(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.'))