Skip to content

Instantly share code, notes, and snippets.

@mildred
Created January 17, 2012 10:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mildred/1626116 to your computer and use it in GitHub Desktop.
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.
#!/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