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