# # 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 @MAJOR_VERSION@ set MINOR_VERSION @MINOR_VERSION@ set PATCHLEVEL @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 crossCompile {} { global MAJOR_VERSION MINOR_VERSION PATCHLEVEL global env # # Try to find the Tcl/Tk headers and stubs cache set kit [file normalize [file join [pwd] .. .kittmp]] if { ! [file exists $kit] } { puts "Unable to find the Tcl/Tk headers and stubs in $kit, exiting." exit } puts "Using Tcl/Tk headers and stubs in: $kit" set sources { generic/Track.c generic/Tabular.c generic/Reticle.c generic/Map.c generic/Rectangle.c generic/Arc.c generic/Curve.c generic/Item.c generic/PostScript.c generic/MapInfo.c generic/Attrs.c generic/Draw.c generic/Geo.c generic/List.c generic/perfos.c generic/Transfo.c generic/Group.c generic/Icon.c generic/Text.c generic/Image.c generic/Color.c generic/Field.c generic/Triangles.c generic/Window.c generic/tkZinc.c generic/OverlapMan.c win/WinPort.c } set cFlags [list -I$kit -I$kit/generic -I$kit/xlib -Igeneric -Ilibtess \ -DUSE_TCL_STUBS=1 -DUSE_TK_STUBS=1 \ -DVERSION=\"$MAJOR_VERSION.$MINOR_VERSION.$PATCHLEVEL\" \ -DGL=1 -DGL_DAMAGE=1 -DATC=1 -DOM=1 -O2 -DBUILD_Tkzinc=1 ] set lFlags [list -shared -s -L$kit/Windows-x86 -ltclstub -ltkstub \ -lglu32 -lopengl32 -lgdi32 -lwsock32 -luser32 ] set objs [list] set envSave $env(PATH) set env(PATH) $env(HOME)/cross-tools/bin:$env(PATH) set logFile [open starkit.log w] foreach f $sources { lappend objs [file rootname [file tail $f]].o set cmdLine "gcc $cFlags -c $f >&@ $logFile" puts $logFile $cmdLine catch {eval exec $cmdLine} result puts $logFile $result } set cmdLine "gcc $objs $lFlags -o Tkzinc$MAJOR_VERSION$MINOR_VERSION$PATCHLEVEL.dll >&@ $logFile" puts $logFile $cmdLine catch {eval exec $cmdLine} result puts $logFile $result close $logFile set env(PATH) $envSave } proc updateKit {} { global MAJOR_VERSION MINOR_VERSION PATCHLEVEL set zincPath [file join Tkzinc.vfs 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] Tkzinc.vfs set zincPath [file join Tkzinc.vfs 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$winVersion.dll] } { set platformPath [file join $zincPath Windows-x86] file mkdir $platformPath file copy -force Tkzinc330.dll [file join $platformPath Tkzinc.dll] } exec sdx wrap Tkzinc.kit } 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 Windows variant crossCompile # # Build the linux variant catch {exec make clean} catch {exec make} # # If the starkit Tkzinc.kit already exist in the top directory # simply update it else build a new one according to the layout # above. In this later case one need to make sure there is a # valid Tkimg.kit in the top directory's parent. # if { [file exists Tkzinc.kit] } { if { [file exists Tkzinc.vfs] } { file delete -force Tkzinc.vfs } exec sdx unwrap Tkzinc.kit updateKit } { if { [file exists Tkzinc.vfs] } { file delete -force Tkzinc.vfs } file mkdir Tkzinc.vfs if { [file exists Tkimg.vfs] } { file delete -force Tkimg.vfs } exec sdx unwrap [file join .. Tkimg.kit] file copy [file join Tkimg.vfs lib] Tkzinc.vfs updateKit } file delete -force Tkimg.vfs file delete -force Tkzinc.vfs