aboutsummaryrefslogtreecommitdiff
path: root/starkit.tcl
blob: f163adaf3e2045238991a5f7a179280ca6d08447 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
#
# This script is intended to be run in the top directory
# with: tclsh starkit.tcl.
# It needs a tclkit and the sdx command as a starkit in the path.
#

set MAJOR_VERSION 
set MINOR_VERSION 
set PATCHLEVEL 


#
# Starkit structure
#
# demo.tcl
# lib
#   tkimg1.3
#     files from the Tkimg starkit
#   TkzincX.Y
#     Copyright
#     demos
#       demos files and sub-directories
#     Linux-x86
#       Tkzinc.so
#     pkgIndex.tcl
#     Windows-x86
#       Tkzinc.dll
#     zincGraphics.tcl
#     zincLogo.tcl
#     zincText.tcl
# main.tcl
#

proc Windows-x86-Compile {} {
  set cwd [pwd]
  puts "Compiling for Windows $cwd..."
  cd win
  if { [catch { exec tclsh package.tcl clean } result] } {
    puts $result
    exit
  }
  if { [catch { exec tclsh package.tcl subst } result] } {
    puts $result
    exit
  }
  if { [catch { exec tclsh package.tcl tcl } result] } {
    puts $result
    exit
  }
  #
  # Copy the dll in the root dir for updateKit.
  file copy -force [glob -directory buildtcl Tkzinc*.dll] [file join $cwd Tkzinc.dll]

  cd $cwd
}

proc Linux-x86-Compile {} {
}

proc updateKit { TkzincVfs } {
  global MAJOR_VERSION MINOR_VERSION PATCHLEVEL

  set zincPath [file join $TkzincVfs lib Tkzinc$MAJOR_VERSION.$MINOR_VERSION]
  set version $MAJOR_VERSION.$MINOR_VERSION.$PATCHLEVEL
  set winVersion $MAJOR_VERSION$MINOR_VERSION$PATCHLEVEL

  file copy -force [file join starkit demo.tcl] [file join starkit main.tcl] $TkzincVfs

  set zincPath [file join $TkzincVfs lib Tkzinc$MAJOR_VERSION.$MINOR_VERSION]
  file mkdir $zincPath
  file copy -force Copyright \
	  [file join library zincGraphics.tcl] \
	  [file join library zincLogo.tcl] \
	  [file join library zincText.tcl] \
	  $zincPath

  set demosPath [file join $zincPath demos]
  file mkdir $demosPath
  foreach f [glob -directory demos *.tcl] {
	  file copy -force $f $demosPath
  }
  file delete -force [file join $demosPath data] [file join $demosPath images]
  file copy -force [file join demos zinc-widget] [file join demos data] [file join demos images] $demosPath

  #
  # Emit a merged pkgIndex.tcl
  #
  set fOut [open [file join $zincPath pkgIndex.tcl] w]
  puts $fOut "proc Platform {} {"
  puts -nonewline $fOut [info body Platform]
  puts $fOut "}"
  set fIn [open [file join library pkgIndex.tcl]]
  foreach line [split [read $fIn] \n] {
  	if {![regexp {^\s*$|^#} $line]} {
	    puts $fOut $line
	  }
  }
  close $fIn
  puts -nonewline $fOut "package ifneeded Tkzinc $version "
  puts $fOut {[list load [file join $dir [Platform] Tkzinc[info sharedlibext]]]}
  close $fOut

  #
  # Copy the platform dependent libraries
  #
  if { [file exists libTkzinc$version.so] } {
	  set platformPath [file join $zincPath Linux-x86]
	  file mkdir $platformPath
	  file copy -force libTkzinc$version.so [file join $platformPath Tkzinc.so]
  }
  if { [file exists Tkzinc.dll] } {
	  set platformPath [file join $zincPath Windows-x86]
	  file mkdir $platformPath
	  file copy -force Tkzinc.dll [file join $platformPath Tkzinc.dll]
  }
}


proc Platform {} {
  global tcl_platform
  set plat [lindex $tcl_platform(os) 0]
  set mach $tcl_platform(machine)
  switch -glob -- $mach {
  	sun4* { set mach sparc }
  	intel -
	  i*86* { set mach x86 }
	  "Power Macintosh" { set mach ppc }
  }
  switch -- $plat {
	  AIX   { set mach ppc }
	  HP-UX { set mach hppa }
  }
  return "$plat-$mach"
}

#
# Build the current platform variant
[Platform]-Compile

set TkzincVfs Tkzinc.vfs
set TkzincKit Tkzinc.kit

set cwd [pwd]
cd ..

if { ! [file exists $TkzincVfs] } {
  if { [file exists $TkzincKit] } {
	  exec sdx unwrap $TkzincKit
  } else {
    puts "Unable to find either Tkzinc.kit or Tkzinc.vfs in .. , giving up."
    exit
  }
}
cd $cwd
updateKit [file join .. $TkzincVfs]

puts "Now wrapping the starkit"

cd ..
exec sdx wrap $TkzincKit