Created
January 17, 2012 10:24
-
-
Save mildred/1626116 to your computer and use it in GitHub Desktop.
Creates a RPM file either from the command-line or from a description file. The rpm contains the files in the directory specified by files variable.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
error(){ | |
echo "$@" >&2 | |
exit 1 | |
} | |
destdir="$(pwd)" | |
specdir="$(pwd)" | |
selffile= | |
pkgname= | |
pkgver=1.0 | |
pkgrel=1 | |
pkgdesc= | |
license= | |
arch= | |
files= | |
while [[ -n "$1" ]]; do | |
case "$1" in | |
-rpm) | |
;; | |
-pkgname) | |
shift | |
pkgname="$1" | |
;; | |
-pkgver) | |
shift | |
pkgver="$1" | |
;; | |
-pkgrel) | |
shift | |
pkgrel="$1" | |
;; | |
-pkgdesc) | |
shift | |
pkgdesc="$1" | |
;; | |
-license) | |
shift | |
license="$1" | |
;; | |
-arch) | |
shift | |
arch="$1" | |
;; | |
-files) | |
shift | |
files="$1" | |
[[ -z "$pkgname" ]] && pkgname="$files" | |
;; | |
*) | |
if [[ -d "$1" ]]; then | |
files="$1" | |
[[ -z "$pkgname" ]] && pkgname="$files" | |
else | |
cd "$(dirname "$1")" | |
specdir="$(pwd)" | |
selffile="$(basename "$1")" | |
[[ -z "$pkgname" ]] && pkgname="${selffile%.*}" | |
fi | |
break | |
;; | |
esac | |
shift | |
done | |
[[ -n "$selffile" ]] && source "./$selffile" | |
[[ -z "$files" ]] && error 'Empty variable $files' | |
[[ -d "$files" ]] || error "Not a directory: files=$files" | |
[[ -z "$pkgdesc" ]] && pkgdesc="Autogenerated package $pkgname $pkgver-$pkgrel" | |
[[ -z "$license" ]] && license="Unknown" | |
cd "$files" | |
files="$(find . -print0 | xargs -0 -n 1 sh -c 'if [[ -d "$0" ]]; then printf "%%dir \"%s/\"\n" "${0:1}"; else printf "\"%s\"\n" "${0:1}"; fi')" | |
specfile="$pkgname-$pkgver-$pkgrel.spec" | |
( | |
echo "Buildroot: $(pwd)" | |
[[ -n "$pkgname" ]] && echo "Name: $pkgname" | |
[[ -n "$pkgver" ]] && echo "Version: $pkgver" | |
[[ -n "$pkgrel" ]] && echo "Release: $pkgrel" | |
[[ -n "$pkgdesc" ]] && echo "Summary: $pkgdesc" | |
[[ -n "$license" ]] && echo "License: $license" | |
echo | |
cat <<EOF | |
%define _rpmdir $destdir | |
%define _rpmfilename %%{NAME}-%%{VERSION}-%%{RELEASE}.%%{ARCH}.rpm | |
%define _unpackaged_files_terminate_build 0 | |
%define _binaries_in_noarch_packages_terminate_build 0 | |
%description | |
$pkgdesc | |
%files | |
$files | |
%clean | |
EOF | |
)>"$specdir/$specfile" | |
flags= | |
[[ -n "$arch" ]] && flags="$flags --target=$arch" | |
echo rpmbuild -bb $flags --buildroot="`pwd`" "$specdir/$specfile" | |
rpmbuild -bb $flags --buildroot="`pwd`" "$specdir/$specfile" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment