{{tag>rpm}}
= Un MakeFile pour rpmbuild
Voir aussi :
* https://blog.mornati.net/build-rpms-using-jenkinshudson/
* Python invoke https://www.pyinvoke.org/
* o-task https://taskfile.dev/
* Make.rules
''Makefile''
clean: SHELL:=/bin/bash
build: SHELL:=/bin/bash
FicSpec = $(shell echo *.spec)
RpmName = $(shell grep -e '^%define name' $(FicSpec) |awk '{print $$3}')
RpmVersion = $(shell grep -e '^%define version' $(FicSpec) |awk '{print $$3}')
RpmRelease = $(shell grep -e '^%define release' $(FicSpec) |awk '{print $$3}')
StringRpmFullname = $(RpmName)-$(RpmVersion)-$(RpmRelease).$(shell uname -m)
all: build clean
clean:
rm -rf $$HOME/rpmbuild
cleanall: clean
rm -f *.rpm
copy: cleanall
mkdir -p $$HOME/rpmbuild/{BUILDROOT,SPECS}
mkdir -p $$HOME/rpmbuild/BUILDROOT/$(StringRpmFullname)
cp -a ROOT/* $$HOME/rpmbuild/BUILDROOT/$(StringRpmFullname)
cp -p $(FicSpec) ~/rpmbuild/SPECS/
build: copy
rpmbuild -bb ~/rpmbuild/SPECS/*.spec
mv ~/rpmbuild/RPMS/*/*.rpm .
Le **clean** se fait bien avant, mais pas après le **build**.
C'est comme si :
all: build clean
Etait
all: build
Solution :
''Makefile''
clean: SHELL:=/bin/bash
build: SHELL:=/bin/bash
FicSpec = $(shell echo *.spec)
RpmName = $(shell grep -e '^%define name' $(FicSpec) |awk '{print $$3}')
RpmVersion = $(shell grep -e '^%define version' $(FicSpec) |awk '{print $$3}')
RpmRelease = $(shell grep -e '^%define release' $(FicSpec) |awk '{print $$3}')
StringRpmFullname = $(RpmName)-$(RpmVersion)-$(RpmRelease).$(shell uname -m)
all: build cleanagain
clean:
rm -rf $$HOME/rpmbuild
cleanall: clean
rm -f *.rpm
cleanagain:
${MAKE} clean
copy: cleanall
mkdir -p $$HOME/rpmbuild/{BUILDROOT,SPECS}
mkdir -p $$HOME/rpmbuild/BUILDROOT/$(StringRpmFullname)
cp -a ROOT/* $$HOME/rpmbuild/BUILDROOT/$(StringRpmFullname)
cp -p $(FicSpec) ~/rpmbuild/SPECS/
build: copy
rpmbuild -bb ~/rpmbuild/SPECS/*.spec
mv ~/rpmbuild/RPMS/*/*.rpm .
== Exemple avec le paquet Python mycli
mkdir -p ~/rpm/ROOT
cd ~/rpm
Déposez le Makefile dans ~/rpm/
''~/rpm/mycli.spec''
%define name mycli
%define version 1.21.1
%define release 1
%define debug_package %{nil}
Summary: CLI for MySQL/MariaDB
Name: %{name}
Version: %{version}
Release: %{release}
Vendor: NC
Group: Database
License: MIT License
URL: https://www.mycli.net
Source0: https://github.com/dbcli/mycli
BuildRequires: rpm-build
Requires: python38
#BuildArch: noarch
%description
This is a command line interface for MySQL, MariaDB, and Percona with
auto-completion and syntax highlighting. The CLI is also capable of pretty
printing tabular data.
#%post
#set -e
%doc
#%changelog
%files
%defattr(755,root,root,644)
export http_proxy=http://127.0.0.1:3128
export https_proxy=http://127.0.0.1:3128
pip3 install --user mycli
mkdir -p ~/rpm/ROOT/opt/mycli
cp -a ~/.local/* ~/rpm/ROOT/opt/mycli/
mkdir -p ~/rpm/ROOT/usr/local/bin/
find /home/etudes/rpm/ROOT/ -type f -name "*.pyc" -delete
''~/rpm/ROOT/usr/local/bin/mycli''
#!/bin/sh
env PYTHONPATH=/opt/mycli/lib/python3.8/site-packages/ /opt/mycli/bin/mycli "$@"
cd ~/rpm/ROOT
find . -type f |sed -e 's/^\.//' >> ../mycli.spec
cd ~/rpm/
make
== Pb
=== did you mean TAB instead of 8 spaces?
$ make
Makefile:18: *** missing separator (did you mean TAB instead of 8 spaces?). Stop.
==== Solution
sed -i.bak -e 's/^[ ]\+/\t/g' Makefile