Compile y empaquete su aplicación

Compile y empaqute su aplicación MauiKit para Nova Flow OS / openSUSE Tumbleweed.

Tomando como ejemplo la aplicación MauiKit base (mauimusic) creada como se indica en:

pageMauiKit

1. Registre una cuenta en Open Build Service:

2. Crear un subproyecto y añadir el repositorio MauiKit:

  • En la página de subproyecto verá: Overview, Repositories, Monitor, Requests, etc.

  • Seleccione Repositories > Add from a project:

    • Project: home:hopeandtruth6517:mauikit-apps

    • Repositories: openSUSE_Tumbleweed

    • Name: mauikit-apps_Tumbleweed

    • Architectures: i586, x86_64

    El repositorio mauikit-apps depende a su vez del repositorio de openSUSE Tumbleweed, por lo que el repositorio añadido a su subproyecto tiene acceso a los 2 repositorios.

3. Seleccionar el subproyecto y crear un paquete:

  • Name: mauimusic

  • Title: Maui Music

  • Description: Discover and listen music

3. De un modo sencillo (sin integración git):

  • Elimine la carpeta mauimusic/build si ha compilado y ejecutado localmente.

  • Haga una copia de la carpeta mauimusic y renómbrela mauimusic-0.1.0.

  • Con el gestor de archivos Dolphin, haga click sobre la carpeta mauimusic-0.1.0 y seleccione Compress > Here as "mauimusic-0.1.0.tar.gz"

  • Suba el archivo en Open Build Service: Add local files.

4. En la página de paquete mauimusic seleccione:

  • Add an empty file or service > Filename: mauimusic.spec

5. Añade a mauimusic.spec:

%define mauikit_version 3.0.1

Name:           mauimusic
Version:        0.1.0
Release:        0
License:        LGPL-3.0
Summary:        Discover and listen music
URL:            https://github.com/user/mauimusic
Source:         %{name}-%{version}.tar.gz

%if 0%{?sle_version} == 150400 && 0%{?is_opensuse} 
ExcludeArch: x86_64
%endif

%if 0%{?sle_version} == 150500 && 0%{?is_opensuse} 
ExcludeArch: x86_64
%endif

BuildRequires:  gcc-c++
BuildRequires:  cmake
BuildRequires:  extra-cmake-modules
BuildRequires:  fdupes
BuildRequires:  AppStream

BuildRequires:  cmake(Qt5QuickCompiler)
BuildRequires:  cmake(Qt5Core)
BuildRequires:  cmake(Qt5Quick)
BuildRequires:  cmake(Qt5Qml)
BuildRequires:  cmake(Qt5Widgets)

BuildRequires:  cmake(KF5I18n)
BuildRequires:  cmake(KF5CoreAddons)

BuildRequires:  cmake(MauiKit) = %{mauikit_version}
BuildRequires:  cmake(MauiKitFileBrowsing) = %{mauikit_version}

Requires:       qt5qmlimport(QtQuick.Controls.2)
Requires:       qt5qmlimport(QtQuick.Layouts.1)

Requires:       mauikit = %{mauikit_version}
Requires:       mauikit-filebrowsing = %{mauikit_version}

%description
Discover and listen music.

%prep
%autosetup -p1

%build
%cmake_kf5 -d build
%cmake_build

%install
%kf5_makeinstall -C build
%kf5_post_install
%fdupes %{buildroot}%{_prefix}

%files
%license licenses/*
%doc README.md
%{_bindir}/mauimusic
%{_datadir}/applications/*.desktop
%{_datadir}/metainfo/*.xml
%{_datadir}/icons/hicolor/*/*/*

%changelog

La aplicación debería compilar exitosamente: succeeded

El fichero spec.

De un modo práctico con cada aplicación sólo tendrá que rellenar:

  • Name, Versión, License, Summary, URL.

  • BuildRequires y Requires.

  • Description.

  • Files.

BuildRequires:

Son los requerimientos durante la compilación. Son paquetes "devel".

  • mauimusic/CMakeLists.txt (busque todas las líneas find_package):

  • mauimusic/src/CMakeLists.txt (busque todo en target_link_libraries)

find_package(ECM ${REQUIRED_KF5_VERSION} REQUIRED NO_MODULE)

find_package(Qt5 ${QT_MIN_VERSION} REQUIRED COMPONENTS Core Quick Qml Widgets)
find_package(KF5 ${KF5_MIN_VERSION} REQUIRED COMPONENTS I18n CoreAddons)

find_package(Qt5QuickCompiler)
set_package_properties(Qt5QuickCompiler PROPERTIES
    DESCRIPTION "Compile QML at build time"
    TYPE OPTIONAL
    )

find_package(MauiKit3)
find_package(MauiKit3 REQUIRED COMPONENTS FileBrowsing)
target_link_libraries(${PROJECT_NAME}
    PRIVATE
    MauiKit3
    MauiKit3::FileBrowsing

    Qt5::Core
    Qt5::Quick
    Qt5::Widgets

    KF5::CoreAddons
    KF5::I18n
    )

Cada uno de ellos es un requerimiento de compilación y debe ser incluido como BuildRequires.

Abra Gestión de Software de YaST:

  • Qt5Core / paquete libQt5Core-devel / dependencias > proporciona: cmake(Qt5Core)

  • KF5I18n / paquete ki18n-devel / dependencias > proporciona: cmake(KF5I18n)

Para buscar el paquete que corresponde a cmake(Qt5Core), indíquelo en:

Si ha encontrado la librería binaria compilada y desea conocer el paquete devel tambien puede buscarlo en:

  • libKF5I18n5

Seleccione en los resultados: libKF5I18n5 > official release > ki18n.spec:

  • Name: ki18n

  • %package devel: nombre resultante ki18n-devel

  • %package addon: nombre resultante ki18n-addon (ejemplo, no existe)

o bien:

  • %define lname libKF5I18n5

  • %package -n %{lname}: nombre resultante libKF5I18n5

  • %package -n libMusic: nombre resultante libMusic

Requires:

Paquetes requeridos durante la instalación.

  1. Paquetes binarios de cada librería.

  2. Paquetes correspondientes a cada "import".

Dado que vienen instalados por defecto es costumbre no indicarlos, pero es necesario incluirlo si no se encuentra instalado.

Para comprobar los import:

  • Instale Bluefish.

  • Navegar hasta mauimusic > click derecho o secundario ratón sobre mauimusic > Buscar archivos:

  • Escriba: import y click "buscar todos".

import QtQuick.Controls 2.15
import QtQuick.Layouts 1.12
Requires:       qt5qmlimport(QtQuick.Controls.2)
Requires:       qt5qmlimport(QtQuick.Layouts.1)

Comprobando en:

  • qt5qmlimport(QtQuick.Controls.2) es: libqt5-qtquickcontrols2-5.15.11+kde5-1.1.x86_64.rpm

  • qt5qmlimport(QtQuick.Layouts.1) es: qtdeclarative-imports-provides-qt5-1.0-1.22.x86_64.rpm

Files

Indicados en mauimusic/CMakeLists.txt

project(mauimusic VERSION 1.0)
install(FILES src/data/project.appdata.xml DESTINATION ${KDE_INSTALL_METAINFODIR} RENAME ${PROJECT_URI}.appdata.xml)
install(FILES src/data/project.desktop DESTINATION ${XDG_APPS_INSTALL_DIR} RENAME ${PROJECT_URI}.desktop)
install(FILES src/assets/logo.svg DESTINATION ${KDE_INSTALL_ICONDIR}/hicolor/scalable/apps RENAME ${PROJECT_NAME}.svg)

Si alguna vez compila una aplicación y no sabe que archivos se instalan, no incluya nada en la sección Files y compile. Si la compilación es correcta, producirá "failed" antes de empaquetar, pero le indicará los archivos y rutas de instalación.

El nombre del ejecutable o binario es el nombre del proyecto:

project(mauimusic VERSION 1.0)
// mauimusic.spec

%files
%license licenses/*                    // mauimusic/licenses/LGPL-3.0.txt
%doc README.md                         // mauimusic/README.md
%{_bindir}/mauimusic                   // /usr/bin/mauimusic
%{_datadir}/applications/*.desktop     // /usr/share/applications/*.desktop
%{_datadir}/metainfo/*.xml             // /usr/share/metainfo/*.xml
%{_datadir}/icons/hicolor/*/*/*        // /usr/share/icons/hicolor/*/*/*

Macros de rutas.

%{_sysconfdir}

/etc

%{_prefix}

/usr

can be defined to /app for flatpak builds

%{_exec_prefix}

%{_prefix}

default: /usr

%{_includedir}

%{_prefix}/include

default: /usr/include

%{_bindir}

%{_exec_prefix}/bin

default: /usr/bin

%{_libdir}

%{_exec_prefix}/%{_lib}

default: /usr/%{_lib}

%{_libexecdir}

%{_exec_pre-fix}/libexec

default: /usr/libexec

%{_sbindir}

%{_exec_prefix}/sbin

default: /usr/sbin

%{_datadir}

%{_datarootdir}

default: /usr/share

%{_infodir}

%{_datarootdir}/info

default: /usr/share/info

%{_mandir}

%{_datarootdir}/man

default: /usr/share/man

%{_docdir}

%{_datadir}/doc

default: /usr/share/doc

%{_rundir}

/run

%{_localstatedir}

/var

%{_sharedstatedir}

/var/lib

%{_lib}

Lib64 / lib on 32bit platforms

%{_dataroot-dir}

%{_prefix}/share

default: /usr/share

%{_var}

/var

%{_tmppath}

%{_var}/tmp

default: /var/tmp

%{_usr}

/usr

%{_usrsrc}

%{_usr}/src

default: /usr/src

%{_initddir}

%{_sysconfdir}/rc.d/init.d

default: /etc/rc.d/init.d

%{_initrddir}

%{_initddir}

antiguo error ortográfico, retro-compatibilidad

%{buildroot}

%{_buildrootdir}/%{name}-%{version}-%{release}.%{_arch}

same as $BUILDROOT

%{_topdir}

%{getenv:HOME}/rpmbuild

%{_builddir}

%{_topdir}/BUILD

%{_rpmdir}

%{_topdir}/RPMS

%{_sourcedir}

%{_topdir}/SOURCES

%{_specdir}

%{_topdir}/SPECS

%{_srcrpmdir}

%{_topdir}/SRPMS

%{_buildrootdir}

%{_topdir}/BUILDROOT

%{_kf5_libdir}

/usr/%{_lib}

%{_kf5_configkcfgdir}

/usr/share/config.kcfg

%{_docdir}

/usr/share/doc/packages

Otras secciones

// Si es openSUSE Leap 15.4 y 15.5 excluir paquete (arquitectura x86_64)

%if 0%{?sle_version} == 150400 && 0%{?is_opensuse} 
ExcludeArch: x86_64
%endif

%if 0%{?sle_version} == 150500 && 0%{?is_opensuse} 
ExcludeArch: x86_64
%endif
BuildRequires:  gcc-c++              // compilador de GNU para código escrito en C++
BuildRequires:  cmake                // herramienta de construcción para proyectos con CMakeList.txt
BuildRequires:  extra-cmake-modules  // añade los módulos, incluyendo los usados por find_package() en CMakeList.txt para encontrar el software.
BuildRequires:  fdupes               // herramienta para reemplazar los archivos duplicados por enlaces para disminuir el espacio usado en el sistema instalado
BuildRequires:  AppStream            // soporte de metadatos: /usr/share/metainfo/*.xml o mauimusic/org.kde.mauimusic.appdata.xml
%prep
%autosetup -p1                 // extrae mauimusic-0.1.0.tar.gz y entra en carpeta mauimusic-0.1.0
                               // autosetup -p1 -n maui-v0.1.0 especifica nombre carpeta si no coincide con %{name}-%{version}
                               // -p1: omite nombre de la primera carpeta superior al aplicar patch

%build
%cmake_kf5 -d build            // configura
%cmake_build                   // compila

%install
%kf5_makeinstall -C build      // instala

%kf5_post_install
%fdupes %{buildroot}%{_prefix} // elimina duplicados reemplazándolos por enlaces

Last updated