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 oldcontents $contents 53 set contents [string map [list $current $newvalue] $contents] 54 if {[string equal $contents $oldcontents] && ![string equal $current $newvalue]} { 55 puts stderr "File $fname: $pattern not applicable" 56 set trouble 1 57 } 58 } 59 60 puts $out "\}" 61 62 if {[catch { 63 set fh [open ${fname}.new w] 64 puts -nonewline $fh $contents 65 close $fh 66 }]} { 67 file delete -force ${fname}.new 68 puts stderr "Unable to write new contents of $fname" 69 set trouble 1 70 return 71 } 72 file rename -force ${fname}.new $fname 73 return 74} 75 76proc extension {name data} { 77 global pname 78 set pname $name 79} 80 81# ============================================================ 82 83set v [lindex $argv 0] 84if {$v == {}} { 85 puts stderr "Usage: $argv0 major.minor(\[abp.\]patchlevel)?" 86 exit -1 87} 88 89regexp {([0-9]+)\.([0-9+])(([abp.])([0-9]+))?} $v \ 90 -> major minor __ detail patchlevel 91 92source DESCRIPTION 93 94mapdef mDate [string toupper \ 95 [clock format \ 96 [clock seconds] -format "%b-%d-%Y"]] 97mapdef mFullVersion $v 98mapdef mMajor $major 99mapdef mMinor $minor 100mapdef mShortDosVersion $major$minor 101mapdef mVersion ${major}.$minor 102mapdef mName $pname 103 104 105# ============================================================ 106 107set flistfile [file join [file dirname [info script]] svfiles] 108set newflist ${flistfile}.new 109set out [open ${flistfile}.new w] 110set subst [map] 111source $flistfile 112close $out 113 114## set trouble 1 ; # enforce that new file does not overwrite old 115if {!$trouble} { 116 file rename -force ${flistfile}.new ${flistfile} 117} 118