[26536] trunk/base/src
Juan Manuel Palacios
jmpp at macports.org
Thu Jun 28 00:02:08 PDT 2007
Hi Anders!
I know you told me this new target is still experimental, but I went
ahead and hooked it up for real usage in r26543... I mean, what better
way to test something than by actually using it? ;-)
Could you please provide some documentation for it both in the
ChangeLog (base/ChangeLog) and in the port(1) man page (base/src/port/
port.1)?
Keep up the effort and good work! Regards,...
-jmpp
On Jun 27, 2007, at 7:45 PM, source_changes at macosforge.org wrote:
> Revision
> 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
> Diff
>
> Modified: trunk/base/src/package1.0/package.tcl (26535 => 26536)
> --- 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 (0 => 26536)
> --- 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 (26535 => 26536)
> --- 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" }
> _______________________________________________
> macports-changes mailing list
> macports-changes at lists.macosforge.org
> http://lists.macosforge.org/mailman/listinfo/macports-changes
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/macports-dev/attachments/20070628/1b07b577/attachment.html
More information about the macports-dev
mailing list