pkgsrc-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[pkgsrc/trunk]: pkgsrc/pkgtools/genrpm Initial import of genrpm-1.0, a tool t...



details:   https://anonhg.NetBSD.org/pkgsrc/rev/9a10bb1d727b
branches:  trunk
changeset: 492829:9a10bb1d727b
user:      agc <agc%pkgsrc.org@localhost>
date:      Wed Apr 20 09:36:00 2005 +0000

description:
Initial import of genrpm-1.0, a tool to generate rpm packages.

        This package installs a script called genrpm, which is used to
        generate a Redhat Package Manager (RPM) package from an installed
        pkgsrc package.  It does this by generating a spec file, and using
        that to identify the components of the RPM and package them.

        If a pkgsrc tree is present on the system, a source RPM (or srpm)
        can also be generated. This will include the distfile, any pkgsrc
        patches, and the files used to accomplish the pkgsrc packaging.

diffstat:

 pkgtools/genrpm/DESCR          |    8 +
 pkgtools/genrpm/Makefile       |   41 +++++
 pkgtools/genrpm/PLIST          |    4 +
 pkgtools/genrpm/files/genrpm   |  306 +++++++++++++++++++++++++++++++++++++++++
 pkgtools/genrpm/files/genrpm.0 |   37 ++++
 pkgtools/genrpm/files/genrpm.8 |   60 ++++++++
 6 files changed, 456 insertions(+), 0 deletions(-)

diffs (truncated from 480 to 300 lines):

diff -r 5985de7a91e8 -r 9a10bb1d727b pkgtools/genrpm/DESCR
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/pkgtools/genrpm/DESCR     Wed Apr 20 09:36:00 2005 +0000
@@ -0,0 +1,8 @@
+This package installs a script called genrpm, which is used to
+generate a Redhat Package Manager (RPM) package from an installed
+pkgsrc package.  It does this by generating a spec file, and using
+that to identify the components of the RPM and package them.
+
+If a pkgsrc tree is present on the system, a source RPM (or srpm)
+can also be generated. This will include the distfile, any pkgsrc
+patches, and the files used to accomplish the pkgsrc packaging.
diff -r 5985de7a91e8 -r 9a10bb1d727b pkgtools/genrpm/Makefile
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/pkgtools/genrpm/Makefile  Wed Apr 20 09:36:00 2005 +0000
@@ -0,0 +1,41 @@
+# $NetBSD: Makefile,v 1.1.1.1 2005/04/20 09:36:00 agc Exp $
+
+DISTNAME=      genrpm-1.0
+CATEGORIES=    pkgtools
+MASTER_SITES=  # empty
+DISTFILES=     # empty
+
+MAINTAINER=    agc%NetBSD.org@localhost
+HOMEPAGE=      http://www.pkgsrc.org/
+COMMENT=       Generate an RPM package from an installed pkgsrc package
+
+DEPENDS+=      pkg_tarup-[0-9]*:../../pkgtools/pkg_tarup
+DEPENDS+=      rpm-[0-9]*:../../misc/rpm
+
+PKG_INSTALLATION_TYPES=        overwrite pkgviews
+
+WRKSRC=                ${WRKDIR}
+NO_CHECKSUM=    yes
+
+INSTALLATION_DIRS=     man/cat8 man/man8 sbin
+
+.include "../../mk/bsd.prefs.mk"
+
+do-build:
+       @for f in genrpm genrpm.8 genrpm.0; do                          \
+               ${SED} -e 's|@PKGSRCDIR@|${PKGSRCDIR}|g'                \
+                       -e 's|@SH@|${SH}|g'                             \
+                       ${FILESDIR}/$$f > ${WRKSRC}/$$f;                \
+       done
+.if ${OPSYS} == "SunOS" || ${OPSYS} == "AIX"
+       # pre-created man-pages are "mandoc" pages, these OS need "man",
+       # so regen the .0 page
+       nroff -man ${WRKSRC}/genrpm.8 >${WRKSRC}/genrpm.0
+.endif
+
+do-install:
+       ${INSTALL_SCRIPT} ${WRKSRC}/genrpm ${PREFIX}/sbin
+       ${INSTALL_MAN} ${WRKSRC}/genrpm.0 ${PREFIX}/man/cat8
+       ${INSTALL_MAN} ${WRKSRC}/genrpm.8 ${PREFIX}/man/man8
+
+.include "../../mk/bsd.pkg.mk"
diff -r 5985de7a91e8 -r 9a10bb1d727b pkgtools/genrpm/PLIST
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/pkgtools/genrpm/PLIST     Wed Apr 20 09:36:00 2005 +0000
@@ -0,0 +1,4 @@
+@comment $NetBSD: PLIST,v 1.1.1.1 2005/04/20 09:36:00 agc Exp $
+man/cat8/genrpm.0
+man/man8/genrpm.8
+sbin/genrpm
diff -r 5985de7a91e8 -r 9a10bb1d727b pkgtools/genrpm/files/genrpm
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/pkgtools/genrpm/files/genrpm      Wed Apr 20 09:36:00 2005 +0000
@@ -0,0 +1,306 @@
+#! @SH@
+
+# $NetBSD: genrpm,v 1.1.1.1 2005/04/20 09:36:00 agc Exp $
+
+#
+# Copyright © 2005 Alistair G. Crooks.  All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. All advertising materials mentioning features or use of this software
+#    must display the following acknowledgement:
+#      This product includes software developed by Alistair G. Crooks
+# 4. The name of the author may not be used to endorse or promote
+#    products derived from this software without specific prior written
+#    permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+# small shell script to convert from an installed NetBSD package to an rpm
+#
+# Usage: pkg2rpm [--distdir=distdir] [--objdir=objdir] [--rpmdir=rpmdir] [--srpmdir=srpmdir] [--sign] [-s] [-v] pkgname
+
+# find a program and set a global variable with its path
+check_prog()
+{       
+       _var="$1"; _name="$2"
+
+       eval _tmp=\"\$$_var\" 
+       if [ "x$_tmp" != "x" ]; then
+               # Variable is already set (by the user, for example)
+               return 0
+       fi      
+
+       for _d in `echo $PATH | tr ':' ' '`; do
+               if [ -x "$_d/$_name" ]; then
+                       # Program found
+                       eval $_var=\""$_d/$_name"\"
+                       return 1
+               fi
+       done
+
+       eval $_var=\"""\"
+}
+
+# our definitions
+DISTVENDOR=${DISTVENDOR:-"pkgsrc/genrpm"}
+DISTRIBUTION=${DISTRIBUTION:-"pkgsrc genrpm `date +%Y%m%d`"}
+
+# program definitions
+check_prog awk_cmd awk
+check_prog cp_cmd cp
+check_prog gzip_cmd gzip
+check_prog ln_cmd ln
+check_prog ls_cmd ls
+check_prog mkdir_cmd mkdir
+check_prog mv_cmd mv
+check_prog pkg_info_cmd pkg_info
+check_prog rm_cmd rm
+check_prog sed_cmd sed
+check_prog tar_cmd tar
+
+extract_cmd="${tar_cmd} xf -"
+
+# find the right name for make(1)
+opsys=`uname -s | tr -d /`
+case "${opsys}" in
+NetBSD)        check_prog bmake_cmd make ;;
+*)     check_prog bmake_cmd bmake ;;
+esac
+
+# set defaults
+DISTDIR=${DISTDIR:-@PKGSRCDIR@/distfiles}
+objdir=/usr/obj
+rpmdir=@PKGSRCDIR@/packages/rpms
+srpmdir=@PKGSRCDIR@/packages/srpms
+
+PKG_DBDIR=${PKG_DBDIR:-/var/db/pkg}
+PKGSRC=${PKGSRC:-@PKGSRCDIR@}
+
+verbose=""     # by default, quiet running
+sign=""                # by default, no signature
+genpat="-bb"   # by default, just create a binary rpm
+
+# and the immutables
+redhatdir=/usr/pkg/src/redhat
+reqpkgs="pkg_tarup rpm"
+metafiles="+BUILD_INFO +BUILD_VERSION +COMMENT +CONTENTS +DESC +SIZE_ALL +SIZE_PKG"
+
+# check any given args
+while [ $# -gt 0 ]; do
+       case "$1" in
+       --distdir=*)    DISTDIR=`echo "$1" | ${sed_cmd} -e 's|--distdir=||'` ;;
+       --objdir=*)     objdir=`echo "$1" | ${sed_cmd} -e 's|--objdir=||'` ;;
+       --rpmdir=*)     rpmdir=`echo "$1" | ${sed_cmd} -e 's|--rpmdir=||'` ;;
+       --srpmdir=*)    srpmdir=`echo "$1" | ${sed_cmd} -e 's|--srpmdir=||'` ;;
+       --sign)         sign="$1" ;;
+       -s)             genpat="-ba" ;;
+       -v)             verbose="-v"; set -x ;;
+       *)              break ;;
+       esac
+       shift
+done
+
+# check canonical directories are there on NetBSD
+if [ ! -d $redhatdir ]; then
+       ${mkdir_cmd} -p $redhatdir
+       (cd $redhatdir && ${ln_cmd} -s $objdir/rpm BUILD)
+       (cd $redhatdir && ${ln_cmd} -s $rpmdir RPMS)
+       (cd $redhatdir && ${ln_cmd} -s $srpmdir SRPMS)
+       (cd $redhatdir && ${ln_cmd} -s $objdir/rpm/SOURCES SOURCES)
+fi
+
+# check that we have required packages installed
+for p in $reqpkgs; do
+       if ${pkg_info_cmd} -qe $p; then
+               echo "Using $p version `${pkg_info_cmd} -e $p`"
+       else
+               echo "The $p needs to be installed to use this rpm generator" 2>&1
+               exit 1
+       fi
+done
+
+# generate an rpm for each package
+while [ $# -gt 0 ]; do
+       if ${pkg_info_cmd} -qe "$1"; then
+
+               # expand the package name to include version information
+               name=`${pkg_info_cmd} -e $1`
+
+               # 3 components to package's name
+               pkgbase=`echo $name | ${sed_cmd} -e 's|-[0-9].*||'`
+               case "$name" in
+               *-[0-9]*nb*)
+                       pkgversion=`echo $name | ${sed_cmd} -e 's|\(.*\)-\([0-9].*\)\(nb[0-9]*\)|\2|'`
+                       nb=`echo $name | ${sed_cmd} -e 's|\(.*\)-\([0-9].*\)nb\([0-9]*\)|\3|'`
+                       ;;
+               *)
+                       pkgversion=`echo $name | ${sed_cmd} -e 's|\(.*\)-\([0-9].*\)|\2|'`
+                       nb=0
+                       ;;
+               esac
+
+               # retrieve information on prefix and pkgsrc directory from the package
+               pkgprefix=`${pkg_info_cmd} -qp $name | ${awk_cmd} '{ print $2; exit }'`
+               pkgpath=`${pkg_info_cmd} -B $name | ${awk_cmd} '/^PKGPATH=/ { sub("PKGPATH=", ""); print }'`
+               pkgname=$pkgbase-$pkgversion
+
+               # generate the rpm spec file first
+               echo "Making an rpm spec file for $name - $pkgname - ($pkgbase-$pkgversion-$nb)"
+
+               # make the build root
+               ${mkdir_cmd} -p $objdir/rpm/BUILD/$pkgname/$pkgprefix
+
+               # make the single source directory
+               ${mkdir_cmd} -p $objdir/rpm/SOURCES
+
+               # define the build directory
+               builddir=$objdir/rpm/BUILD/$pkgname
+               sourcesdir=$objdir/rpm/SOURCES/$pkgname
+
+               # create the specfile in the right place
+               specfile=$builddir/$pkgbase.spec
+
+               echo "%define name $pkgbase" > $specfile
+               echo "%define version $pkgversion" >> $specfile
+               echo "%define release $nb" >> $specfile
+               echo "%define prefix $pkgprefix" >> $specfile
+               echo "" >> $specfile
+               echo "" >> $specfile
+
+               echo "Summary: %{name}, `${pkg_info_cmd} -qc $name`" >> $specfile
+               echo "Name: %{name}" >> $specfile
+               echo "Version: %{version}" >> $specfile
+               echo "Release: %{release}" >> $specfile
+               echo "Copyright: unknown" >> $specfile
+               echo "URL: `${pkg_info_cmd} -d $name | ${awk_cmd} '/^Homepage:/ { getline; print; exit }'`" >> $specfile
+               echo "Packager: Alistair Crooks <genrpm%alistaircrooks.com@localhost>" >> $specfile
+               echo "Distribution: ${DISTRIBUTION}" >> $specfile
+               echo "Vendor: ${DISTVENDOR}" >> $specfile
+               echo "Prefix: ${pkgprefix}" >> $specfile
+               for p in "" `${pkg_info_cmd} -qn $name`; do
+                       case "$p" in
+                       "")     continue ;;
+                       *)      case "$p" in
+                               *-[0-9]*)       p=`echo "$p" | ${sed_cmd} -e 's|\(.*\)-\([0-9].*\)|\1=\2|'` ;;
+                               esac
+                               case "$p" in
+                               *nb[0-9]*)      p=`echo "$p" | ${sed_cmd} -e 's|\(.*\)nb\([0-9]*\)|\1-\2|'` ;;
+                               esac
+                               echo "Requires: $p" >> $specfile ;;
+                       esac
+               done
+               for p in "" `${pkg_info_cmd} -qv $name | ${awk_cmd} '/conflicts with/ { print $4 }'`; do
+                       case "$p" in
+                       "")     continue ;;
+                       *)      case "$p" in
+                               *-[0-9]*)       p=`echo "$p" | ${sed_cmd} -e 's|\(.*\)-\([0-9].*\)|\1=\2|'` ;;
+                               esac
+                               case "$p" in
+                               *nb[0-9]*)      p=`echo "$p" | ${sed_cmd} -e 's|\(.*\)nb\([0-9]*\)|\1-\2|'` ;;
+                               esac
+                               echo "Conflicts: $p" >> $specfile ;;
+                       esac
+               done
+
+               echo "Buildroot: $builddir" >> $specfile
+               echo "Group: $pkgpath" >> $specfile
+               srcs="`${pkg_info_cmd} -Q _DISTFILES $name`"
+               case "$srcs" in
+               "")     srcs="`cd $PKGSRC/$pkgpath && ${bmake_cmd} show-var VARNAME=_DISTFILES`" ;;
+               esac
+               i=0
+               for f in "" $srcs; do
+                       case "$f" in
+                       "")     continue ;;



Home | Main Index | Thread Index | Old Index