Posted to tcl by hypnotoad at Thu Apr 07 23:21:25 GMT 2016view pretty
### # This file contains instructions for how to build the Odielib library # It will produce the following files in whatever directory it was called from: # # * odielibc.mk - A Makefile snippet needed to compile the odielib sources # * odielibc.c - A C file which acts as the loader for odielibc # * logicset.c/h - A c # * (several .c and .h files) - C sources that are generated on the fly by automation ### # Ad a "just in case" version or practcl we ship locally set CWD [pwd] set ::project(srcdir) [file dirname [file normalize [info script]]] set ::project(sandbox) [file dirname $::project(srcdir)] set ::project(download) [file join $::project(sandbox) download] set ::project(teapot) [file join $::project(sandbox) teapot] if {[file exists [file join $::project(sandbox) odielib modules practcl pratcl.tcl]]} { source [file join $::project(sandbox) odielib modules practcl pratcl.tcl] } else { source [file join $::project(srcdir) tclconfig practcl.tcl] } if {[file exists project.rc]} { source project.rc } else { ### # Go with baked in assumptions ### set os [practcl::os] switch $os { windows { set ::project(EXEEXT) .exe } default { set ::project(EXEEXT) {} } } } set SRCPATH $::project(srcdir) set SANDBOX $::project(sandbox) ::practcl::target deps { triggers {tcltk script-packages script-pkgindex} filename [file join $CWD deps] } ::practcl::target cstruct { } ::practcl::target autoconf { triggers {script-packages script-pkgindex cstruct} } ::practcl::target tcltk { depends deps triggers {script-packages script-pkgindex toadkit.rc} } ::practcl::target basekit { depends {deps tcltk toadkit.rc} triggers {} filename [file join $CWD tclkit_bare$::project(EXEEXT)] } ::practcl::target packages { depends {deps tcltk} } ::practcl::target script-packages { depends deps triggers {script-pkgindex} } ::practcl::target script-pkgindex { depends script-packages filename [file join $CWD build script-pkgIndex.tcl] } ::practcl::target toadkit.rc { filename [file join $CWD build toadkit.rc] depends tcltk } ::practcl::target distclean {} switch [lindex $argv 0] { pre - deps { ::practcl::trigger deps tcltk script-packages script-pkgindex } os { puts "OS: [practcl::os]" parray ::project exit 0 } wrap { ::practcl::depends basekit } all { # Auto detect missing bits foreach {item obj} $::make_objects { if {[$obj check]} { $obj trigger } } } package { ::practcl::trigger packages } default { ::practcl::trigger {*}$argv } } parray make set ::CWD [pwd] ::practcl::tclkit create BASEKIT {} BASEKIT source [file join $SRCPATH basekit.ini] if {$make(distclean)} { # Clean all source code back to it's pristine state from fossil foreach item [BASEKIT link list package] { $item go set projdir [$item define get localsrcdir] if {$projdir ne {} && [file exists $projdir]} { fossil $projdir clean -force } } } file mkdir [file join $CWD build] if {$make(deps)} { file mkdir $::project(download) foreach item [BASEKIT link core.library] { $item unpack } foreach item [BASEKIT link package] { $item unpack } cd $::project(srcdir) catch {doexec autoconf -f} cd $CWD set fout [open $target(deps) w] puts $fout [clock format [clock seconds]] close $fout } if {$make(tcltk)} { ### # Download our required packages ### set tcl_config_opts {} set tk_config_opts {} switch [::practcl::os] { windows { } linux { lappend tk_config_opts --enable-xft=no --enable-xss=no } macosx { lappend tcl_config_opts --enable-corefoundation=yes --enable-framework=no lappend tk_config_opts --enable-aqua=yes } } lappend tcl_config_opts --with-tzdata --prefix [BASEKIT define get prefix] BASEKIT.TCLCORE define set config_opts $tcl_config_opts BASEKIT.TCLCORE go set _TclSrcDir [BASEKIT.TCLCORE define get localsrcdir] BASEKIT define set tclsrcdir $_TclSrcDir lappend tk_config_opts --with-tcl=$_TclSrcDir BASEKIT.TKCORE define set config_opts $tk_config_opts BASEKIT.TCLCORE compile BASEKIT.TKCORE compile } if {$make(script-packages)} { foreach item [BASEKIT link list package] { if {[string is true -strict [$item define get preload]]} { $item install } } } if {$make(script-pkgindex)} { set fout [open $target(script-pkgindex) w] puts $fout "### Built [clock format [clock seconds]]" foreach path [list \ [file join $::project(sandbox) tcllib modules] \ [file join $::project(sandbox) taolib modules] \ [file join $::project(sandbox) odielib modules] \ [file join $::project(sandbox) odielib] \ [file join $::project(sandbox) sqlite] \ [file join $::project(srcdir) modules] ] { puts $fout [list set dir $path] if {[file exists [file join $path pkgIndex.tcl]]} { puts $fout [list source [file join $path pkgIndex.tcl]] } else { puts $fout [::practcl::pkgindex_path $path] } } close $fout } if {$make(cstruct)} { ::practcl::library create IRMLIB {} source $::target(script-pkgindex) IRMLIB source [file join $SRCPATH library.ini] ### # Bootstrap our pkgindex ### set shlib [IRMLIB shared_library] IRMLIB define set shared_library $shlib IRMLIB implement $CWD set fout [open pkgIndex.tcl w] puts $fout " # # Tcl package index file # " set VERSION [IRMLIB define get pkg_vers] puts $fout [IRMLIB package-ifneeded odielib odielibc odielibtk] puts $fout [string map [list @VERSION@ $VERSION] {package ifneeded irm::simdoc_seed @VERSION@ [list source [file join $dir irmdoc.tcl]]}] close $fout } if {$make(toadkit.rc)} { array set ::TCL [BASEKIT.TCLCORE config.sh] array set ::TK [BASEKIT.TKCORE config.sh] array set ::KIT [dict merge [array get ::TK] [array get ::TCL] [array get ::project]] ### # Add/synthesize bits ### set ::KIT(LIBS) {} set ::KIT(defs) $::TK(defs) set fout [open $::target(toadkit.rc) w] puts $fout "array set ::TCL \{" foreach {field value} [lsort -stride 2 [array get ::TCL]] { puts $fout " [list $field $value]" } puts $fout "\}" puts $fout "array set ::TK \{" foreach {field value} [lsort -stride 2 [array get ::TK]] { puts $fout " [list $field $value]" } puts $fout "\}" puts $fout "array set ::TARGET \{" foreach {field value} [lsort -stride 2 [array get ::TARGET]] { puts $fout " [list $field $value]" } puts $fout "\}" puts $fout "array set ::KIT \{" foreach {field value} [lsort -stride 2 [array get ::KIT]] { puts $fout " [list $field $value]" } puts $fout "\}" close $fout } if {$make(basekit)} { if {![info exists ::TCL]} { source $::target(toadkit.rc) } BASEKIT generate-static-tclsh $target(basekit) [array get ::TCL] [array get ::TK] [array get ::KIT] } if {[lindex $argv 0] eq "package"} { foreach item [lrange $argv 1 end] { PKG.$item install } } elseif {$make(packages)} { foreach item [BASEKIT link list package] { $item install } } if {[lindex $argv 0] eq "wrap"} { BASEKIT wrap $CWD {*}[lrange $argv 1 end] }