Hex Artifact Content

Artifact 3523082fbc73362ff73cdd881ad3ea1964273e30:


0000: 23 21 20 2f 75 73 72 2f 62 69 6e 2f 65 6e 76 20  #! /usr/bin/env 
0010: 74 63 6c 73 68 0a 0a 69 66 20 7b 5b 6c 6c 65 6e  tclsh..if {[llen
0020: 67 74 68 20 24 61 72 67 76 5d 20 21 3d 20 22 32  gth $argv] != "2
0030: 22 7d 20 7b 0a 09 70 75 74 73 20 73 74 64 65 72  "} {..puts stder
0040: 72 20 22 55 73 61 67 65 3a 20 74 65 61 70 6f 74  r "Usage: teapot
0050: 5f 69 6e 64 65 78 20 3c 73 72 63 64 69 72 3e 20  _index <srcdir> 
0060: 3c 64 65 73 74 64 69 72 3e 22 0a 09 65 78 69 74  <destdir>"..exit
0070: 20 31 0a 7d 0a 0a 73 65 74 20 73 72 63 64 69 72   1.}..set srcdir
0080: 20 5b 66 69 6c 65 20 6e 6f 72 6d 61 6c 69 7a 65   [file normalize
0090: 20 5b 6c 69 6e 64 65 78 20 24 61 72 67 76 20 30   [lindex $argv 0
00a0: 5d 5d 0a 73 65 74 20 64 73 74 64 69 72 20 5b 66  ]].set dstdir [f
00b0: 69 6c 65 20 6e 6f 72 6d 61 6c 69 7a 65 20 5b 6c  ile normalize [l
00c0: 69 6e 64 65 78 20 24 61 72 67 76 20 31 5d 5d 0a  index $argv 1]].
00d0: 0a 23 20 49 6e 64 65 78 20 61 6c 6c 20 70 61 63  .# Index all pac
00e0: 6b 61 67 65 73 0a 70 72 6f 63 20 74 65 61 70 6f  kages.proc teapo
00f0: 74 5f 69 6e 64 65 78 20 7b 73 72 63 64 69 72 7d  t_index {srcdir}
0100: 20 7b 0a 09 61 72 72 61 79 20 73 65 74 20 70 6b   {..array set pk
0110: 67 69 6e 66 6f 20 5b 6c 69 73 74 5d 0a 0a 09 66  ginfo [list]...f
0120: 6f 72 65 61 63 68 20 70 6b 67 64 69 72 20 5b 67  oreach pkgdir [g
0130: 6c 6f 62 20 2d 64 69 72 65 63 74 6f 72 79 20 24  lob -directory $
0140: 73 72 63 64 69 72 20 2d 74 79 70 65 20 64 20 2a  srcdir -type d *
0150: 2f 6f 75 74 2f 2a 5d 20 7b 0a 09 09 75 6e 73 65  /out/*] {...unse
0160: 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 63 75  t -nocomplain cu
0170: 72 72 70 6b 67 69 6e 66 6f 0a 09 09 73 65 74 20  rrpkginfo...set 
0180: 63 75 72 72 70 6b 67 69 6e 66 6f 28 70 6b 67 64  currpkginfo(pkgd
0190: 69 72 29 20 24 70 6b 67 64 69 72 0a 0a 09 09 73  ir) $pkgdir....s
01a0: 65 74 20 74 65 61 70 6f 74 20 5b 66 69 6c 65 20  et teapot [file 
01b0: 6a 6f 69 6e 20 24 70 6b 67 64 69 72 20 74 65 61  join $pkgdir tea
01c0: 70 6f 74 2e 74 78 74 5d 0a 0a 09 09 73 65 74 20  pot.txt]....set 
01d0: 6d 75 6c 74 69 66 69 6c 65 20 31 0a 09 09 69 66  multifile 1...if
01e0: 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 73 20   {![file exists 
01f0: 24 74 65 61 70 6f 74 5d 7d 20 7b 0a 09 09 09 73  $teapot]} {....s
0200: 65 74 20 66 69 6c 65 73 20 5b 67 6c 6f 62 20 2d  et files [glob -
0210: 64 69 72 65 63 74 6f 72 79 20 24 70 6b 67 64 69  directory $pkgdi
0220: 72 20 2a 5d 0a 09 09 09 69 66 20 7b 5b 6c 6c 65  r *]....if {[lle
0230: 6e 67 74 68 20 24 66 69 6c 65 73 5d 20 3d 3d 20  ngth $files] == 
0240: 31 7d 20 7b 0a 09 09 09 09 73 65 74 20 74 65 61  1} {.....set tea
0250: 70 6f 74 20 5b 6c 69 6e 64 65 78 20 24 66 69 6c  pot [lindex $fil
0260: 65 73 20 30 5d 0a 09 09 09 09 73 65 74 20 6d 75  es 0].....set mu
0270: 6c 74 69 66 69 6c 65 20 30 0a 09 09 09 7d 20 65  ltifile 0....} e
0280: 6c 73 65 20 7b 0a 09 09 09 09 63 6f 6e 74 69 6e  lse {.....contin
0290: 75 65 0a 09 09 09 7d 0a 09 09 7d 0a 0a 09 09 73  ue....}...}....s
02a0: 65 74 20 63 75 72 72 70 6b 67 69 6e 66 6f 28 6d  et currpkginfo(m
02b0: 75 6c 74 69 66 69 6c 65 29 20 24 6d 75 6c 74 69  ultifile) $multi
02c0: 66 69 6c 65 0a 09 09 69 66 20 7b 24 6d 75 6c 74  file...if {$mult
02d0: 69 66 69 6c 65 7d 20 7b 0a 09 09 09 73 65 74 20  ifile} {....set 
02e0: 63 75 72 72 70 6b 67 69 6e 66 6f 28 65 78 74 66  currpkginfo(extf
02f0: 69 6c 65 29 20 66 69 6c 65 2e 7a 69 70 0a 09 09  ile) file.zip...
0300: 7d 20 65 6c 73 65 20 7b 0a 09 09 09 73 65 74 20  } else {....set 
0310: 63 75 72 72 70 6b 67 69 6e 66 6f 28 65 78 74 66  currpkginfo(extf
0320: 69 6c 65 29 20 66 69 6c 65 2e 74 6d 0a 09 09 7d  ile) file.tm...}
0330: 0a 0a 09 09 73 65 74 20 66 64 20 5b 6f 70 65 6e  ....set fd [open
0340: 20 24 74 65 61 70 6f 74 20 72 5d 0a 09 09 73 65   $teapot r]...se
0350: 74 20 64 61 74 61 20 5b 72 65 61 64 20 24 66 64  t data [read $fd
0360: 5d 0a 09 09 63 6c 6f 73 65 20 24 66 64 0a 0a 09  ]...close $fd...
0370: 09 73 65 74 20 70 72 6f 63 65 73 73 6c 69 6e 65  .set processline
0380: 20 24 6d 75 6c 74 69 66 69 6c 65 0a 09 09 66 6f   $multifile...fo
0390: 72 65 61 63 68 20 6c 69 6e 65 20 5b 73 70 6c 69  reach line [spli
03a0: 74 20 24 64 61 74 61 20 5c 6e 5d 20 7b 0a 09 09  t $data \n] {...
03b0: 09 73 65 74 20 6c 69 6e 65 20 5b 73 74 72 69 6e  .set line [strin
03c0: 67 20 74 72 69 6d 20 24 6c 69 6e 65 5d 0a 09 09  g trim $line]...
03d0: 09 69 66 20 7b 21 24 6d 75 6c 74 69 66 69 6c 65  .if {!$multifile
03e0: 7d 20 7b 0a 09 09 09 09 69 66 20 7b 24 6c 69 6e  } {.....if {$lin
03f0: 65 20 3d 3d 20 22 23 20 40 40 20 4d 65 74 61 20  e == "# @@ Meta 
0400: 42 65 67 69 6e 22 7d 20 7b 0a 09 09 09 09 09 73  Begin"} {......s
0410: 65 74 20 70 72 6f 63 65 73 73 6c 69 6e 65 20 31  et processline 1
0420: 0a 09 09 09 09 09 63 6f 6e 74 69 6e 75 65 0a 09  ......continue..
0430: 09 09 09 7d 0a 0a 09 09 09 09 69 66 20 7b 24 6c  ...}......if {$l
0440: 69 6e 65 20 3d 3d 20 22 23 20 40 40 20 4d 65 74  ine == "# @@ Met
0450: 61 20 45 6e 64 22 7d 20 7b 0a 09 09 09 09 09 62  a End"} {......b
0460: 72 65 61 6b 0a 09 09 09 09 7d 0a 0a 09 09 09 09  reak.....}......
0470: 73 65 74 20 6c 69 6e 65 20 5b 72 65 67 73 75 62  set line [regsub
0480: 20 7b 5e 20 2a 23 20 2a 7d 20 24 6c 69 6e 65 20   {^ *# *} $line 
0490: 7b 7d 5d 0a 09 09 09 7d 0a 0a 09 09 09 69 66 20  {}]....}.....if 
04a0: 7b 21 24 70 72 6f 63 65 73 73 6c 69 6e 65 7d 20  {!$processline} 
04b0: 7b 0a 09 09 09 09 63 6f 6e 74 69 6e 75 65 0a 09  {.....continue..
04c0: 09 09 7d 0a 0a 09 09 09 73 65 74 20 63 6d 64 20  ..}.....set cmd 
04d0: 22 49 4e 56 41 4c 49 44 22 0a 09 09 09 63 61 74  "INVALID"....cat
04e0: 63 68 20 7b 0a 09 09 09 09 73 65 74 20 63 6d 64  ch {.....set cmd
04f0: 20 5b 73 74 72 69 6e 67 20 74 6f 75 70 70 65 72   [string toupper
0500: 20 5b 6c 69 6e 64 65 78 20 24 6c 69 6e 65 20 30   [lindex $line 0
0510: 5d 5d 0a 09 09 09 7d 0a 0a 09 09 09 73 77 69 74  ]]....}.....swit
0520: 63 68 20 2d 2d 20 24 63 6d 64 20 7b 0a 09 09 09  ch -- $cmd {....
0530: 09 22 50 41 43 4b 41 47 45 22 20 7b 0a 09 09 09  ."PACKAGE" {....
0540: 09 09 73 65 74 20 6e 61 6d 65 20 5b 6c 69 6e 64  ..set name [lind
0550: 65 78 20 24 6c 69 6e 65 20 31 5d 0a 09 09 09 09  ex $line 1].....
0560: 09 73 65 74 20 76 65 72 73 20 5b 6c 69 6e 64 65  .set vers [linde
0570: 78 20 24 6c 69 6e 65 20 32 5d 0a 0a 09 09 09 09  x $line 2]......
0580: 09 73 65 74 20 63 75 72 72 70 6b 67 69 6e 66 6f  .set currpkginfo
0590: 28 6e 61 6d 65 29 20 24 6e 61 6d 65 0a 09 09 09  (name) $name....
05a0: 09 09 73 65 74 20 63 75 72 72 70 6b 67 69 6e 66  ..set currpkginf
05b0: 6f 28 76 65 72 73 29 20 24 76 65 72 73 0a 09 09  o(vers) $vers...
05c0: 09 09 7d 0a 09 09 09 09 22 4d 45 54 41 22 20 7b  ..}....."META" {
05d0: 0a 09 09 09 09 09 73 65 74 20 76 61 72 20 5b 73  ......set var [s
05e0: 74 72 69 6e 67 20 74 6f 6c 6f 77 65 72 20 5b 6c  tring tolower [l
05f0: 69 6e 64 65 78 20 24 6c 69 6e 65 20 31 5d 5d 0a  index $line 1]].
0600: 09 09 09 09 09 73 65 74 20 76 61 6c 20 5b 6c 72  .....set val [lr
0610: 61 6e 67 65 20 24 6c 69 6e 65 20 32 20 65 6e 64  ange $line 2 end
0620: 5d 0a 0a 09 09 09 09 09 73 65 74 20 63 75 72 72  ].......set curr
0630: 70 6b 67 69 6e 66 6f 28 24 76 61 72 29 20 24 76  pkginfo($var) $v
0640: 61 6c 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09  al.....}....}...
0650: 7d 0a 0a 09 09 73 65 74 20 70 6b 67 69 6e 66 6f  }....set pkginfo
0660: 28 5b 6c 69 73 74 20 24 63 75 72 72 70 6b 67 69  ([list $currpkgi
0670: 6e 66 6f 28 6e 61 6d 65 29 20 24 63 75 72 72 70  nfo(name) $currp
0680: 6b 67 69 6e 66 6f 28 76 65 72 73 29 20 24 63 75  kginfo(vers) $cu
0690: 72 72 70 6b 67 69 6e 66 6f 28 70 6c 61 74 66 6f  rrpkginfo(platfo
06a0: 72 6d 29 5d 29 20 5b 61 72 72 61 79 20 67 65 74  rm)]) [array get
06b0: 20 63 75 72 72 70 6b 67 69 6e 66 6f 5d 0a 09 7d   currpkginfo]..}
06c0: 0a 0a 09 72 65 74 75 72 6e 20 5b 61 72 72 61 79  ...return [array
06d0: 20 67 65 74 20 70 6b 67 69 6e 66 6f 5d 0a 7d 0a   get pkginfo].}.
06e0: 0a 70 72 6f 63 20 67 65 6e 65 72 61 74 65 5f 74  .proc generate_t
06f0: 70 6d 20 7b 65 6e 74 6c 69 73 74 7d 20 7b 0a 09  pm {entlist} {..
0700: 73 65 74 20 72 65 74 20 7b 3c 21 2d 2d 20 5b 5b  set ret {<!-- [[
0710: 54 50 4d 5b 5b 7d 0a 09 61 70 70 65 6e 64 20 72  TPM[[}..append r
0720: 65 74 20 24 65 6e 74 6c 69 73 74 0a 09 61 70 70  et $entlist..app
0730: 65 6e 64 20 72 65 74 20 7b 5d 5d 4d 50 54 5d 5d  end ret {]]MPT]]
0740: 20 2d 2d 3e 7d 0a 0a 09 72 65 74 75 72 6e 20 24   -->}...return $
0750: 72 65 74 0a 7d 0a 0a 70 72 6f 63 20 67 65 6e 65  ret.}..proc gene
0760: 72 61 74 65 5f 74 61 62 6c 65 20 7b 66 69 65 6c  rate_table {fiel
0770: 64 73 20 6e 75 6d 69 74 65 6d 73 7d 20 7b 0a 09  ds numitems} {..
0780: 73 65 74 20 72 65 74 20 22 22 0a 0a 09 66 6f 72  set ret ""...for
0790: 65 61 63 68 20 66 69 65 6c 64 20 24 66 69 65 6c  each field $fiel
07a0: 64 73 20 7b 0a 09 09 61 70 70 65 6e 64 20 72 65  ds {...append re
07b0: 74 20 22 20 20 20 20 20 20 3c 74 72 3e 5c 6e 22  t "      <tr>\n"
07c0: 0a 0a 09 09 66 6f 72 65 61 63 68 20 70 61 72 74  ....foreach part
07d0: 20 5b 6c 72 61 6e 67 65 20 24 66 69 65 6c 64 20   [lrange $field 
07e0: 30 20 5b 65 78 70 72 20 24 6e 75 6d 69 74 65 6d  0 [expr $numitem
07f0: 73 20 2d 20 31 5d 5d 20 7b 0a 09 09 09 61 70 70  s - 1]] {....app
0800: 65 6e 64 20 72 65 74 20 22 20 20 20 20 20 20 20  end ret "       
0810: 20 3c 74 64 3e 24 70 61 72 74 3c 2f 74 64 3e 5c   <td>$part</td>\
0820: 6e 22 0a 09 09 7d 0a 0a 09 09 61 70 70 65 6e 64  n"...}....append
0830: 20 72 65 74 20 22 20 20 20 20 20 20 3c 2f 74 72   ret "      </tr
0840: 3e 5c 6e 22 0a 09 7d 0a 0a 09 72 65 74 75 72 6e  >\n"..}...return
0850: 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 65 20 24   [string range $
0860: 72 65 74 20 30 20 65 6e 64 2d 31 5d 0a 7d 0a 0a  ret 0 end-1].}..
0870: 23 20 43 72 65 61 74 65 20 22 69 6e 64 65 78 2e  # Create "index.
0880: 68 74 6d 6c 22 0a 70 72 6f 63 20 63 72 65 61 74  html".proc creat
0890: 65 5f 6f 75 74 70 75 74 5f 69 6e 64 65 78 20 7b  e_output_index {
08a0: 64 73 74 64 69 72 20 70 6b 67 69 6e 66 6f 5f 61  dstdir pkginfo_a
08b0: 72 72 6c 69 73 74 7d 20 7b 0a 09 61 72 72 61 79  rrlist} {..array
08c0: 20 73 65 74 20 70 6b 67 69 6e 66 6f 20 24 70 6b   set pkginfo $pk
08d0: 67 69 6e 66 6f 5f 61 72 72 6c 69 73 74 0a 0a 09  ginfo_arrlist...
08e0: 73 65 74 20 69 6e 64 65 78 66 69 6c 65 20 5b 66  set indexfile [f
08f0: 69 6c 65 20 6a 6f 69 6e 20 24 64 73 74 64 69 72  ile join $dstdir
0900: 20 69 6e 64 65 78 2e 68 74 6d 6c 5d 0a 0a 09 73   index.html]...s
0910: 65 74 20 70 6b 67 6c 69 73 74 20 5b 6c 69 73 74  et pkglist [list
0920: 5d 0a 09 66 6f 72 65 61 63 68 20 65 6e 74 20 5b  ]..foreach ent [
0930: 61 72 72 61 79 20 6e 61 6d 65 73 20 70 6b 67 69  array names pkgi
0940: 6e 66 6f 5d 20 7b 0a 09 09 73 65 74 20 70 6b 67  nfo] {...set pkg
0950: 20 5b 6c 69 6e 64 65 78 20 24 65 6e 74 20 30 5d   [lindex $ent 0]
0960: 0a 09 09 69 66 20 7b 5b 6c 73 65 61 72 63 68 20  ...if {[lsearch 
0970: 2d 65 78 61 63 74 20 24 70 6b 67 6c 69 73 74 20  -exact $pkglist 
0980: 24 70 6b 67 5d 20 21 3d 20 2d 31 7d 20 7b 0a 09  $pkg] != -1} {..
0990: 09 09 63 6f 6e 74 69 6e 75 65 0a 09 09 7d 0a 0a  ..continue...}..
09a0: 09 09 6c 61 70 70 65 6e 64 20 70 6b 67 6c 69 73  ..lappend pkglis
09b0: 74 20 24 70 6b 67 0a 09 7d 0a 0a 09 73 65 74 20  t $pkg..}...set 
09c0: 66 64 20 5b 6f 70 65 6e 20 24 69 6e 64 65 78 66  fd [open $indexf
09d0: 69 6c 65 20 77 5d 0a 09 70 75 74 73 20 24 66 64  ile w]..puts $fd
09e0: 20 22 3c 68 74 6d 6c 3e 22 0a 09 70 75 74 73 20   "<html>"..puts 
09f0: 24 66 64 20 22 20 20 3c 68 65 61 64 3e 22 0a 09  $fd "  <head>"..
0a00: 70 75 74 73 20 24 66 64 20 22 20 20 20 20 3c 74  puts $fd "    <t
0a10: 69 74 6c 65 3e 4c 69 73 74 20 6f 66 20 61 6c 6c  itle>List of all
0a20: 20 65 6e 74 69 74 69 65 73 3c 2f 74 69 74 6c 65   entities</title
0a30: 3e 22 0a 09 70 75 74 73 20 24 66 64 20 22 20 20  >"..puts $fd "  
0a40: 3c 2f 68 65 61 64 3e 22 0a 09 70 75 74 73 20 24  </head>"..puts $
0a50: 66 64 20 22 20 20 3c 62 6f 64 79 3e 22 0a 09 70  fd "  <body>"..p
0a60: 75 74 73 20 24 66 64 20 5b 67 65 6e 65 72 61 74  uts $fd [generat
0a70: 65 5f 74 70 6d 20 24 70 6b 67 6c 69 73 74 5d 0a  e_tpm $pkglist].
0a80: 09 70 75 74 73 20 24 66 64 20 22 20 20 20 20 3c  .puts $fd "    <
0a90: 68 31 3e 4c 69 73 74 20 6f 66 20 61 6c 6c 20 65  h1>List of all e
0aa0: 6e 74 69 74 69 65 73 3c 2f 68 31 3e 22 0a 09 70  ntities</h1>"..p
0ab0: 75 74 73 20 24 66 64 20 22 20 20 20 20 3c 74 61  uts $fd "    <ta
0ac0: 62 6c 65 3e 22 0a 09 70 75 74 73 20 24 66 64 20  ble>"..puts $fd 
0ad0: 5b 67 65 6e 65 72 61 74 65 5f 74 61 62 6c 65 20  [generate_table 
0ae0: 24 70 6b 67 6c 69 73 74 20 31 5d 0a 09 70 75 74  $pkglist 1]..put
0af0: 73 20 24 66 64 20 22 20 20 20 20 3c 2f 74 61 62  s $fd "    </tab
0b00: 6c 65 3e 22 0a 09 70 75 74 73 20 24 66 64 20 22  le>"..puts $fd "
0b10: 20 20 3c 2f 62 6f 64 79 3e 22 0a 09 70 75 74 73    </body>"..puts
0b20: 20 24 66 64 20 22 3c 2f 68 74 6d 6c 3e 22 0a 09   $fd "</html>"..
0b30: 63 6c 6f 73 65 20 24 66 64 0a 7d 0a 0a 23 20 43  close $fd.}..# C
0b40: 72 65 61 74 65 20 22 70 61 63 6b 61 67 65 2f 6c  reate "package/l
0b50: 69 73 74 22 0a 70 72 6f 63 20 63 72 65 61 74 65  ist".proc create
0b60: 5f 6f 75 74 70 75 74 5f 70 6b 67 6c 69 73 74 20  _output_pkglist 
0b70: 7b 64 73 74 64 69 72 20 70 6b 67 69 6e 66 6f 5f  {dstdir pkginfo_
0b80: 61 72 72 6c 69 73 74 7d 20 7b 0a 09 61 72 72 61  arrlist} {..arra
0b90: 79 20 73 65 74 20 70 6b 67 69 6e 66 6f 20 24 70  y set pkginfo $p
0ba0: 6b 67 69 6e 66 6f 5f 61 72 72 6c 69 73 74 0a 0a  kginfo_arrlist..
0bb0: 09 73 65 74 20 70 6b 67 64 69 72 20 5b 66 69 6c  .set pkgdir [fil
0bc0: 65 20 6a 6f 69 6e 20 24 64 73 74 64 69 72 20 70  e join $dstdir p
0bd0: 61 63 6b 61 67 65 5d 0a 09 63 61 74 63 68 20 7b  ackage]..catch {
0be0: 0a 09 09 66 69 6c 65 20 6d 6b 64 69 72 20 24 70  ...file mkdir $p
0bf0: 6b 67 64 69 72 0a 09 7d 0a 09 73 65 74 20 69 6e  kgdir..}..set in
0c00: 64 65 78 66 69 6c 65 20 5b 66 69 6c 65 20 6a 6f  dexfile [file jo
0c10: 69 6e 20 24 70 6b 67 64 69 72 20 6c 69 73 74 2e  in $pkgdir list.
0c20: 68 74 6d 6c 5d 0a 09 73 65 74 20 61 6c 74 69 6e  html]..set altin
0c30: 64 65 78 66 69 6c 65 20 5b 66 69 6c 65 20 6a 6f  dexfile [file jo
0c40: 69 6e 20 24 70 6b 67 64 69 72 20 6c 69 73 74 5d  in $pkgdir list]
0c50: 0a 0a 09 73 65 74 20 70 6b 67 6c 69 73 74 20 5b  ...set pkglist [
0c60: 6c 69 73 74 5d 0a 09 66 6f 72 65 61 63 68 20 65  list]..foreach e
0c70: 6e 74 20 5b 61 72 72 61 79 20 6e 61 6d 65 73 20  nt [array names 
0c80: 70 6b 67 69 6e 66 6f 5d 20 7b 0a 09 09 73 65 74  pkginfo] {...set
0c90: 20 70 6b 67 20 5b 6c 69 6e 64 65 78 20 24 65 6e   pkg [lindex $en
0ca0: 74 20 30 5d 0a 09 09 73 65 74 20 76 65 72 20 5b  t 0]...set ver [
0cb0: 6c 69 6e 64 65 78 20 24 65 6e 74 20 31 5d 0a 09  lindex $ent 1]..
0cc0: 09 73 65 74 20 61 72 63 68 20 5b 6c 69 6e 64 65  .set arch [linde
0cd0: 78 20 24 65 6e 74 20 32 5d 0a 0a 09 09 6c 61 70  x $ent 2]....lap
0ce0: 70 65 6e 64 20 70 6b 67 6c 69 73 74 20 5b 6c 69  pend pkglist [li
0cf0: 73 74 20 70 61 63 6b 61 67 65 20 24 70 6b 67 20  st package $pkg 
0d00: 24 76 65 72 20 24 61 72 63 68 20 30 5d 0a 09 7d  $ver $arch 0]..}
0d10: 0a 0a 09 73 65 74 20 66 64 20 5b 6f 70 65 6e 20  ...set fd [open 
0d20: 24 69 6e 64 65 78 66 69 6c 65 20 77 5d 0a 09 70  $indexfile w]..p
0d30: 75 74 73 20 24 66 64 20 22 3c 68 74 6d 6c 3e 22  uts $fd "<html>"
0d40: 0a 09 70 75 74 73 20 24 66 64 20 22 20 20 3c 68  ..puts $fd "  <h
0d50: 65 61 64 3e 22 0a 09 70 75 74 73 20 24 66 64 20  ead>"..puts $fd 
0d60: 22 20 20 20 20 3c 74 69 74 6c 65 3e 4c 69 73 74  "    <title>List
0d70: 20 6f 66 20 61 6c 6c 20 70 61 63 6b 61 67 65 73   of all packages
0d80: 3c 2f 74 69 74 6c 65 3e 22 0a 09 70 75 74 73 20  </title>"..puts 
0d90: 24 66 64 20 22 20 20 3c 2f 68 65 61 64 3e 22 0a  $fd "  </head>".
0da0: 09 70 75 74 73 20 24 66 64 20 22 20 20 3c 62 6f  .puts $fd "  <bo
0db0: 64 79 3e 22 0a 09 70 75 74 73 20 24 66 64 20 5b  dy>"..puts $fd [
0dc0: 67 65 6e 65 72 61 74 65 5f 74 70 6d 20 24 70 6b  generate_tpm $pk
0dd0: 67 6c 69 73 74 5d 0a 09 70 75 74 73 20 24 66 64  glist]..puts $fd
0de0: 20 22 20 20 20 20 3c 68 31 3e 4c 69 73 74 20 6f   "    <h1>List o
0df0: 66 20 61 6c 6c 20 70 61 63 6b 61 67 65 73 3c 2f  f all packages</
0e00: 68 31 3e 22 0a 09 70 75 74 73 20 24 66 64 20 22  h1>"..puts $fd "
0e10: 20 20 20 20 3c 74 61 62 6c 65 3e 22 0a 09 70 75      <table>"..pu
0e20: 74 73 20 24 66 64 20 22 20 20 20 20 20 20 3c 74  ts $fd "      <t
0e30: 72 3e 22 0a 09 70 75 74 73 20 24 66 64 20 22 20  r>"..puts $fd " 
0e40: 20 20 20 20 20 20 20 3c 74 68 3e 57 68 61 74 3c         <th>What<
0e50: 2f 74 68 3e 22 0a 09 70 75 74 73 20 24 66 64 20  /th>"..puts $fd 
0e60: 22 20 20 20 20 20 20 20 20 3c 74 68 3e 4e 61 6d  "        <th>Nam
0e70: 65 3c 2f 74 68 3e 22 0a 09 70 75 74 73 20 24 66  e</th>"..puts $f
0e80: 64 20 22 20 20 20 20 20 20 20 20 3c 74 68 3e 56  d "        <th>V
0e90: 65 72 73 69 6f 6e 3c 2f 74 68 3e 22 0a 09 70 75  ersion</th>"..pu
0ea0: 74 73 20 24 66 64 20 22 20 20 20 20 20 20 20 20  ts $fd "        
0eb0: 3c 74 68 3e 50 6c 61 74 66 6f 72 6d 3c 2f 74 68  <th>Platform</th
0ec0: 3e 22 0a 09 70 75 74 73 20 24 66 64 20 22 20 20  >"..puts $fd "  
0ed0: 20 20 20 20 3c 2f 74 72 3e 22 0a 09 70 75 74 73      </tr>"..puts
0ee0: 20 24 66 64 20 5b 67 65 6e 65 72 61 74 65 5f 74   $fd [generate_t
0ef0: 61 62 6c 65 20 24 70 6b 67 6c 69 73 74 20 34 5d  able $pkglist 4]
0f00: 0a 09 70 75 74 73 20 24 66 64 20 22 20 20 20 20  ..puts $fd "    
0f10: 3c 2f 74 61 62 6c 65 3e 22 0a 09 70 75 74 73 20  </table>"..puts 
0f20: 24 66 64 20 22 20 20 3c 2f 62 6f 64 79 3e 22 0a  $fd "  </body>".
0f30: 09 70 75 74 73 20 24 66 64 20 22 3c 2f 68 74 6d  .puts $fd "</htm
0f40: 6c 3e 22 0a 09 63 6c 6f 73 65 20 24 66 64 0a 0a  l>"..close $fd..
0f50: 09 66 69 6c 65 20 64 65 6c 65 74 65 20 24 61 6c  .file delete $al
0f60: 74 69 6e 64 65 78 66 69 6c 65 0a 09 66 69 6c 65  tindexfile..file
0f70: 20 6c 69 6e 6b 20 2d 68 61 72 64 20 24 61 6c 74   link -hard $alt
0f80: 69 6e 64 65 78 66 69 6c 65 20 24 69 6e 64 65 78  indexfile $index
0f90: 66 69 6c 65 0a 7d 0a 0a 23 20 43 72 65 61 74 65  file.}..# Create
0fa0: 20 22 70 61 63 6b 61 67 65 2f 6e 61 6d 65 2f 3c   "package/name/<
0fb0: 70 6b 67 3e 2f 76 65 72 2f 3c 76 65 72 3e 2f 61  pkg>/ver/<ver>/a
0fc0: 72 63 68 2f 3c 61 72 63 68 3e 2f 66 69 6c 65 22  rch/<arch>/file"
0fd0: 0a 70 72 6f 63 20 63 72 65 61 74 65 5f 6f 75 74  .proc create_out
0fe0: 70 75 74 5f 66 69 6c 65 73 20 7b 64 73 74 64 69  put_files {dstdi
0ff0: 72 20 70 6b 67 69 6e 66 6f 5f 61 72 72 6c 69 73  r pkginfo_arrlis
1000: 74 20 7b 66 6f 72 63 65 20 30 7d 7d 20 7b 0a 09  t {force 0}} {..
1010: 61 72 72 61 79 20 73 65 74 20 70 6b 67 69 6e 66  array set pkginf
1020: 6f 20 24 70 6b 67 69 6e 66 6f 5f 61 72 72 6c 69  o $pkginfo_arrli
1030: 73 74 0a 0a 09 66 6f 72 65 61 63 68 20 65 6e 74  st...foreach ent
1040: 20 5b 61 72 72 61 79 20 6e 61 6d 65 73 20 70 6b   [array names pk
1050: 67 69 6e 66 6f 5d 20 7b 0a 09 09 73 65 74 20 70  ginfo] {...set p
1060: 6b 67 20 5b 6c 69 6e 64 65 78 20 24 65 6e 74 20  kg [lindex $ent 
1070: 30 5d 0a 09 09 73 65 74 20 76 65 72 20 5b 6c 69  0]...set ver [li
1080: 6e 64 65 78 20 24 65 6e 74 20 31 5d 0a 09 09 73  ndex $ent 1]...s
1090: 65 74 20 61 72 63 68 20 5b 6c 69 6e 64 65 78 20  et arch [lindex 
10a0: 24 65 6e 74 20 32 5d 0a 0a 09 09 61 72 72 61 79  $ent 2]....array
10b0: 20 73 65 74 20 63 75 72 72 70 6b 67 69 6e 66 6f   set currpkginfo
10c0: 20 24 70 6b 67 69 6e 66 6f 28 24 65 6e 74 29 0a   $pkginfo($ent).
10d0: 09 09 73 65 74 20 70 6b 67 64 69 72 20 24 63 75  ..set pkgdir $cu
10e0: 72 72 70 6b 67 69 6e 66 6f 28 70 6b 67 64 69 72  rrpkginfo(pkgdir
10f0: 29 0a 09 09 73 65 74 20 6d 75 6c 74 69 66 69 6c  )...set multifil
1100: 65 20 24 63 75 72 72 70 6b 67 69 6e 66 6f 28 6d  e $currpkginfo(m
1110: 75 6c 74 69 66 69 6c 65 29 0a 09 09 73 65 74 20  ultifile)...set 
1120: 65 78 74 66 69 6c 65 74 61 69 6c 20 24 63 75 72  extfiletail $cur
1130: 72 70 6b 67 69 6e 66 6f 28 65 78 74 66 69 6c 65  rpkginfo(extfile
1140: 29 0a 0a 09 09 73 65 74 20 77 6f 72 6b 64 69 72  )....set workdir
1150: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 73 74   [file join $dst
1160: 64 69 72 20 70 61 63 6b 61 67 65 20 6e 61 6d 65  dir package name
1170: 20 24 70 6b 67 20 76 65 72 20 24 76 65 72 20 61   $pkg ver $ver a
1180: 72 63 68 20 24 61 72 63 68 5d 0a 09 09 73 65 74  rch $arch]...set
1190: 20 72 65 67 66 69 6c 65 20 5b 66 69 6c 65 20 6a   regfile [file j
11a0: 6f 69 6e 20 24 77 6f 72 6b 64 69 72 20 66 69 6c  oin $workdir fil
11b0: 65 5d 0a 09 09 73 65 74 20 65 78 74 66 69 6c 65  e]...set extfile
11c0: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 77 6f 72   [file join $wor
11d0: 6b 64 69 72 20 24 65 78 74 66 69 6c 65 74 61 69  kdir $extfiletai
11e0: 6c 5d 0a 09 09 63 61 74 63 68 20 7b 0a 09 09 09  l]...catch {....
11f0: 66 69 6c 65 20 6d 6b 64 69 72 20 24 77 6f 72 6b  file mkdir $work
1200: 64 69 72 0a 09 09 7d 0a 0a 09 09 69 66 20 7b 24  dir...}....if {$
1210: 6d 75 6c 74 69 66 69 6c 65 7d 20 7b 0a 09 09 09  multifile} {....
1220: 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73  if {[file exists
1230: 20 24 65 78 74 66 69 6c 65 5d 20 26 26 20 21 24   $extfile] && !$
1240: 66 6f 72 63 65 7d 20 7b 0a 09 09 09 09 63 6f 6e  force} {.....con
1250: 74 69 6e 75 65 0a 09 09 09 7d 0a 0a 09 09 09 69  tinue....}.....i
1260: 66 20 7b 5b 63 61 74 63 68 20 7b 0a 09 09 09 09  f {[catch {.....
1270: 63 64 20 24 70 6b 67 64 69 72 0a 0a 09 09 09 09  cd $pkgdir......
1280: 66 69 6c 65 20 64 65 6c 65 74 65 20 24 65 78 74  file delete $ext
1290: 66 69 6c 65 0a 09 09 09 09 65 78 65 63 20 7a 69  file.....exec zi
12a0: 70 20 2d 72 20 24 65 78 74 66 69 6c 65 20 2e 20  p -r $extfile . 
12b0: 2d 78 20 62 75 69 6c 64 2e 6c 6f 67 0a 09 09 09  -x build.log....
12c0: 7d 20 65 72 72 5d 7d 20 7b 0a 09 09 09 09 70 75  } err]} {.....pu
12d0: 74 73 20 22 45 72 72 6f 72 20 77 68 69 6c 65 20  ts "Error while 
12e0: 7a 69 70 70 69 6e 67 3a 20 24 65 72 72 22 0a 09  zipping: $err"..
12f0: 09 09 7d 0a 09 09 7d 20 65 6c 73 65 20 7b 0a 09  ..}...} else {..
1300: 09 09 73 65 74 20 6f 72 69 67 66 69 6c 65 20 5b  ..set origfile [
1310: 6c 69 6e 64 65 78 20 5b 67 6c 6f 62 20 24 70 6b  lindex [glob $pk
1320: 67 64 69 72 20 2a 5d 20 30 5d 0a 0a 09 09 09 66  gdir *] 0].....f
1330: 69 6c 65 20 63 6f 70 79 20 2d 66 6f 72 63 65 20  ile copy -force 
1340: 2d 2d 20 24 6f 72 69 67 66 69 6c 65 20 24 65 78  -- $origfile $ex
1350: 74 66 69 6c 65 0a 09 09 7d 0a 0a 09 09 66 69 6c  tfile...}....fil
1360: 65 20 64 65 6c 65 74 65 20 24 72 65 67 66 69 6c  e delete $regfil
1370: 65 0a 09 09 66 69 6c 65 20 6c 69 6e 6b 20 2d 68  e...file link -h
1380: 61 72 64 20 24 72 65 67 66 69 6c 65 20 24 65 78  ard $regfile $ex
1390: 74 66 69 6c 65 0a 09 7d 0a 7d 0a 0a 73 65 74 20  tfile..}.}..set 
13a0: 70 6b 67 69 6e 66 6f 20 5b 74 65 61 70 6f 74 5f  pkginfo [teapot_
13b0: 69 6e 64 65 78 20 24 73 72 63 64 69 72 5d 0a 63  index $srcdir].c
13c0: 72 65 61 74 65 5f 6f 75 74 70 75 74 5f 69 6e 64  reate_output_ind
13d0: 65 78 20 24 64 73 74 64 69 72 20 24 70 6b 67 69  ex $dstdir $pkgi
13e0: 6e 66 6f 0a 63 72 65 61 74 65 5f 6f 75 74 70 75  nfo.create_outpu
13f0: 74 5f 70 6b 67 6c 69 73 74 20 24 64 73 74 64 69  t_pkglist $dstdi
1400: 72 20 24 70 6b 67 69 6e 66 6f 0a 63 72 65 61 74  r $pkginfo.creat
1410: 65 5f 6f 75 74 70 75 74 5f 66 69 6c 65 73 20 24  e_output_files $
1420: 64 73 74 64 69 72 20 24 70 6b 67 69 6e 66 6f 0a  dstdir $pkginfo.