From: Jean-Claude Wippler Date: Sat, 31 Mar 2007 11:15:56 +0000 (+0000) Subject: added build dependency handling X-Git-Url: http://privyetmir.co.uk/gitweb.cgi?a=commitdiff_plain;h=67c8605f03399f75c8328698ed3ac20c9a360d8f;p=kitgen added build dependency handling git-svn-id: svn://svn.equi4.com/kitgen/trunk@1353 9e558909-932a-0410-a563-af77432da1eb --- diff --git a/extdefs/Itk.kbs b/extdefs/Itk.kbs index 34d87af..60b3d1a 100644 --- a/extdefs/Itk.kbs +++ b/extdefs/Itk.kbs @@ -1,8 +1,8 @@ Version 3.3 -Requires incrtcl +Requires Itcl -Sources symlink [Topdir]/8.x/incrtcl-[Version] +Sources symlink [Topdir]/8.x/Itcl-[Version] Build { Sh [Srcdir]/itk/configure \ diff --git a/kbs.tcl b/kbs.tcl index f4866e0..6be7d5c 100644 --- a/kbs.tcl +++ b/kbs.tcl @@ -10,7 +10,9 @@ proc kbs {command args} { uplevel 1 ::kbs::$command $args } -namespace eval kbs {} +namespace eval kbs { + variable seq 0 +} proc kbs::help {} { puts "Kitgen Build System @@ -23,11 +25,11 @@ proc kbs::help {} { } proc kbs::list {} { - puts [glob -directory ../../extdefs -tails *.kbs] + puts [lsort -dict [glob -directory ../../extdefs -tails *.kbs]] } proc kbs::make {} { - foreach f [lsort [glob -directory ../../extdefs -tails *.kbs]] { + foreach f [lsort -dict [glob -directory ../../extdefs -tails *.kbs]] { set target [file root $f] if {![file exists build/$target]} { puts $target: @@ -43,9 +45,11 @@ proc kbs::build {target} { } namespace eval config { + proc init {name} { - namespace eval v [list set package $name] - namespace eval v [list set maindir [pwd]] + namespace eval v {} + set v::package $name + set v::maindir [pwd] file mkdir build/$name cd build/$name source [Topdir]/extdefs/$name.kbs @@ -56,6 +60,32 @@ namespace eval config { return $v::version } + proc Requires {args} { + # build all the other required extensions first, then resume this one + # this recurses into kbs::build, so we need to save/restore all state + foreach target $args { + if {![file exists $v::maindir/build/$target]} { + puts ">>> $target (required by $v::package)" + set pwd [pwd] + cd $v::maindir + + set keep {} + foreach x [info vars v::*] { lappend keep $x [set $x] } + namespace delete ::config::v + + set r [catch { ::kbs::build $target } err] + + catch { namespace delete ::config::v } + namespace eval ::config::v {} + foreach {x y} $keep { set $x $y } + + cd $pwd + if {$r} { return -code error $err} + puts "<<< $target (resuming build of $v::package)" + } + } + } + proc Sources {type args} { if {![file exists [Srcdir]]} { eval [linsert $args 0 src-$type]