Ticket #581: rpm-port.8.patch

File rpm-port.8.patch, 7.9 KB (added by ranger@…, 21 years ago)

portrpmpackage

  • Makefile

    ? 
    RCS file: /Volumes/src/cvs/od/proj/darwinports/base/src/port1.0/Makefile,v
    retrieving revision 1.27
    diff -u -b -u -r1.27 Makefile
     
    11INSTALLDIR=     ${DESTDIR}${datadir}/darwinports/Tcl/port1.0
    22
    3 SRCS=           port.tcl portchecksum.tcl portconfigure.tcl portextract.tcl portfetch.tcl portmain.tcl portbuild.tcl portpatch.tcl portutil.tcl portinstall.tcl portdepends.tcl portinstall.tcl portuninstall.tcl portdepends.tcl portclean.tcl portpackage.tcl portcontents.tcl portmpkg.tcl
     3SRCS= port.tcl portchecksum.tcl portconfigure.tcl portextract.tcl           \
     4        portfetch.tcl portmain.tcl portbuild.tcl portpatch.tcl portutil.tcl \
     5        portinstall.tcl portdepends.tcl portinstall.tcl portuninstall.tcl   \
     6        portdepends.tcl portclean.tcl portpackage.tcl portcontents.tcl      \
     7        portmpkg.tcl portrpmpackage.tcl
    48
    59SUBDIR=         resources
    610
  • port.tcl

    RCS file: /Volumes/src/cvs/od/proj/darwinports/base/src/port1.0/port.tcl,v
    retrieving revision 1.20
    diff -u -b -u -r1.20 port.tcl
     
    4343package require portuninstall 1.0
    4444package require portclean 1.0
    4545package require portpackage 1.0
     46package require portrpmpackage 1.0
    4647package require portcontents 1.0
    4748package require portmpkg 1.0
  • new file portrpmpackage.tcl

    RCS file: portrpmpackage.tcl
    diff -N portrpmpackage.tcl
    - +  
     1# et:ts=4
     2# portrpmpackage.tcl
     3#
     4# Copyright (c) 2002 - 2003 Apple Computer, Inc.
     5# All rights reserved.
     6#
     7# Redistribution and use in source and binary forms, with or without
     8# modification, are permitted provided that the following conditions
     9# are met:
     10# 1. Redistributions of source code must retain the above copyright
     11#    notice, this list of conditions and the following disclaimer.
     12# 2. Redistributions in binary form must reproduce the above copyright
     13#    notice, this list of conditions and the following disclaimer in the
     14#    documentation and/or other materials provided with the distribution.
     15# 3. Neither the name of Apple Computer, Inc. nor the names of its contributors
     16#    may be used to endorse or promote products derived from this software
     17#    without specific prior written permission.
     18#
     19# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
     20# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     21# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     22# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
     23# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     24# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     25# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     26# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     27# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     28# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     29# POSSIBILITY OF SUCH DAMAGE.
     30#
     31
     32package provide portrpmpackage 1.0
     33package require portutil 1.0
     34
     35set com.apple.rpmpackage [target_new com.apple.rpmpackage rpmpackage_main]
     36target_runtype ${com.apple.rpmpackage} always
     37target_provides ${com.apple.rpmpackage} rpmpackage
     38target_requires ${com.apple.rpmpackage} install
     39
     40# define options
     41options rpmpackage.type rpmpackage.destpath
     42
     43# Set defaults
     44default rpmpackage.destpath {${workpath}/destroot}
     45
     46set UI_PREFIX "---> "
     47
     48proc rpmpackage_main {args} {
     49    global portname portversion portrevision rpmpackage.type rpmpackage.destpath UI_PREFIX
     50
     51    ui_msg "$UI_PREFIX [format [msgcat::mc "Creating RPM package for %s-%s"] ${portname} ${portversion}]"
     52
     53    return [rpmpackage_pkg $portname $portversion $portrevision]
     54}
     55
     56proc rpmpackage_pkg {portname portversion portrevision} {
     57    global portdbpath destpath workpath prefix portresourcepath categories maintainers description rpmpackage.destpath long_description homepage
     58
     59    set specpath ${workpath}/${portname}.spec
     60    # long_description, description, or homepage may not exist
     61    foreach variable {long_description description homepage categories maintainers} {
     62        if {![info exists $variable]} {
     63            set pkg_$variable ""
     64        } else {
     65            set pkg_$variable [set $variable]
     66        }
     67    }
     68    set category   [lindex [split $categories " "] 0]
     69    set maintainer [join [split $maintainers " "] ", "]
     70
     71    set dependencies {}
     72    # get deplist
     73    set deps [make_dependency_list $portname]
     74    set deps [lsort -unique $deps]
     75    foreach dep $deps {
     76        set name [lindex [split $dep /] 0]
     77        set vers [lindex [split $dep /] 1]
     78        # don't re-package ourself
     79        if {$name != $portname} {
     80            lappend dependencies "${name} >= ${vers}"
     81        }
     82    }
     83
     84    system "rm -f '${workpath}/${portname}.filelist' && touch '${workpath}/${portname}.filelist'"
     85    #system "cd '${destpath}' && find . -type d | grep -v -E '^.$' | sed -e 's/\"/\\\"/g' -e 's/^./%dir \"/' -e 's/$/\"/' > '${workpath}/${portname}.filelist'"
     86    system "cd '${destpath}' && find . ! -type d | grep -v /etc/ | sed -e 's/\"/\\\"/g' -e 's/^./\"/' -e 's/$/\"/' >> '${workpath}/${portname}.filelist'"
     87    system "cd '${destpath}' && find . ! -type d | grep /etc/ | sed -e 's/\"/\\\"/g' -e 's/^./%config \"/' -e 's/$/\"/' >> '${workpath}/${portname}.filelist'"
     88    write_spec ${specpath} $portname $portversion $portrevision $pkg_description $pkg_long_description $category $maintainer $destpath $dependencies
     89    system "DP_USERECEIPTS='${portdbpath}/receipts' rpm -bb -v ${specpath}"
     90
     91    return 0
     92}
     93
     94proc make_dependency_list {portname} {
     95    set result {}
     96    if {[catch {set res [dportsearch "^$portname\$"]} error]} {
     97        ui_error "port search failed: $error"
     98        return 1
     99    }
     100    foreach {name array} $res {
     101        array set portinfo $array
     102
     103        if {[info exists portinfo(depends_run)] || [info exists portinfo(depends_lib)]} {
     104            # get the union of depends_run and depends_lib
     105            # xxx: only examines the portfile component of the depspec
     106            set depends {}
     107            if {[info exists portinfo(depends_run)]} { eval "lappend depends $portinfo(depends_run)" }
     108            if {[info exists portinfo(depends_lib)]} { eval "lappend depends $portinfo(depends_lib)" }
     109
     110            foreach depspec $depends {
     111                set dep [lindex [split $depspec :] 2]
     112       
     113                # xxx: nasty hack
     114                if {$dep != "XFree86"} {
     115                    eval "lappend result [make_dependency_list $dep]"
     116                }
     117            }
     118        }
     119        lappend result $portinfo(name)/$portinfo(version)
     120        unset portinfo
     121    }
     122    ui_debug "dependencies for ${portname}: $result"
     123    return $result
     124}
     125
     126proc write_spec {specfile portname portversion portrevision description long_description category maintainer destroot dependencies} {
     127    set specfd [open ${specfile} w+]
     128    if {[llength ${dependencies}] != 0} {
     129       set requires [join ${dependencies} ", "]
     130       set requires "Requires: ${requires}"
     131    } else {
     132       set requires ""
     133    }
     134    puts $specfd "\#Spec file generated by DarwinPorts
     135%define distribution DarwinPorts
     136%define vendor OpenDarwin
     137%define packager ${maintainer}
     138
     139Summary: ${description}
     140Name: ${portname}
     141Version: ${portversion}
     142Release: ${portrevision}
     143Group: ${category}
     144License: Unknown
     145BuildRoot: ${destroot}
     146Epoch: 1
     147${requires}
     148
     149%description
     150${long_description}
     151%prep
     152%build
     153echo \"Go DarwinPorts\"
     154%install
     155%clean
     156%files -f ${destroot}/../${portname}.filelist
     157"
     158    close $specfd
     159}