1#!/bin/sh 2# -*- tcl -*- \ 3exec tclsh "$0" ${1+"$@"} 4 5# Insert version and other information into a number of files. 6 7global trouble 8set trouble 0 9 10# ============================================================ 11# Generate the substitution map. 12 13proc mapdef {k v} { 14 global map 15 set map(@${k}@) $v 16 return 17} 18 19proc map {} { 20 global map 21 set res [list] 22 foreach k [lsort [array names map]] { 23 lappend res $k $map($k) 24 } 25 return $res 26} 27 28# ============================================================ 29 30proc svfile {fname patternlist} { 31 global trouble subst out 32 if {![file exists $fname]} { 33 puts stderr "File $fname: Does not exist" 34 set trouble 1 35 return 36 } 37 38 puts "Updating file $fname ..." 39 40 set fh [open $fname r] 41 set contents [read $fh] 42 close $fh 43 44 puts $out "svfile [list $fname] \{" 45 46 foreach {pattern current} $patternlist { 47 set newvalue [string map $subst $pattern] 48 49 puts $out " [list $pattern]" 50 puts $out " [list $newvalue]" 51 52 set contents [string map [list $current $newvalue] $contents] 53 } 54 55 puts $out "\}" 56 57 if {[catch { 58 set fh [open ${fname}.new w] 59 puts -nonewline $fh $contents 60 close $fh 61 }]} { 62 file delete -force ${fname}.new 63 puts stderr "Unable to write new contents of $fname" 64 set trouble 1 65 return 66 } 67 file rename -force ${fname}.new $fname 68 return 69} 70 71proc extension {name data} { 72 global pname 73 set pname $name 74} 75 76# ============================================================ 77 78set v [lindex $argv 0] 79if {$v == {}} { 80 puts stderr "Usage: $argv0 major.minor(\[abp.\]patchlevel)?" 81 exit -1 82} 83 84regexp {([0-9]+)\.([0-9+])(([abp.])([0-9]+))?} $v \ 85 -> major minor __ detail patchlevel 86 87source DESCRIPTION 88 89mapdef mDate [string toupper \ 90 [clock format \ 91 [clock seconds] -format "%b-%d-%Y"]] 92mapdef mFullVersion $v 93mapdef mMajor $major 94mapdef mMinor $minor 95mapdef mShortDosVersion $major$minor 96mapdef mVersion ${major}.$minor 97mapdef mName $pname 98 99 100# ============================================================ 101 102set flistfile [file join [file dirname [info script]] svfiles] 103set newflist ${flistfile}.new 104set out [open ${flistfile}.new w] 105set subst [map] 106source $flistfile 107close $out 108 109## set trouble 1 ; # enforce that new file does not overwrite old 110if {!$trouble} { 111 file rename -force ${flistfile}.new ${flistfile} 112} 113