Ticket #581: rpm-port.3.patch

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

v4 patch

  • 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 "cd '${destpath}' && find . -type d | grep -v -E '^.$' | sed -e 's/^./%dir /' > '${workpath}/${portname}.filelist'"
     85    system "cd '${destpath}' && find . ! -type d | grep -v /etc/ | sed -e 's/^.//' >> '${workpath}/${portname}.filelist'"
     86    system "cd '${destpath}' && find . ! -type d | grep /etc/ | sed -e 's/^./%config /' >> '${workpath}/${portname}.filelist'"
     87    puts "destpath = ${destpath}"
     88    write_spec ${specpath} $portname $portversion $portrevision $pkg_description $pkg_long_description $category $maintainer $destpath $dependencies
     89    set rpmroot "${prefix}/src/apple"
     90    system "mkdir -p '${rpmroot}/BUILD'"
     91    system "mkdir -p '${rpmroot}/RPMS/i386'"
     92    system "mkdir -p '${rpmroot}/RPMS/ppc'"
     93    system "mkdir -p '${rpmroot}/RPMS/ppc64'"
     94    system "mkdir -p '${rpmroot}/RPMS/noarch'"
     95    system "mkdir -p '${rpmroot}/SOURCES'"
     96    system "mkdir -p '${rpmroot}/SPECS'"
     97    system "mkdir -p '${rpmroot}/SRPMS'"
     98    system "mkdir -p '${rpmroot}/tmp'"
     99    system "rpm -bb -v --define '_tmppath ${rpmroot}/tmp' --define '_topdir ${rpmroot}' ${specpath}"
     100
     101    return 0
     102}
     103
     104proc make_dependency_list {portname} {
     105    set result {}
     106    if {[catch {set res [dportsearch "^$portname\$"]} error]} {
     107        ui_error "port search failed: $error"
     108        return 1
     109    }
     110    foreach {name array} $res {
     111        array set portinfo $array
     112
     113        if {[info exists portinfo(depends_run)] || [info exists portinfo(depends_lib)]} {
     114            # get the union of depends_run and depends_lib
     115            # xxx: only examines the portfile component of the depspec
     116            set depends {}
     117            if {[info exists portinfo(depends_run)]} { eval "lappend depends $portinfo(depends_run)" }
     118            if {[info exists portinfo(depends_lib)]} { eval "lappend depends $portinfo(depends_lib)" }
     119
     120            foreach depspec $depends {
     121                set dep [lindex [split $depspec :] 2]
     122       
     123                # xxx: nasty hack
     124                if {$dep != "XFree86"} {
     125                    eval "lappend result [make_dependency_list $dep]"
     126                }
     127            }
     128        }
     129        lappend result $portinfo(name)/$portinfo(version)
     130        unset portinfo
     131    }
     132    ui_debug "dependencies for ${portname}: $result"
     133    return $result
     134}
     135
     136proc write_spec {specfile portname portversion portrevision description long_description category maintainer destroot dependencies} {
     137    set specfd [open ${specfile} w+]
     138    if {[llength ${dependencies}] != 0} {
     139       set requires [join ${dependencies} ", "]
     140       set requires "Requires: ${requires}"
     141    } else {
     142       set requires ""
     143    }
     144    puts $specfd "\#Spec file generated by DarwinPorts
     145%define distribution DarwinPorts
     146%define vendor OpenDarwin
     147%define packager ${maintainer}
     148
     149Summary: ${description}
     150Name: ${portname}
     151Version: ${portversion}
     152Release: ${portrevision}
     153Group: ${category}
     154License: Unknown
     155BuildRoot: ${destroot}
     156${requires}
     157
     158%description
     159${long_description}
     160%prep
     161%build
     162echo \"Go DarwinPorts\"
     163%install
     164%clean
     165%files -f ${destroot}/../${portname}.filelist
     166"
     167    close $specfd
     168}