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.1.

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.84.0, extra-cmake-modules-5.115.0, docbook-xml-4.5, docbook-xsl-nons-1.79.2, giflib-5.2.1, libepoxy-1.5.10, libgcrypt-1.10.3, libical-3.0.17, libjpeg-turbo-3.0.1, libpng-1.6.42, libxslt-1.1.39, lmdb-0.9.31, qca-2.3.8, qrencode-4.1.1, phonon-4.12.0, plasma-wayland-protocols-1.12.0, shared-mime-info-2.4, URI-5.27 e Wget-1.21.4 (exigido para baixar os pacotes)

Recomendadas

Opcionais

BlueZ-5.72 (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.2.0, libavif-1.0.4, libraw-0.21.2, 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.1, UPower-1.90.2 e media-player-info (tempo de execução)

Dependência opcional para o KWallet

GPGME-1.23.2, 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

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.115/
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.115.0.md5 << "EOF"
28643b6e6d1883390ba8cc138f98e4e0  attica-5.115.0.tar.xz
#125bbaa9cd2853caf029b67b48a3b3d9  extra-cmake-modules-5.115.0.tar.xz
6db6b6fef4a89e40a97cfaf121b7bb39  kapidox-5.115.0.tar.xz
0c22e60234f50e95d76a45d6a8135bba  karchive-5.115.0.tar.xz
c87402505994a05fbf4c368a22016ef5  kcodecs-5.115.0.tar.xz
fcb77cb2d9349b33e9e085ca4d2ebe7f  kconfig-5.115.0.tar.xz
159559a9fcc0812b4145acdd073a73d7  kcoreaddons-5.115.0.tar.xz
8c5b4a9555618c620a2e94a5d45798df  kdbusaddons-5.115.0.tar.xz
2327fbcd8dea339ca3ef24b889a71e63  kdnssd-5.115.0.tar.xz
c89c04e2ec19cab40c023f70e58dc941  kguiaddons-5.115.0.tar.xz
50ba903da49c6b9acf8d2e3881164787  ki18n-5.115.1.tar.xz
#abe7fcdfce4a066fdef6236ab15d11b2  ki18n-5.115.0.tar.xz
1bf59dbd22248f150f3b9c977af8b51f  kidletime-5.115.0.tar.xz
63e0fd1101429ab4dd94130074e732bb  kimageformats-5.115.0.tar.xz
49a623828ead35d4fa2d3255bbdca470  kitemmodels-5.115.0.tar.xz
c134615e17dd472b93230f6712f9f01b  kitemviews-5.115.0.tar.xz
a4ff537eb676fc53db9b3b7b8ecdc2ac  kplotting-5.115.0.tar.xz
148cb8009939e1ae53928d0d75111efb  kwidgetsaddons-5.115.0.tar.xz
7ff6c4358016468807c4d8c9ab9e0f5e  kwindowsystem-5.115.0.tar.xz
ec9afc8825fe4ffed7fdc69954682bd3  networkmanager-qt-5.115.0.tar.xz
4bc3f8554b526f0e39d8c2a6f228a988  solid-5.115.0.tar.xz
fe0e704f92fd43e6748ace4146616ef3  sonnet-5.115.0.tar.xz
4115012f00ffed36c9939f23cfb677ea  threadweaver-5.115.0.tar.xz
637f364c6e5ce6fbbca7a14e56f04c64  kauth-5.115.0.tar.xz
f0c3fc3ad2f0ad70c612d672d0ecb980  kcompletion-5.115.0.tar.xz
e4d7458f0df9c5adbe4e01dc2c917839  kcrash-5.115.0.tar.xz
bb297f2112003546b94c89c705578316  kdoctools-5.115.0.tar.xz
4efa94dabf55b53594a44efce08af107  kpty-5.115.0.tar.xz
c01766f3867f156ae2869031be469a5f  kunitconversion-5.115.0.tar.xz
22f355d87607bc76b9257724048ca73e  kconfigwidgets-5.115.0.tar.xz
1fc0908df48b8041271b88350b1f59f0  kservice-5.115.0.tar.xz
97f8e0b90a7c2ae352a9c6b3442e1a1f  kglobalaccel-5.115.0.tar.xz
e4bbae93076e4cc5f1f05c555d982837  kpackage-5.115.0.tar.xz
871278a972963eb6242688de2c3abc2e  kdesu-5.115.0.tar.xz
2c2978ff806b9a4a3e7eed141e7fae06  kemoticons-5.115.0.tar.xz
818c95b686e9257db6b4cdf007e2c49b  kiconthemes-5.115.0.tar.xz
e7bcd0c302c603e51ec20f9777ba1c0b  kjobwidgets-5.115.0.tar.xz
e3951d19de26c6b83e0fd2dc46b9ed55  knotifications-5.115.0.tar.xz
94a3182125744d25654f2c507dea6614  ktextwidgets-5.115.0.tar.xz
30270996c70d97fbda952aa2f822339f  kxmlgui-5.115.0.tar.xz
ae18d83dae4dd64ab4a728d26a6d79de  kbookmarks-5.115.0.tar.xz
1101eaf6d63a1c873cf21ee091821592  kwallet-5.115.0.tar.xz
4bc257fbce10119918d48593b203cf2e  kded-5.115.0.tar.xz
502f27350ad2538c843c6bdf4031ef8a  kio-5.115.0.tar.xz
934c4f217a34a44a82704be7f47a6ef6  kdeclarative-5.115.0.tar.xz
011fc001cffe0fd611ea516ced255578  kcmutils-5.115.0.tar.xz
a6b54d0321cecb9b9ce4fe8bdc2bdf75  kirigami2-5.115.0.tar.xz
0b47f08e5502871d9d7a483b75bb6ac4  syndication-5.115.0.tar.xz
32e234371b5454850f17441d15b5748e  knewstuff-5.115.0.tar.xz
c1cc6f7cb0b35ec6e1ef691ec4b1943b  frameworkintegration-5.115.0.tar.xz
7ae60737e857a72bf8af9859a65886f0  kinit-5.115.0.tar.xz
a1593f1c8024c1287b44e0035d00f2c6  kparts-5.115.0.tar.xz
b7b6252b2414fb108617f8cf73f0a810  kactivities-5.115.0.tar.xz
#dd11151488180073a39557afa9a1907e  kdewebkit-5.115.0.tar.xz
813461682389193e4fd0e589ffad866b  syntax-highlighting-5.115.0.tar.xz
e30c868032b7d722b75695b8f1eae46b  ktexteditor-5.115.0.tar.xz
474caf85f2b192e7f2bb68cce60aa273  kdesignerplugin-5.115.0.tar.xz
5031ae48f5214293ca8484e719a78895  kwayland-5.115.0.tar.xz
553e0499f311ad2cf96177e3e76abf64  plasma-framework-5.115.0.tar.xz
45d49e1ef3d42dc35fe07c36a45c612e  modemmanager-qt-5.115.0.tar.xz
a21b59445d190328cad46c6e8d5e48b0  kpeople-5.115.0.tar.xz
76e6ec2b6740ec77ff958fbe86d40932  kxmlrpcclient-5.115.0.tar.xz
872b72db316483eb4fcfb013de091403  bluez-qt-5.115.0.tar.xz
27eee2497d1e878693cd4cbeaf571379  kfilemetadata-5.115.0.tar.xz
d145b146adf0ae1d3c104d17a79e156a  baloo-5.115.0.tar.xz
#8a90f95057b7ab8ab03f3e4140b7adff  breeze-icons-5.115.0.tar.xz
#98931250d009db3750132d74447a030a  oxygen-icons-5.115.0.tar.xz
7f2a7726a6bba2f0a9c0474175fc69f6  kactivities-stats-5.115.0.tar.xz
021a50470de1860b96bc5edb8f3ef11c  krunner-5.115.0.tar.xz
abf08dfa6dd1d274e7834964e5cd23c5  prison-5.115.0.tar.xz
476bf46c139885de38b717e229f9a39d  qqc2-desktop-style-5.115.0.tar.xz
7af70230b69f0de4bb76c585b2af5733  kjs-5.115.0.tar.xz
51d2788c1bff19b532d4208dd5e778a2  kdelibs4support-5.115.0.tar.xz
d11bceb4cb9104d900a90708d6197bed  khtml-5.115.0.tar.xz
97bdb8d6a40d3dd499e1fb1297656f97  kjsembed-5.115.0.tar.xz
795fcee43ff4be908389f60942e8cba3  kmediaplayer-5.115.0.tar.xz
95fef271cb5197f9a0f009e41e2072c9  kross-5.115.0.tar.xz
06ab59b2662a0ddb5b77b0cc43173b7d  kholidays-5.115.0.tar.xz
27623b7ac58f7ed7d0a42208dc18aad2  purpose-5.115.0.tar.xz
ffacabefa59d96ac6d2fef1f9d33176f  kcalendarcore-5.115.0.tar.xz
ea0c60ec29421be2c26be53b0f6d135e  kcontacts-5.115.0.tar.xz
6ae56540d6d56086701a5dc130917e32  kquickcharts-5.115.0.tar.xz
0fdec6499fe1bfdf5ba509d0d9874f0a  knotifyconfig-5.115.0.tar.xz
7ec159103a24ed3d72b4680de952db20  kdav-5.115.0.tar.xz
EOF

Na lista acima, note 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. O pacote ki18n-5.115.0 foi substituído pelo ki18n-5.115.1. Os pacotes de ícones são abordados separadamente em breeze-icons-5.115.0 e oxygen-icons-5.115.0. O pacote kdewebkit pode ser construído se o pacote externo QtWebkit tiver sido construído.

Instalação do KDE Frameworks

[Nota]

Nota

Quando instalar múltiplos 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 se 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 oriundo do pacote Sudo-1.9.15p5.

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

Uma maneira de se lidar com essa situação é a de se criar uma função curta do bash que selecione automaticamente o método apropriado. Uma vez que o comando esteja configurado no ambiente, ele não precisa 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

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|^.*/||')          # Remove diretório
    packagedir=$(echo $pkg|sed 's|\.tar.*||') # Diretório de pacote

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

    tar -xf $file
    pushd $packagedir

      # kapidox é um módulo python
      case $name in
        kapidox)
          pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $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.115.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.

Unidades inúteis do "systemd" foram instaladas em "$KF5_PREFIX/lib". Remova-as agora (como "root"):

rm -rf $KF5_PREFIX/lib/systemd

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.115.0
ln -sfvn kf5-5.115.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 nível mais alto das otimizações de compilador.

-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.115.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