#! /usr/bin/env tclsh if {[llength $argv] != "2"} { puts stderr "Usage: teapot_index " exit 1 } set srcdir [file normalize [lindex $argv 0]] set dstdir [file normalize [lindex $argv 1]] # Index all packages proc teapot_index {srcdir} { array set pkginfo [list] foreach pkgdir [glob -directory $srcdir -type d */out/*] { unset -nocomplain currpkginfo set currpkginfo(pkgdir) $pkgdir set teapot [file join $pkgdir teapot.txt] set multifile 1 if {![file exists $teapot]} { set files [glob -directory $pkgdir *] if {[llength $files] == 1} { set teapot [lindex $files 0] set multifile 0 } else { continue } } set currpkginfo(multifile) $multifile if {$multifile} { set currpkginfo(extfile) file.zip } else { set currpkginfo(extfile) file.tm } set fd [open $teapot r] set data [read $fd] close $fd set processline $multifile foreach line [split $data \n] { set line [string trim $line] if {!$multifile} { if {$line == "# @@ Meta Begin"} { set processline 1 continue } if {$line == "# @@ Meta End"} { break } set line [regsub {^ *# *} $line {}] } if {!$processline} { continue } set cmd "INVALID" catch { set cmd [string toupper [lindex $line 0]] } switch -- $cmd { "PACKAGE" { set name [lindex $line 1] set vers [lindex $line 2] set currpkginfo(name) $name set currpkginfo(vers) $vers } "META" { set var [string tolower [lindex $line 1]] set val [lrange $line 2 end] set currpkginfo($var) $val } } } set pkginfo([list $currpkginfo(name) $currpkginfo(vers) $currpkginfo(platform)]) [array get currpkginfo] } return [array get pkginfo] } proc generate_tpm {entlist} { set ret {} return $ret } proc generate_table {fields numitems} { set ret "" foreach field $fields { append ret " \n" foreach part [lrange $field 0 [expr $numitems - 1]] { append ret " $part\n" } append ret " \n" } return [string range $ret 0 end-1] } # Create "index.html" proc create_output_index {dstdir pkginfo_arrlist} { array set pkginfo $pkginfo_arrlist set indexfile [file join $dstdir index.html] set pkglist [list] foreach ent [array names pkginfo] { set pkg [lindex $ent 0] if {[lsearch -exact $pkglist $pkg] != -1} { continue } lappend pkglist $pkg } set fd [open $indexfile w] puts $fd "" puts $fd " " puts $fd " List of all entities" puts $fd " " puts $fd " " puts $fd [generate_tpm $pkglist] puts $fd "

List of all entities

" puts $fd " " puts $fd [generate_table $pkglist 1] puts $fd "
" puts $fd " " puts $fd "" close $fd } # Create "package/list" proc create_output_pkglist {dstdir pkginfo_arrlist} { array set pkginfo $pkginfo_arrlist set pkgdir [file join $dstdir package] catch { file mkdir $pkgdir } set indexfile [file join $pkgdir list.html] set altindexfile [file join $pkgdir list] set pkglist [list] foreach ent [array names pkginfo] { set pkg [lindex $ent 0] set ver [lindex $ent 1] set arch [lindex $ent 2] lappend pkglist [list package $pkg $ver $arch 0] } set fd [open $indexfile w] puts $fd "" puts $fd " " puts $fd " List of all packages" puts $fd " " puts $fd " " puts $fd [generate_tpm $pkglist] puts $fd "

List of all packages

" puts $fd " " puts $fd " " puts $fd " " puts $fd " " puts $fd " " puts $fd " " puts $fd " " puts $fd [generate_table $pkglist 4] puts $fd "
WhatNameVersionPlatform
" puts $fd " " puts $fd "" close $fd file delete $altindexfile file link -hard $altindexfile $indexfile } # Create "package/name//ver//arch//file" proc create_output_files {dstdir pkginfo_arrlist {force 0}} { array set pkginfo $pkginfo_arrlist foreach ent [array names pkginfo] { set pkg [lindex $ent 0] set ver [lindex $ent 1] set arch [lindex $ent 2] array set currpkginfo $pkginfo($ent) set pkgdir $currpkginfo(pkgdir) set multifile $currpkginfo(multifile) set extfiletail $currpkginfo(extfile) set workdir [file join $dstdir package name $pkg ver $ver arch $arch] set regfile [file join $workdir file] set extfile [file join $workdir $extfiletail] catch { file mkdir $workdir } if {$multifile} { if {[file exists $extfile] && !$force} { continue } if {[catch { cd $pkgdir file delete $extfile exec zip -r $extfile . -x build.log } err]} { puts "Error while zipping: $err" } } else { set origfile [lindex [glob $pkgdir *] 0] file copy -force -- $origfile $extfile } file delete $regfile file link -hard $regfile $extfile } } set pkginfo [teapot_index $srcdir] create_output_index $dstdir $pkginfo create_output_pkglist $dstdir $pkginfo create_output_files $dstdir $pkginfo