#!/usr/bin/tclsh # # Run this script in order to generate a ZIP archive containing various # command-line tools. # # The makefile that invokes this script must first build the following # binaries: # # testfixture -- used to run this script # sqlite3 -- the SQLite CLI # sqldiff -- Program to diff two databases # sqlite3_analyzer -- Space analyzer # sqlite3_rsync -- Remote db sync # # On Windows, add: # # sqlite3.def # sqlite3.dll # # Add the --snapshot option to generate a snapshot ZIP archive instead of # a release ZIP archive. # set bSnapshot 0 for {set i 0} {$i<[llength $argv]} {incr i} { set a [lindex $argv $i] if {$a eq "-snapshot" || $a eq "--snapshot"} { set bSnapshot 1 continue } puts stderr "unknown argument: $a" exit 1 } switch $tcl_platform(os) { {Windows NT} { set OS win set EXE .exe } Linux { set OS linux set EXE {} } Darwin { set OS osx set EXE {} } default { set OS unknown set EXE {} } } switch $tcl_platform(machine) { arm64 { set ARCH arm64 } x86_64 { set ARCH x64 } amd64 - intel { if {$tcl_platform(pointerSize)==4} { set ARCH x86 } else { set ARCH x64 } } default { set ARCH unk } } if {$bSnapshot} { set in [open [file join [file dirname [file dirname [info script]]] manifest]] set manifest [read $in] close $in regexp {\nD (.{16})} $manifest all date regsub -all {[-:T]} $date {} v2 } else { set in [open [file join [file dirname [file dirname [info script]]] VERSION]] set vers [read $in] close $in scan $vers %d.%d.%d v1 v2 v3 set v2 [format 3%02d%02d00 $v2 $v3] } set name sqlite-tools-$OS-$ARCH-$v2.zip set filelist "sqlite3$EXE sqldiff$EXE sqlite3_analyzer$EXE sqlite3_rsync$EXE" proc make_zip_archive {name filelist} { file delete -force $name puts "fossil test-filezip $name $filelist" if {[catch {exec fossil test-filezip $name {*}$filelist}]} { puts "^--- Unable. Trying again as:" puts "zip $name $filelist" file delete -force $name exec zip $name {*}$filelist } puts "$name: [file size $name] bytes" } make_zip_archive $name $filelist # On Windows, also try to construct a DLL # if {$OS eq "win" && [file exists sqlite3.dll] && [file exists sqlite3.def]} { set name sqlite-dll-win-$ARCH-$v2.zip set filelist [list sqlite3.def sqlite3.dll] make_zip_archive $name $filelist }