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:
MauiKit1. 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.
Paquetes binarios de cada librería.
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