[26536] trunk/base/src

source_changes at macosforge.org source_changes at macosforge.org
Wed Jun 27 16:45:19 PDT 2007


Revision: 26536
          http://trac.macosforge.org/projects/macports/changeset/26536
Author:   afb at macports.org
Date:     2007-06-27 16:45:18 -0700 (Wed, 27 Jun 2007)

Log Message:
-----------
experimental target to build SRPM (source RPM)

Modified Paths:
--------------
    trunk/base/src/package1.0/package.tcl
    trunk/base/src/port1.0/portutil.tcl

Added Paths:
-----------
    trunk/base/src/package1.0/portsrpm.tcl

Modified: trunk/base/src/package1.0/package.tcl
===================================================================
--- trunk/base/src/package1.0/package.tcl	2007-06-27 23:27:21 UTC (rev 26535)
+++ trunk/base/src/package1.0/package.tcl	2007-06-27 23:45:18 UTC (rev 26536)
@@ -33,6 +33,7 @@
 package provide mp_package 1.0
 
 package require portrpm 1.0
+package require portsrpm 1.0
 package require portpkg 1.0
 package require portmpkg 1.0
 package require portdmg 1.0

Added: trunk/base/src/package1.0/portsrpm.tcl
===================================================================
--- trunk/base/src/package1.0/portsrpm.tcl	                        (rev 0)
+++ trunk/base/src/package1.0/portsrpm.tcl	2007-06-27 23:45:18 UTC (rev 26536)
@@ -0,0 +1,234 @@
+# et:ts=4
+# portsrpm.tcl
+# $Id: portsrpm.tcl $
+#
+# Copyright (c) 2002 - 2003 Apple Computer, Inc.
+# 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. Neither the name of Apple Computer, Inc. nor the names of its contributors
+#    may be used to endorse or promote products derived from this software
+#    without specific prior written permission.
+# 
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT OWNER OR CONTRIBUTORS 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.
+#
+
+package provide portsrpm 1.0
+package require portutil 1.0
+package require portfetch 1.0
+
+set org.macports.srpm [target_new org.macports.srpm srpm_main]
+target_runtype ${org.macports.srpm} always
+target_provides ${org.macports.srpm} srpm
+target_requires ${org.macports.srpm} checksum
+
+options package.destpath
+
+set_ui_prefix
+
+proc srpm_main {args} {
+    global portname portversion portrevision UI_PREFIX
+    
+    ui_msg "$UI_PREFIX [format [msgcat::mc "Creating SRPM package for %s-%s"] ${portname} ${portversion}]"
+    
+    return [srpm_pkg $portname $portversion $portrevision]
+}
+
+proc srpm_pkg {portname portversion portrevision} {
+    global UI_PREFIX package.destpath portdbpath destpath workpath distpath prefix portresourcepath categories maintainers description long_description homepage epoch portpath distfiles fetch_urls
+	global os.platform os.arch os.version
+    
+    set rpmdestpath ""
+    if {![string equal ${package.destpath} ${workpath}] && ![string equal ${package.destpath} ""]} {
+        set pkgpath ${package.destpath}
+        system "mkdir -p ${pkgpath}/BUILD"
+        system "mkdir -p ${pkgpath}/RPMS"
+        system "mkdir -p ${pkgpath}/SOURCES"
+        system "mkdir -p ${pkgpath}/SPECS"
+        system "mkdir -p ${pkgpath}/SRPMS"
+        set rpmdestpath "--define '_topdir ${pkgpath}'"
+    }
+    
+    foreach dir [list "${prefix}/src/macports/SRPMS" "${prefix}/src/apple/SRPMS" "/usr/src/apple/SRPMS" "/macports/rpms/SRPMS"] {
+        foreach arch {"src" "nosrc"} {
+            set rpmpath "$dir/${portname}-${portversion}-${portrevision}.${arch}.rpm"
+	    if {[file readable $rpmpath] && ([file mtime ${rpmpath}] >= [file mtime ${portpath}/Portfile])} {
+                ui_debug "$rpmpath"
+                ui_msg "$UI_PREFIX [format [msgcat::mc "SRPM package for %s-%s is up-to-date"] ${portname} ${portversion}]"
+                return 0
+            }
+        }
+    }
+    
+    set specpath ${workpath}/${portname}-port.spec
+    # long_description, description, or homepage may not exist
+    foreach variable {long_description description homepage categories maintainers} {
+        if {![info exists $variable]} {
+            set pkg_$variable ""
+        } else {
+            set pkg_$variable [set $variable]
+        }
+    }
+    set category   [lindex [split $categories " "] 0]
+    set license    "Unknown"
+    set maintainer $maintainers
+    
+    set dependencies {}
+    # get deplist
+    set deps [make_dependency_list $portname]
+    set deps [lsort -unique $deps]
+    foreach dep $deps {
+        set name [lindex [split $dep /] 0]
+        set vers [lindex [split $dep /] 1]
+        # don't re-package ourself
+        if {$name != $portname} {
+            lappend dependencies "${name} >= ${vers}"
+        }
+    }
+
+    # true = .src.rpm (with distfiles), false = .nosrc.rpm (without distfiles)
+    set src false
+
+    #set sourcespath ${prefix}/src/macports/SOURCES
+    set sourcespath "`rpm --eval %{_sourcedir}`"
+
+    system "cp -p ${portpath}/Portfile ${sourcespath}/$portname-Portfile"
+    system "cd ${portpath} && zip -r -q ${sourcespath}/$portname-files.zip files -x \\*.DS_Store -x files/.svn\\*"
+    foreach dist $distfiles {
+        system "cp -p ${distpath}/${dist} ${sourcespath}/${dist}"
+    }
+    
+    write_port_spec ${specpath} $portname $portversion $portrevision $pkg_description $pkg_long_description $pkg_homepage $category $license $maintainer $distfiles $fetch_urls $dependencies $epoch $src
+    system "rpmbuild -bs -v --nodeps ${rpmdestpath} ${specpath}"
+    
+    return 0
+}
+
+proc make_dependency_list {portname} {
+    set result {}
+    if {[catch {set res [mport_search "^$portname\$"]} error]} {
+		global errorInfo
+		ui_debug "$errorInfo"
+        ui_error "port search failed: $error"
+        return 1
+    }
+    foreach {name array} $res {
+        array set portinfo $array
+	
+        if {[info exists portinfo(depends_build)] || [info exists portinfo(depends_lib)]} {
+            # get the union of depends_build and depends_lib
+            # xxx: only examines the portfile component of the depspec
+            set depends {}
+            if {[info exists portinfo(depends_build)]} { eval "lappend depends $portinfo(depends_build)" }
+            if {[info exists portinfo(depends_lib)]} { eval "lappend depends $portinfo(depends_lib)" }
+	    
+            foreach depspec $depends {
+                set dep [lindex [split $depspec :] end]
+		
+                # xxx: nasty hack
+                if {$dep != "XFree86"} {
+                    eval "lappend result [make_dependency_list $dep]"
+                }
+            }
+        }
+        lappend result $portinfo(name)/$portinfo(version)
+        unset portinfo
+    }
+    ui_debug "dependencies for ${portname}: $result"
+    return $result
+}
+
+proc write_port_spec {specfile portname portversion portrevision description long_description homepage category license maintainer distfiles fetch_urls dependencies epoch src} {
+    set specfd [open ${specfile} w+]
+    set origportname ${portname}
+    regsub -all -- "\-" $portversion "_" portversion
+    regsub -all -- "\-" $portname "_" portname
+    puts $specfd "\#Spec file generated by MacPorts
+%define distribution MacPorts
+%define vendor MacPorts
+%define packager ${maintainer}
+
+Summary: ${description}
+Name: ${portname}
+Version: ${portversion}
+Release: ${portrevision}
+Group: ${category}
+License: ${license}
+URL: ${homepage}
+BuildRoot: %{_tmppath}/%{name}-%{version}-root
+Epoch: ${epoch}
+Source0: ${portname}-Portfile
+Source1: ${portname}-files.zip"
+    set first 2
+    set count $first
+    puts $specfd "#distfiles"
+    foreach file ${distfiles} {
+    
+        puts -nonewline $specfd "Source${count}: "
+        if {![info exists $fetch_urls]} {
+        foreach {url_var distfile}  ${fetch_urls} {
+            if {[string equal $distfile $file]} {
+                 global portfetch::$url_var
+                 set site [lindex [set $url_var] 0]
+                 set file [portfetch::assemble_url $site $distfile]
+                 break
+            }
+        }
+        }
+        puts $specfd $file
+        if (!$src) {
+            puts $specfd "NoSource: $count"
+        }
+        incr count
+    }
+    puts $specfd ""
+    puts $specfd "AutoReqProv: no"
+    if {[llength ${dependencies}] != 0} {
+	foreach require ${dependencies} {
+	    puts $specfd "BuildRequires: [regsub -all -- "\-" $require "_"]"
+	}
+    }
+    puts $specfd "
+%description
+${long_description}
+
+%prep
+%setup -c -a 1 -T
+cp -p %{SOURCE0} Portfile
+#prepare work area
+port fetch
+port checksum
+port extract
+port patch
+
+%build
+port configure
+port build
+
+%install
+rm -rf \$RPM_BUILD_ROOT
+mkdir -p \$RPM_BUILD_ROOT
+port destroot
+port rpm
+
+%clean
+port clean"
+    close $specfd
+}

Modified: trunk/base/src/port1.0/portutil.tcl
===================================================================
--- trunk/base/src/port1.0/portutil.tcl	2007-06-27 23:27:21 UTC (rev 26535)
+++ trunk/base/src/port1.0/portutil.tcl	2007-06-27 23:45:18 UTC (rev 26536)
@@ -1166,7 +1166,8 @@
 						archive		-
 						pkg			-
 						mpkg		-
-                                                rpm	        -
+						rpm			-
+						srpm		-
 						dpkg		-
 						activate    -
 						""			{ set deptypes "depends_lib depends_build depends_run" }

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/macports-changes/attachments/20070627/618b8834/attachment.html


More information about the macports-changes mailing list