Construindo o KDE Frameworks 5 (KF5)

"KDE Frameworks 5" é uma coleção de bibliotecas baseadas em "Qt5" e "QML" derivadas das bibliotecas monolíticas do "KDE 4". Elas podem ser usadas independentemente do Ambiente de Exibição do "KDE" ("Plasma 5").

Esse pacote é conhecido por construir e funcionar corretamente usando uma plataforma LFS 12.0.

As instruções abaixo constroem todos os pacotes do "KDE Frameworks" em uma etapa, usando um conjunto de comandos sequenciais do "Bash".

Informação do Pacote

Dependências do KF5

Exigidas

Boost-1.83.0, extra-cmake-modules-5.109.0, docbook-xml-4.5, docbook-xsl-nons-1.79.2, giflib-5.2.1, libepoxy-1.5.10, libgcrypt-1.10.2, libical-3.0.16, libjpeg-turbo-3.0.0, libpng-1.6.40, libxslt-1.1.38, lmdb-0.9.31, qca-2.3.7, qrencode-4.1.1, phonon-4.11.1, plasma-wayland-protocols-1.10.0, shared-mime-info-2.2, URI-5.17 e Wget-1.21.4 (exigido para baixar os pacotes)

Recomendadas

Opcionais

BlueZ-5.68 (necessário para construir Bluez-Qt), Datamatrix (considerado recomendado para Prison pelo fluxo de desenvolvimento)

Dependência de tempo de execução para o FrameworkIntegration

Fontes Noto

Dependências adicionais recomendadas para o kapidox

Suporte a formatos adicionais de imagem no KImageFormats

JasPer-4.0.0, libavif-0.11.1, libraw-0.21.1, libheif, libjxl e OpenEXR

Dependências opcionais para o KIO

MIT Kerberos V5-1.21.2

Dependências opcionais para o Solid

UDisks-2.10.0, UPower-1.90.2 e media-player-info (tempo de execução)

Dependência opcional para o KWallet

GPGME-1.21.0, construído com ligações "C++" (o que é o padrão).

Dependência opcional para kdewebkit

QtWebkit

Estruturas de retaguarda opcionais de dicionário para o Sonnet

Hspell e Hunspell

Observações de Editor(a): https://wiki.linuxfromscratch.org/blfs/wiki/kf5

Baixando o KDE Frameworks

A maneira mais fácil de obter os pacotes do "KDE Frameworks" é a de usar um "wget" para buscá-los todos de uma vez:

url=https://download.kde.org/stable/frameworks/5.109/
wget -r -nH -nd -A '*.xz' -np $url

As opções usadas aqui são:
  -r            recursar ao longo de diretórios filhos
  -nH           desabilitar a geração de diretórios com prefixo de dispositivo
  -nd           não crie uma hierarquia de diretórios
  -A '*.xz'     apenas obter os arquivos *.xz
  -np           não obtenha diretórios ancestrais

Configurando a Ordem do Pacote

A ordem de construção dos arquivos é importante devido às dependências internas. Crie a lista de arquivos na ordem correta conforme segue:

cat > frameworks-5.109.0.md5 << "EOF"
b025406c6818d92ad3fedd585bd8a428  attica-5.109.0.tar.xz
#0baf0a3ded2fed5e0442591dde276c4e  extra-cmake-modules-5.109.0.tar.xz
e4cc63aafbbe019ebb8d62f6c02e9d2e  kapidox-5.109.0.tar.xz
d096b76119d8d9da91fd112811d2b408  karchive-5.109.0.tar.xz
64087cda04bec6ad068f22ce1e3dcb1e  kcodecs-5.109.0.tar.xz
fe2b1c516c2f9caadd6c8e3bf35ffd96  kconfig-5.109.0.tar.xz
b88be3c775bef6277e047f09b531ba1d  kcoreaddons-5.109.0.tar.xz
5b00c0b729b5c11d2a5733ea7db5674f  kdbusaddons-5.109.0.tar.xz
993090bb9a0e678154382daa0626fa48  kdnssd-5.109.0.tar.xz
3fc1c5e58a8202cd0722aa7ec99ad584  kguiaddons-5.109.0.tar.xz
13b867e8189e91e402e5e9b9aa33b613  ki18n-5.109.0.tar.xz
d8f87c99c0b798f04ac328d7050d2d97  kidletime-5.109.0.tar.xz
777d46bc3c7c7e66804402220dac2df0  kimageformats-5.109.0.tar.xz
e3321430de25b4b16ad48c6c2f168170  kitemmodels-5.109.0.tar.xz
c5efe890400ab8b97270f9a3e821d510  kitemviews-5.109.0.tar.xz
f334911f97cd4592e3b823dfc518f9eb  kplotting-5.109.0.tar.xz
67f4605da5e119342e91fc4670114a2b  kwidgetsaddons-5.109.0.tar.xz
2b384fcad72c84ccda75f300c14f633c  kwindowsystem-5.109.0.tar.xz
4dcacee7da9987c587511634ca90f064  networkmanager-qt-5.109.0.tar.xz
8952c4756ed0bc072a8bad998ed81bc6  solid-5.109.0.tar.xz
8aff00ce75275252f45d915c478279de  sonnet-5.109.0.tar.xz
f98889ea3fa22aaeaa9f8a85a602f3a6  threadweaver-5.109.0.tar.xz
62195272670cdec8ceb0fbda4bd8c43b  kauth-5.109.0.tar.xz
9b99972d3a25f521c20c04d1867fc3dd  kcompletion-5.109.0.tar.xz
fc2f3a9c7d12066b659b46e13a75e97a  kcrash-5.109.0.tar.xz
43e0fddae05e83dfb7cd0b0bb5cc11e5  kdoctools-5.109.0.tar.xz
7ccb53e9023ada6a5e08e4d562769ef3  kpty-5.109.0.tar.xz
30d32d8dc23c6ad4915be89831238c54  kunitconversion-5.109.0.tar.xz
eb1a478738f8f5bd5ab7bd23145594b7  kconfigwidgets-5.109.0.tar.xz
2353574c0c41d1f9e274d29fc3f174c3  kservice-5.109.0.tar.xz
8f2118a5544acd0bcb9a2202180e1e27  kglobalaccel-5.109.0.tar.xz
f9ce944b2dcc815e8df677b7018530cd  kpackage-5.109.0.tar.xz
737509807d74878037d564ab19f8f4fb  kdesu-5.109.0.tar.xz
f8ec4f236ad6d229294003478b2c8660  kemoticons-5.109.0.tar.xz
8d23dcfeaa45d04f3a03b993794c1929  kiconthemes-5.109.0.tar.xz
b108a7c58d5e63248e4043a6e2d5cd3d  kjobwidgets-5.109.0.tar.xz
37840b5eff97d1cb6105a276a14f6982  knotifications-5.109.0.tar.xz
520e1568726e76671fdbc3c5180d1e12  ktextwidgets-5.109.0.tar.xz
d52b000182f1530befcb9023db853620  kxmlgui-5.109.0.tar.xz
e230f6ef16e636ed103bd30ee9256d9d  kbookmarks-5.109.0.tar.xz
fb90ee7dad377b5fe11cc5a60c0721c5  kwallet-5.109.0.tar.xz
ab29c38a4efbb1c2a8ae844aae1482ea  kded-5.109.0.tar.xz
73fc6504264e620b0f9d0ba96c9d8ca4  kio-5.109.0.tar.xz
1d180f9106dd4e55346bf6b68f144594  kdeclarative-5.109.0.tar.xz
a3a6afb25c9d4dd0b027468c318763cb  kcmutils-5.109.0.tar.xz
4f555c40672c66df4c6d685bee6c5ae1  kirigami2-5.109.0.tar.xz
f355ac0e56c60d258c242bb5115c5879  syndication-5.109.0.tar.xz
9d263510d765e23f80558e8c83b113fd  knewstuff-5.109.0.tar.xz
d3b4d1a97b4c724a99b9920f3931db58  frameworkintegration-5.109.0.tar.xz
3ecd4e79453f9a8b378b87a63a698280  kinit-5.109.0.tar.xz
b65f54d2f7b5c7b54926f147114c3ab4  kparts-5.109.0.tar.xz
7111af3ca1d17b3b085513bf4067557e  kactivities-5.109.0.tar.xz
#929785c0f7a5594f4eac30c2f40645d5  kdewebkit-5.109.0.tar.xz
e970abb368b963a075f10f2ef26a95c0  syntax-highlighting-5.109.0.tar.xz
9405ebf54d7c675a39ef00afc81e472d  ktexteditor-5.109.0.tar.xz
cd659fa310535c476d3dcb7cba5499f8  kdesignerplugin-5.109.0.tar.xz
b9ce7efb96ee1f88f3d8c505a3c8e8b1  kwayland-5.109.0.tar.xz
08ec7edef427f681dfb3b1533ab0d880  plasma-framework-5.109.0.tar.xz
5e66a95d9998d4874aa1d9004b2bdc50  modemmanager-qt-5.109.0.tar.xz
e66ebdbc5547881e8562bab6a02ce8bb  kpeople-5.109.0.tar.xz
a1af96f8f082e4f9fca0ce476528b6ae  kxmlrpcclient-5.109.0.tar.xz
91a2f23a8a88b7ac17c94f70b50a6b71  bluez-qt-5.109.0.tar.xz
c796f5097f2185c33a61d8e32a296066  kfilemetadata-5.109.0.tar.xz
2d0a01f671615c6a1559eaa4d73193c2  baloo-5.109.0.tar.xz
#40721040f8c42a60450a94b7975d18e3  breeze-icons-5.109.0.tar.xz
#cb7872cff65fe1f62815339f40c639d8  oxygen-icons5-5.109.0.tar.xz
f09fd15d79bca7374094ea1126e6aef6  kactivities-stats-5.109.0.tar.xz
7c7a7502b568b7c3c45f7c43cefa92e7  krunner-5.109.0.tar.xz
00d1282f4dd770085cf2d72371cd3388  prison-5.109.0.tar.xz
12f3d0a80404bcd1111f5164d8e9dfd0  qqc2-desktop-style-5.109.0.tar.xz
4ca7a857b39d805ba61c94d17cbe6862  kjs-5.109.0.tar.xz
06545a811be0293dc9a79d65ce265a4e  kdelibs4support-5.109.0.tar.xz
2c1d3e7d57e6793e7bfbcd7424a199bc  khtml-5.109.0.tar.xz
b9ab15ac90dece7fa6b623be95ef40f9  kjsembed-5.109.0.tar.xz
405558700e5518f7e25eb252c0027410  kmediaplayer-5.109.0.tar.xz
e647b806ba546ea010b304f707a9d696  kross-5.109.0.tar.xz
0fc9e9fda1d3a55fd61f655a1dec0b39  kholidays-5.109.0.tar.xz
08946785eb0fa4a3d5b1ac174433f9a7  purpose-5.109.0.tar.xz
c4faaf8fa6587a0b80a0618810e9d41a  kcalendarcore-5.109.0.tar.xz
588289805cb18731d9b73ea86236b458  kcontacts-5.109.0.tar.xz
08b2dcd842dfcda7e406d16646b082bb  kquickcharts-5.109.0.tar.xz
8612d9d00ff9daeb507548ed9150d00d  knotifyconfig-5.109.0.tar.xz
d4e4e96920394601cf599ed8e36bd635  kdav-5.109.0.tar.xz
EOF

Na lista acima, observe que alguns arquivos foram comentados com um caractere cerquilha (#). A entrada extra-cmake-modules foi comentada porque foi construída anteriormente na Introdução ao KDE. Os pacotes de ícones são abordados separadamente em breeze-icons-5.109.0 e oxygen-icons5-5.109.0. O pacote kdewebkit pode ser construído se o pacote externo QtWebkit tiver sido construído.

Instalação do KDE Frameworks

[Nota]

Nota

Ao instalar vários pacotes em um conjunto de comandos sequenciais, a instalação precisa ser feita como o(a) usuário(a) root. Existem três opções gerais que podem ser usadas para fazer isso:

  1. Executar o conjunto inteiro de comandos sequenciais como o(a) usuário(a) root (não recomendado).

  2. Usar o comando sudo originário do pacote Sudo-1.9.14p3.

  3. Usar su -c "argumentos do comando" (aspas exigidas) que solicitará a senha do(a) root para cada iteração do loop.

Uma maneira de lidar com essa situação é a de se criar uma função curta do bash que selecione automaticamente o método apropriado. Depois que o comando for configurado no ambiente, ele não precisará ser configurado novamente.

as_root()
{
  if   [ $EUID = 0 ];        then $*
  elif [ -x /usr/bin/sudo ]; then sudo $*
  else                            su -c \\"$*\\"
  fi
}

export -f as_root
[Cuidado]

Cuidado

Se instalar em "/opt" e existir um "/opt/kf5", seja como um diretório regular ou um link simbólico, [então] ele deveria ser reinicializado (como "root"):

mv -v /opt/kf5 /opt/kf5.old                          &&
install -v -dm755           $KF5_PREFIX/{etc,share} &&
ln -sfv /etc/dbus-1         $KF5_PREFIX/etc         &&
ln -sfv /usr/share/dbus-1   $KF5_PREFIX/share       &&
ln -sfv /usr/share/polkit-1 $KF5_PREFIX/share       &&
install -v -dm755           $KF5_PREFIX/lib         &&
ln -sfv /usr/lib/systemd    $KF5_PREFIX/lib

Primeiro, inicie um sub "shell" que sairá em caso de erro:

bash -e

Instale todos os pacotes executando os seguintes comandos:

while read -r line; do

    # Obtenha o nome do arquivo, ignorando comentários e linhas em branco
    if $(echo $line | grep -E -q '^ *$|^#' ); then continue; fi
    file=$(echo $line | cut -d" " -f2)

    pkg=$(echo $file|sed 's|^.*/||')          # Diretório de remoção
    packagedir=$(echo $pkg|sed 's|\.tar.*||') # Diretório de Pacote

    name=$(echo $pkg|sed 's|-5.*$||') # Isolar nome de pacote

    tar -xf $file
    pushd $packagedir

      # kapidox é um módulo Python
      case $name in
        kapidox)
          pip3 wheel -w dist --no-build-isolation --no-deps $PWD
          as_root pip3 install --no-index --find-links dist --no-cache-dir --no-user kapidox
          popd
          rm -rf $packagedir
          continue
          ;;
      esac

      mkdir build
      cd    build

      cmake -DCMAKE_INSTALL_PREFIX=$KF5_PREFIX \
            -DCMAKE_PREFIX_PATH=$QT5DIR        \
            -DCMAKE_BUILD_TYPE=Release         \
            -DBUILD_TESTING=OFF                \
            -Wno-dev ..
      make
      as_root make install
    popd

  as_root rm -rf $packagedir
  as_root /sbin/ldconfig

done < frameworks-5.109.0.md5

exit
[Nota]

Nota

Quaisquer módulos que tenham sido omitidos podem ser instalados posteriormente usando-se o mesmo procedimento "mkdir build; cd build; cmake; make; make install" conforme acima.

Ocasionalmente, os caminhos de instalação são rigidamente codificados em arquivos instalados. Se o diretório instalado não for "/usr", [então] renomeie o diretório e crie um link simbólico:

mv -v /opt/kf5 /opt/kf5-5.109.0
ln -sfvn kf5-5.109.0 /opt/kf5

Explicações do Comando

-DCMAKE_PREFIX_PATH=$QT5DIR: Essa chave é usada para permitir que o "cmake" encontre as bibliotecas "Qt" adequadas.

-DCMAKE_BUILD_TYPE=Release: Essa chave é usada para aplicar um nível mais alto de otimização à compilação.

-DBUILD_TESTING=OFF: Essa chave é usada para evitar a construção de aplicativos de teste e bibliotecas que não são de uso para um(a) usuário(a) final.

Conteúdo

Aplicativos Instalados: balooctl, baloo_file, baloo_file_extractor, baloosearch, balooshow, checkXML5, depdiagram-generate, depdiagram-generate-all, depdiagram-prepare, desktoptojson, gentrigrams, kactivities-cli, kapidox_generate, kate-syntax-highlighter, kbuildsycoca5, kcookiejar5, kdebugdialog5, kded5, kdeinit5, kdeinit5_shutdown, kdeinit5_wrapper, kf5-config, kf5kross, kgendesignerplugin, kglobalaccel5, kiconfinder5, kjs5, kjscmd5, kjsconsole, knewstuff-dialog, kpackagelauncherqml, kpackagetool5, kquitapp5, kreadconfig5, kshell5, ktelnetservice5, ktrash5, kwalletd5, kwallet-query, kwrapper5, kwriteconfig5, meinproc5, parsetrigrams, plasmapkg2, preparetips5, protocoltojson e solid-hardware5
Bibliotecas Instaladas: libkdeinit5_klauncher.so, libKF5Activities.so, libKF5ActivitiesStats.so, libKF5Archive.so, libKF5Attica.so, libKF5AuthCore.so, libKF5Auth.so, libKF5Baloo.so, libKF5BluezQt.so, libKF5Bookmarks.so, libKF5CalendarCore.so, libKF5CalendarEvents.so, libKF5Codecs.so, libKF5Completion.so, libKF5ConfigCore.so, libKF5ConfigGui.so, libKF5ConfigWidgets.so, libKF5Contacts.so, libKF5CoreAddons.so, libKF5Crash.so, libKF5DAV.so, libKF5DBusAddons.so, libKF5Declarative.so, libKF5DNSSD.so, libKF5DocTools.so, libKF5Emoticons.so, libKF5FileMetaData.so, libKF5GlobalAccel.so, libKF5GuiAddons.so, libKF5Holidays.so, libKF5I18n.so, libKF5IconThemes.so, libKF5IdleTime.so, libKF5ItemModels.so, libKF5ItemViews.so, libKF5JobWidgets.so, libKF5JSApi.so, libKF5JsEmbed.so, libKF5JS.so, libKF5KCMUtils.so, libKF5KDELibs4Support.so, libKF5KHtml.so, libKF5KIOCore.so, libKF5KIOFileWidgets.so, libKF5KIOGui.so, libKF5KIONTLM.so, libKF5KIOWidgets.so, libKF5Kirigami2.so, libKF5KrossCore.so, libKF5KrossUi.so, libKF5MediaPlayer.so, libKF5NetworkManagerQt.so, libKF5NewStuffCore.so, libKF5NewStuff.so, libKF5Notifications.so, libKF5NotifyConfig.so, libKF5Package.so, libKF5Parts.so, libKF5PeopleBackend.so, libKF5People.so, libKF5PeopleWidgets.so, libKF5PlasmaQuick.so, libKF5Plasma.so, libKF5Plotting.so, libKF5Prison.so, libKF5Pty.so, libKF5Purpose.so, libKF5PurposeWidgets.so, libKF5QuickAddons.so, libKF5Runner.so, libKF5Service.so, libKF5Solid.so, libKF5SonnetCore.so, libKF5SonnetUi.so, libKF5Style.so, libKF5Su.so, libKF5SyntaxHighlighting.so, libKF5TextEditor.so, libKF5TextWidgets.so, libKF5ThreadWeaver.so, libKF5UnitConversion.so, libKF5Wallet.so, libKF5WaylandClient.so, libKF5WaylandServer.so, libKF5WidgetsAddons.so, libKF5WindowSystem.so, libKF5XmlGui.so, libKF5XmlRpcClient.so e libkwalletbackend5.so
Diretórios Instalados: /opt/kf5 (link simbólico para /opt/kf5-5.109.0) se instalar em /opt

Descrições Curtas

checkXML5

é uma ferramenta para verificar erros de sintaxe em arquivos "XML" "DocBook" do "KDE"

depdiagram-generate

é uma ferramenta para gerar um diagrama de dependências

depdiagram-generate-all

é uma ferramenta para gerar um diagrama de dependências para todos as estruturas essenciais de suporte de uma vez

depdiagram-prepare

é uma ferramenta para preparar arquivos de ponto

desktoptojson

é uma ferramenta para converter um arquivo ".desktop" em um arquivo ".json"

kbuildsycoca5

reconstrói o "cache" de configuração do sistema de arquivos da área de trabalho "KService"

kcookiejar5

é uma interface de linha de comando para o armazenamento de "cookies" "HTTP" usado pelo "KDE"; um serviço do "D-BUS" para armazenar/recuperar/limpar "cookies"

kded5

consolida vários pequenos serviços em um processo

kdeinit5

é um iniciador de processos mais ou menos semelhante ao famoso "init" usado para inicializar o "UNIX"

kf5-config

é um aplicativo de linha de comando usado para recuperar informações a respeito da instalação do "KDE" ou caminhos de usuário(a)

kf5kross

executa conjuntos de comandos sequenciais "kross" escritos em "Javascript", "Python", "Ruby", "Java" e "Falcon" do "KDE"

kgendesignerplugin

gera "plugins" de pequena engenhoca para o "Qt(TM) Designer"

kglobalaccel5

é um processo de segundo plano usado para registrar as combinações de teclas e para ser notificado(a) quando a ação for deflagrada

kjs5

é o mecanismo "ECMAScript"/"JavaScript" do "KDE"

kjscmd5

é uma ferramenta para iniciar conjuntos de comandos sequenciais "KJSEmbed" a partir da linha de comando

kjsconsole

é um console para o "kjs5"

kpackagelauncherqml

é uma ferramenta de linha de comando para iniciar o aplicativo "QML" "kpackage"

kpackagetool5

é uma ferramenta de linha de comando do "kpackage"

kreadconfig5

é uma ferramenta de linha de comando para recuperar valores a partir dos arquivos de configuração do "KDE"

kshell5

inicia aplicativos via "kdeinit"

ktelnetservice5

é um serviço de "telnet"

ktrash5

é um aplicativo auxiliar para lidar com a lixeira do "KDE"

kwalletd5

é o processo de segundo plano do gerenciador de carteira

kwriteconfig5

é uma ferramenta de linha de comando para escrever valores nos arquivos de configuração do "KDE"

meinproc5

converte arquivos "DocBook" para "HTML"

plasmapkg2

é uma ferramenta para instalar, listar e remover pacotes "Plasma"

preparetips5

é um conjunto de comandos sequenciais para extrair o texto a partir de um arquivo de dicas

solid-hardware5

é uma ferramenta de linha de comando para investigar dispositivos disponíveis