source: trunk/base/src/port/portindex.tcl @ 65033

Last change on this file since 65033 was 65033, checked in by perry@…, 11 years ago

Adds a license pseudo-portname

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 5.0 KB
Line 
1#!/bin/sh
2# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:filetype=tcl:et:sw=4:ts=4:sts=4
3# Run the Tcl interpreter \
4exec @TCLSH@ "$0" "$@"
5
6# Traverse through all ports, creating an index and archiving port directories
7# if requested
8# $Id: portindex.tcl 65033 2010-03-19 23:52:12Z perry@macports.org $
9
10catch {source \
11    [file join "@TCL_PACKAGE_DIR@" macports1.0 macports_fastload.tcl]}
12package require macports
13package require Pextlib
14
15# Globals
16set archive 0
17set stats(total) 0
18set stats(failed) 0
19array set ui_options        [list]
20array set global_options    [list]
21array set global_variations [list]
22
23# Pass global options into mportinit
24mportinit ui_options global_options global_variations
25
26# Standard procedures
27proc print_usage args {
28    global argv0
29    puts "Usage: $argv0 \[-ad\] \[-o output directory\] \[directory\]"
30    puts "-a:\tArchive port directories (for remote sites). Requires -o option"
31    puts "-o:\tOutput all files to specified directory"
32    puts "-d:\tOutput debugging information"
33}
34
35proc pindex {portdir} {
36    global target fd directory archive outdir stats
37    incr stats(total)
38    global macports::prefix
39    set save_prefix $prefix
40    set prefix {\${prefix}}
41    if {[catch {set interp [mportopen file://[file join $directory $portdir]]} result]} {
42        puts stderr "Failed to parse file $portdir/Portfile: $result"
43        # revert the prefix.
44        set prefix $save_prefix
45        incr stats(failed)
46    } else {
47        # revert the prefix.
48        set prefix $save_prefix
49        array set portinfo [mportinfo $interp]
50        mportclose $interp
51        set portinfo(portdir) $portdir
52        puts "Adding port $portdir"
53        if {$archive == "1"} {
54            if {![file isdirectory [file join $outdir [file dirname $portdir]]]} {
55                if {[catch {file mkdir [file join $outdir [file dirname $portdir]]} result]} {
56                    puts stderr "$result"
57                    exit 1
58                }
59            }
60            set portinfo(portarchive) [file join [file dirname $portdir] [file tail $portdir]].tgz
61            cd [file join $directory [file dirname $portinfo(portdir)]]
62            puts "Archiving port $portinfo(name) to [file join $outdir $portinfo(portarchive)]"
63            set tar [macports::findBinary tar $macports::autoconf::tar_path]
64            set gzip [macports::findBinary gzip $macports::autoconf::gzip_path]
65            if {[catch {exec $tar -cf - [file tail $portdir] | $gzip -c >[file join $outdir $portinfo(portarchive)]} result]} {
66                puts stderr "Failed to create port archive $portinfo(portarchive): $result"
67                exit 1
68            }
69        }
70
71        set keepkeys {categories depends_fetch depends_extract depends_build depends_lib depends_run description epoch homepage long_description maintainers name platforms revision variants version portdir portarchive replaced_by license}
72        foreach availkey [array names portinfo] {
73            if {[lsearch -exact ${keepkeys} $availkey] == -1} {
74                unset portinfo($availkey)
75            }
76        }
77        set output [array get portinfo]
78        set len [expr [string length $output] + 1]
79        puts $fd [list $portinfo(name) $len]
80        puts $fd $output
81    }
82}
83
84if {[expr $argc > 4]} {
85    print_usage
86    exit 1
87}
88
89for {set i 0} {$i < $argc} {incr i} {
90    set arg [lindex $argv $i]
91    switch -regex -- $arg {
92        {^-.+} {
93            if {$arg == "-a"} { # Turn on archiving
94                set archive 1
95            } elseif {$arg == "-d"} { # Turn on debug output
96                set ui_options(ports_debug) yes
97            } elseif {$arg == "-o"} { # Set output directory
98                incr i
99                set outdir [lindex $argv $i]
100            } else {
101                puts stderr "Unknown option: $arg"
102                print_usage
103                exit 1
104            }
105        }
106        default {
107            set directory $arg
108        }
109    }
110}
111
112if {$archive == 1 && ![info exists outdir]} {
113    puts stderr "You must specify an output directory with -o when using the -a option"
114    print_usage
115    exit 1
116}
117
118if {![info exists directory]} {
119    set directory .
120}
121
122# cd to input directory
123if {[catch {cd $directory} result]} {
124    puts stderr "$result"
125    exit 1
126} else {
127    set directory [pwd]
128}
129
130# Set output directory to full path
131if {[info exists outdir]} {
132    if {[catch {file mkdir $outdir} result]} {
133        puts stderr "$result"
134        exit 1
135    }
136    if {[catch {cd $outdir} result]} {
137        puts stderr "$result"
138        exit 1
139    } else {
140        set outdir [pwd]
141    }
142} else {
143    set outdir $directory
144}
145
146puts "Creating software index in $outdir"
147set tempportindex [mktemp "/tmp/mports.portindex.XXXXXXXX"]
148set fd [open $tempportindex w]
149mporttraverse pindex $directory
150close $fd
151file rename -force $tempportindex [file join $outdir PortIndex]
152mports_generate_quickindex [file join $outdir PortIndex]
153puts "\nTotal number of ports parsed:\t$stats(total)\
154      \nPorts successfully parsed:\t[expr $stats(total) - $stats(failed)]\t\
155      \nPorts failed:\t\t\t$stats(failed)\n"
Note: See TracBrowser for help on using the repository browser.