Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Comment: | Practcl improvements: Better logging API. Local prefs file now affects behavior. Overhaul of how packages loaded to the local environment are dealt with. |
---|---|
Timelines: | family | ancestors | descendants | both | hypnotoad |
Files: | files | file ages | folders |
SHA3-256: |
54d2027e5af021e7057a755e2f59ee8b |
User & Date: | tne 2017-11-04 09:26:16 |
2017-11-04
| ||
09:50 | Practcl: Reinstated the update method for projects check-in: 2ee4180d9c user: tne tags: hypnotoad | |
09:26 | Practcl improvements: Better logging API. Local prefs file now affects behavior. Overhaul of how packages loaded to the local environment are dealt with. check-in: 54d2027e5a user: tne tags: hypnotoad | |
05:58 | New version of practcl. This version eliminates the separate family of classes for "tool" vs. "subproject". Now tools are subprojects of ::practcl::LOCAL, but environment interactions are handled through a separate env-* family of methods that track with the classes independently of the normal build methods. All tools inhabit the same global namespace (::practcl::OBJECT). Tools are installed to the prefix specified by the prefix define for ::practcl::LOCAL check-in: c433cbd5e9 user: tne tags: hypnotoad | |
Changes to modules/practcl/practcl.tcl.
︙ | ︙ | |||
339 340 341 342 343 344 345 | } default { } } dict set result userhome $userhome # Load user preferences if {[file exists [file join $userhome practcl.rc]]} { | | > > > | 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 | } default { } } dict set result userhome $userhome # Load user preferences if {[file exists [file join $userhome practcl.rc]]} { set dat [::practcl::read_rc_file [file join $userhome practcl.rc]] foreach {f v} $dat { dict set result $f $v } } if {![dict exists $result prefix]} { dict set result prefix $userhome } # Create a default path for the teapot if {![dict exists $result teapot]} { |
︙ | ︙ | |||
445 446 447 448 449 450 451 | # Try to load a package, and failing that # retrieve tcllib proc ::practcl::tcllib_require {pkg args} { # Try to load the package from the local environment if {[catch [list ::package require $pkg {*}$args] err]==0} { return $err } | | | 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 | # Try to load a package, and failing that # retrieve tcllib proc ::practcl::tcllib_require {pkg args} { # Try to load the package from the local environment if {[catch [list ::package require $pkg {*}$args] err]==0} { return $err } ::practcl::LOCAL tool tcllib env-load uplevel #0 [list ::package require $pkg {*}$args] } namespace eval ::practcl::platform {} proc ::practcl::platform::tcl_core_options {os} { ### |
︙ | ︙ | |||
733 734 735 736 737 738 739 | default { ::practcl::cputs output "# END $note" } } return $output } | < | 736 737 738 739 740 741 742 743 744 745 746 747 748 749 | default { ::practcl::cputs output "# END $note" } } return $output } proc ::practcl::de_shell {data} { set values {} foreach flag {DEFS TCL_DEFS TK_DEFS} { if {[dict exists $data $flag]} { #set value {} #foreach item [dict get $data $flag] { # append value " " [string map {{ } {\ }} $item] |
︙ | ︙ | |||
799 800 801 802 803 804 805 | ### # Bits stolen from fileutil ### proc ::practcl::cat fname { if {![file exists $fname]} { return } | | | | > > > > > > > > > > > > > | 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 | ### # Bits stolen from fileutil ### proc ::practcl::cat fname { if {![file exists $fname]} { return } set fin [open $fname r] set data [read $fin] close $fin return $data } proc ::practcl::log {fname comment} { set fname [file normalize $fname] if {[info exists ::practcl::logchan($fname)]} { set fout $::practcl::logchan($fname) after cancel $::practcl::logevent($fname) } else { set fout [open $fname a] } puts $fout $comment # Defer close until idle set ::practcl::logevent($fname) [after idle "close $fout ; unset ::practcl::logchan($fname)"] } proc ::practcl::file_lexnormalize {sp} { set spx [file split $sp] # Resolution of embedded relative modifiers (., and ..). if { |
︙ | ︙ | |||
1531 1532 1533 1534 1535 1536 1537 | append defs " -DPACKAGE_NAME=\"${name}\" -DPACKAGE_VERSION=\"${version}\"" append defs " -DPACKAGE_TARNAME=\"${name}\" -DPACKAGE_STRING=\"${name}\x5c\x20${version}\"" return $defs } method critcl args { if {![info exists critcl]} { | | | | | 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 | append defs " -DPACKAGE_NAME=\"${name}\" -DPACKAGE_VERSION=\"${version}\"" append defs " -DPACKAGE_TARNAME=\"${name}\" -DPACKAGE_STRING=\"${name}\x5c\x20${version}\"" return $defs } method critcl args { if {![info exists critcl]} { ::practcl::LOCAL tool critcl env-load set critcl [file join [::practcl::LOCAL tool critcl define get srcdir] main.tcl } set srcdir [my SourceRoot] set PWD [pwd] cd $srcdir ::practcl::dotclexec $critcl {*}$args cd $PWD } method NmakeOpts {} { set opts {} set builddir [file normalize [my define get builddir]] |
︙ | ︙ | |||
1576 1577 1578 1579 1580 1581 1582 | } else { set PREFIX [my <project> define get prefix] } if {[my <project> define get CONFIG_SITE] != {}} { lappend opts --host=[my <project> define get HOST] } lappend opts --with-tclsh=[info nameofexecutable] | > | | | | | | | | > > > > > > | 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 | } else { set PREFIX [my <project> define get prefix] } if {[my <project> define get CONFIG_SITE] != {}} { lappend opts --host=[my <project> define get HOST] } lappend opts --with-tclsh=[info nameofexecutable] if {![my <project> define get LOCAL 0]} { set obj [my <project> tclcore] if {$obj ne {}} { lappend opts --with-tcl=[::practcl::file_relative [file normalize $builddir] [$obj define get builddir]] } if {[my define get tk 0]} { set obj [my <project> tkcore] if {$obj ne {}} { lappend opts --with-tk=[::practcl::file_relative [file normalize $builddir] [$obj define get builddir]] } } } else { lappend opts --with-tcl=[file join $PREFIX lib] if {[my define get tk 0]} { lappend opts --with-tk=[file join $PREFIX lib] } } lappend opts {*}[my define get config_opts] if {![regexp -- "--prefix" $opts]} { lappend opts --prefix=$PREFIX --exec-prefix=$PREFIX } if {[my define get debug 0]} { |
︙ | ︙ | |||
1923 1924 1925 1926 1927 1928 1929 | } ### # Produce a static executable ### method build-tclsh {outfile PROJECT} { puts " BUILDING STATIC TCLSH " | | | | 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 | } ### # Produce a static executable ### method build-tclsh {outfile PROJECT} { puts " BUILDING STATIC TCLSH " set TCLOBJ [$PROJECT tclcore] ::practcl::toolset select $TCLOBJ set PKG_OBJS {} foreach item [$PROJECT link list core.library] { if {[string is true [$item define get static]]} { lappend PKG_OBJS $item } } foreach item [$PROJECT link list package] { if {[string is true [$item define get static]]} { lappend PKG_OBJS $item } } array set TCL [$TCLOBJ config.sh] set TKOBJ [$PROJECT tkcore] if {[info command $TKOBJ] eq {}} { set TKOBJ ::noop $PROJECT define set static_tk 0 } else { ::practcl::toolset select $TKOBJ array set TK [$TKOBJ config.sh] set do_tk [$TKOBJ define get static] |
︙ | ︙ | |||
3731 3732 3733 3734 3735 3736 3737 | lappend errs [dict get $errdat -errorinfo] } else { lappend errs $errdat } } } if {[llength $errs]} { | | | < | | | | < > | 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 | lappend errs [dict get $errdat -errorinfo] } else { lappend errs $errdat } } } if {[llength $errs]} { set logfile [file join $::CWD practcl.log] ::practcl::log $logfile "*** ERRORS ***" foreach {item trace} $errs { ::practcl::log $logfile "###\n# ERROR\n###\n$item" ::practcl::log $logfile "###\n# TRACE\n###\n$trace" } ::practcl::log $logfile "*** DEBUG INFO ***" ::practcl::log $logfile $::DEBUG_INFO puts stderr "Errors saved to $logfile" exit 1 } ::practcl::debug [list [self] [self method] [self class] -- [my define get filename] [info object class [self]]] set filename [my define get output_c] if {$filename eq {}} { ::practcl::debug [list /[self] [self method] [self class]] return |
︙ | ︙ | |||
4186 4187 4188 4189 4190 4191 4192 | lappend errs [dict get $errdat -errorinfo] } else { lappend errs $errdat } } } if {[llength $errs]} { | | | < | | | | < > | 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 | lappend errs [dict get $errdat -errorinfo] } else { lappend errs $errdat } } } if {[llength $errs]} { set logfile [file join $::CWD practcl.log] ::practcl::log $logfile "*** ERRORS ***" foreach {item trace} $errs { ::practcl::log $logfile "###\n# ERROR\n###$item" ::practcl::log $logfile "###\n# TRACE\n###$trace" } ::practcl::log $logfile "*** DEBUG INFO ***" ::practcl::log $logfile $::DEBUG_INFO puts stderr "Errors saved to $logfile" exit 1 } set cout [open [file join $path [my define get output_c]] w] puts $cout [subst {/* ** This file is generated by the [info script] script ** any changes will be overwritten the next time it is run */}] |
︙ | ︙ | |||
4568 4569 4570 4571 4572 4573 4574 | if {[file exists $zipfs]} { $TCLOBJ define set tip_430 1 my define set tip_430 1 } else { # The Tclconfig project maintains a mirror of the version # released with the Tcl core my define set tip_430 0 | | | 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 | if {[file exists $zipfs]} { $TCLOBJ define set tip_430 1 my define set tip_430 1 } else { # The Tclconfig project maintains a mirror of the version # released with the Tcl core my define set tip_430 0 ::practcl::LOCAL tool odie unpack set COMPATSRCROOT [::practcl::LOCAL tool odie define get srcdir] my add [file join $COMPATSRCROOT compat zipfs zipfs.tcl] } my define add include_dir [file join $TCLSRCDIR generic] my define add include_dir [file join $TCLSRCDIR $PLATFORM_SRC_DIR] # This file will implement TCL_LOCAL_APPINIT and TCL_LOCAL_MAIN_HOOK |
︙ | ︙ | |||
4951 4952 4953 4954 4955 4956 4957 | return true } return false } # Check for markers in the metadata method claim_object obj { | < | 4971 4972 4973 4974 4975 4976 4977 4978 4979 4980 4981 4982 4983 4984 | return true } return false } # Check for markers in the metadata method claim_object obj { set path [$obj define get srcdir] if {[my claim_path $path]} { return true } if {[$obj define get fossil_url] ne {}} { return true } |
︙ | ︙ | |||
5165 5166 5167 5168 5169 5170 5171 | set LibraryRoot [file join [my define get srcdir] [my define get module_root modules]] if {[file exists $LibraryRoot] && $LibraryRoot ni $::auto_path} { set ::auto_path [linsert $::auto_path 0 $LibraryRoot] } } method env-present {} { | > | | 5184 5185 5186 5187 5188 5189 5190 5191 5192 5193 5194 5195 5196 5197 5198 5199 | set LibraryRoot [file join [my define get srcdir] [my define get module_root modules]] if {[file exists $LibraryRoot] && $LibraryRoot ni $::auto_path} { set ::auto_path [linsert $::auto_path 0 $LibraryRoot] } } method env-present {} { set path [my define get srcdir] return [file exists $path] } method linktype {} { return {subordinate package source} } } |
︙ | ︙ | |||
5216 5217 5218 5219 5220 5221 5222 | oo::class create ::practcl::subproject.kettle { superclass ::practcl::subproject method kettle {path args} { my variable kettle if {![info exists kettle]} { | | | | | > > > > > > > > > > > > | 5236 5237 5238 5239 5240 5241 5242 5243 5244 5245 5246 5247 5248 5249 5250 5251 5252 5253 5254 5255 5256 5257 5258 5259 5260 5261 5262 5263 5264 5265 5266 5267 5268 5269 5270 5271 5272 5273 5274 5275 5276 5277 5278 5279 5280 5281 5282 5283 5284 5285 5286 5287 5288 5289 5290 5291 5292 5293 5294 5295 5296 5297 5298 5299 5300 5301 | oo::class create ::practcl::subproject.kettle { superclass ::practcl::subproject method kettle {path args} { my variable kettle if {![info exists kettle]} { ::practcl::LOCAL tool kettle env-load set kettle [file join [::practcl::LOCAL tool kettle define get srcdir] kettle] } set srcdir [my SourceRoot] ::practcl::dotclexec $kettle -f [file join $srcdir build.tcl] {*}$args } method install DEST { my kettle reinstall --prefix $DEST } } oo::class create ::practcl::subproject.critcl { superclass ::practcl::subproject method install DEST { my critcl -pkg [my define get name] set srcdir [my SourceRoot] ::practcl::copyDir [file join $srcdir [my define get name]] [file join $DEST lib [my define get name]] } } oo::class create ::practcl::subproject.sak { superclass ::practcl::subproject method env-bootstrap {} { set LibraryRoot [file join [my define get srcdir] [my define get module_root modules]] if {[file exists $LibraryRoot] && $LibraryRoot ni $::auto_path} { set ::auto_path [linsert $::auto_path 0 $LibraryRoot] } } method env-install {} { ### # Handle teapot installs ### set pkg [my define get pkg_name [my define get name]] my unpack set prefix [my <project> define get prefix [file normalize [file join ~ tcl]]] set srcdir [my define get srcdir] ::practcl::dotclexec [file join $srcdir installer.tcl] \ -apps -app-path [file join $prefix apps] \ -html -html-path [file join $prefix doc html $pkg] \ -pkg-path [file join $prefix lib $pkg] \ -no-nroff -no-wait -no-gui } method env-present {} { set path [my define get srcdir] return [file exists $path] } method install DEST { ### # Handle teapot installs ### set pkg [my define get pkg_name [my define get name]] my unpack |
︙ | ︙ | |||
5474 5475 5476 5477 5478 5479 5480 | ::practcl::toolset select [self] set srcdir [file normalize [my define get srcdir]] set builddir [file normalize [my define get builddir]] file mkdir $builddir if {[my define get USEMSVC 0]} { return } | | | | | 5506 5507 5508 5509 5510 5511 5512 5513 5514 5515 5516 5517 5518 5519 5520 5521 5522 5523 5524 5525 5526 | ::practcl::toolset select [self] set srcdir [file normalize [my define get srcdir]] set builddir [file normalize [my define get builddir]] file mkdir $builddir if {[my define get USEMSVC 0]} { return } if {[file exists [file join $builddir autoconf.log]]} { file delete [file join $builddir autoconf.log] } if {![file exists [file join $srcdir configure]]} { if {[file exists [file join $srcdir autogen.sh]]} { cd $srcdir catch {exec sh autogen.sh >>& [file join $builddir autoconf.log]} cd $::CWD } } if {![file exists [file join $srcdir tclconfig install-sh]]} { # ensure we have tclconfig with all of the trimmings set teapath {} if {[file exists [file join $srcdir .. tclconfig install-sh]]} { |
︙ | ︙ | |||
5503 5504 5505 5506 5507 5508 5509 5510 5511 5512 5513 | if {[catch {file link -symbolic [file join $srcdir tclconfig] $teapath}]} { ::practcl::copyDir [file join $teapath] [file join $srcdir tclconfig] } } set opts [my ConfigureOpts] ::practcl::debug [list PKG [my define get name] CONFIGURE {*}$opts] cd $builddir if {[my <project> define get CONFIG_SITE] ne {}} { set ::env(CONFIG_SITE) [my <project> define get CONFIG_SITE] } | > | | 5535 5536 5537 5538 5539 5540 5541 5542 5543 5544 5545 5546 5547 5548 5549 5550 5551 5552 5553 5554 | if {[catch {file link -symbolic [file join $srcdir tclconfig] $teapath}]} { ::practcl::copyDir [file join $teapath] [file join $srcdir tclconfig] } } set opts [my ConfigureOpts] ::practcl::debug [list PKG [my define get name] CONFIGURE {*}$opts] ::practcl::log [file join $builddir autoconf.log] [list CONFIGURE {*}$opts] cd $builddir if {[my <project> define get CONFIG_SITE] ne {}} { set ::env(CONFIG_SITE) [my <project> define get CONFIG_SITE] } catch {exec sh [file join $srcdir configure] {*}$opts >>& [file join $builddir autoconf.log]} cd $::CWD } method install DEST { set PWD [pwd] set PREFIX [my <project> define get prefix] ### |
︙ | ︙ | |||
5624 5625 5626 5627 5628 5629 5630 | method Configure {} { if {[my define get USEMSVC 0]} { return } set opts [my ConfigureOpts] set builddir [file normalize [my define get builddir]] set localsrcdir [file normalize [my define get localsrcdir]] | | | 5657 5658 5659 5660 5661 5662 5663 5664 5665 5666 5667 5668 5669 5670 5671 | method Configure {} { if {[my define get USEMSVC 0]} { return } set opts [my ConfigureOpts] set builddir [file normalize [my define get builddir]] set localsrcdir [file normalize [my define get localsrcdir]] ::practcl::debug [self] CONFIGURE {*}$opts cd $builddir if {[my <project> define get CONFIG_SITE] ne {}} { set ::env(CONFIG_SITE) [my <project> define get CONFIG_SITE] } catch {exec sh [file join $localsrcdir configure] {*}$opts >& [file join $builddir practcl.log]} } |
︙ | ︙ | |||
5648 5649 5650 5651 5652 5653 5654 | if {![regexp -- "--prefix" $opts]} { lappend opts --prefix=$PREFIX } #--exec_prefix=$PREFIX lappend opts --disable-shared return $opts } | | > > > > > | < | 5681 5682 5683 5684 5685 5686 5687 5688 5689 5690 5691 5692 5693 5694 5695 5696 5697 5698 5699 5700 5701 5702 5703 | if {![regexp -- "--prefix" $opts]} { lappend opts --prefix=$PREFIX } #--exec_prefix=$PREFIX lappend opts --disable-shared return $opts } method env-bootstrap {} {} method env-present {} { set PREFIX [my <project> define get prefix] set name [my define get name] set fname [file join $PREFIX lib ${name}Config.sh] return [file exists $fname] } method env-install {} { my unpack set os [::practcl::local_os] switch [my define get name] { tcl { set options [::practcl::platform::tcl_core_options $os] |
︙ | ︙ | |||
5728 5729 5730 5731 5732 5733 5734 | ### # START: class tool.tcl ### ### # Create an object to represent the local environment ### set ::practcl::MAIN ::practcl::LOCAL | | < | 5765 5766 5767 5768 5769 5770 5771 5772 5773 5774 5775 5776 5777 5778 5779 5780 5781 5782 5783 | ### # START: class tool.tcl ### ### # Create an object to represent the local environment ### set ::practcl::MAIN ::practcl::LOCAL # Defer the creation of the ::practcl::LOCAL object until it is called # in order to allow packages to set ::auto_index(::practcl::LOCAL) { ::practcl::project create ::practcl::LOCAL ::practcl::LOCAL define set [::practcl::local_os] ::practcl::LOCAL define set LOCAL 1 # Until something better comes along, use ::practcl::LOCAL # as our main project # Add tclconfig as a project of record ::practcl::LOCAL add_tool tclconfig { name tclconfig tag practcl class subproject.source fossil_url http://core.tcl.tk/tclconfig |
︙ | ︙ |
Changes to modules/practcl/src/buildutil.tcl.
︙ | ︙ | |||
240 241 242 243 244 245 246 | } default { } } dict set result userhome $userhome # Load user preferences if {[file exists [file join $userhome practcl.rc]]} { | | > > > | 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 | } default { } } dict set result userhome $userhome # Load user preferences if {[file exists [file join $userhome practcl.rc]]} { set dat [::practcl::read_rc_file [file join $userhome practcl.rc]] foreach {f v} $dat { dict set result $f $v } } if {![dict exists $result prefix]} { dict set result prefix $userhome } # Create a default path for the teapot if {![dict exists $result teapot]} { |
︙ | ︙ | |||
346 347 348 349 350 351 352 | # Try to load a package, and failing that # retrieve tcllib proc ::practcl::tcllib_require {pkg args} { # Try to load the package from the local environment if {[catch [list ::package require $pkg {*}$args] err]==0} { return $err } | | | 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 | # Try to load a package, and failing that # retrieve tcllib proc ::practcl::tcllib_require {pkg args} { # Try to load the package from the local environment if {[catch [list ::package require $pkg {*}$args] err]==0} { return $err } ::practcl::LOCAL tool tcllib env-load uplevel #0 [list ::package require $pkg {*}$args] } namespace eval ::practcl::platform {} proc ::practcl::platform::tcl_core_options {os} { ### |
︙ | ︙ | |||
633 634 635 636 637 638 639 | } default { ::practcl::cputs output "# END $note" } } return $output } | < | 636 637 638 639 640 641 642 643 644 645 646 647 648 649 | } default { ::practcl::cputs output "# END $note" } } return $output } proc ::practcl::de_shell {data} { set values {} foreach flag {DEFS TCL_DEFS TK_DEFS} { if {[dict exists $data $flag]} { #set value {} #foreach item [dict get $data $flag] { |
︙ | ︙ |
Changes to modules/practcl/src/class/distro/fossil.tcl.
︙ | ︙ | |||
112 113 114 115 116 117 118 | return true } return false } # Check for markers in the metadata method claim_object obj { | < | 112 113 114 115 116 117 118 119 120 121 122 123 124 125 | return true } return false } # Check for markers in the metadata method claim_object obj { set path [$obj define get srcdir] if {[my claim_path $path]} { return true } if {[$obj define get fossil_url] ne {}} { return true } |
︙ | ︙ |
Changes to modules/practcl/src/class/module.tcl.
︙ | ︙ | |||
195 196 197 198 199 200 201 | lappend errs [dict get $errdat -errorinfo] } else { lappend errs $errdat } } } if {[llength $errs]} { | | | < | | | | < > | 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 | lappend errs [dict get $errdat -errorinfo] } else { lappend errs $errdat } } } if {[llength $errs]} { set logfile [file join $::CWD practcl.log] ::practcl::log $logfile "*** ERRORS ***" foreach {item trace} $errs { ::practcl::log $logfile "###\n# ERROR\n###\n$item" ::practcl::log $logfile "###\n# TRACE\n###\n$trace" } ::practcl::log $logfile "*** DEBUG INFO ***" ::practcl::log $logfile $::DEBUG_INFO puts stderr "Errors saved to $logfile" exit 1 } ::practcl::debug [list [self] [self method] [self class] -- [my define get filename] [info object class [self]]] set filename [my define get output_c] if {$filename eq {}} { ::practcl::debug [list /[self] [self method] [self class]] return |
︙ | ︙ |
Changes to modules/practcl/src/class/project/library.tcl.
︙ | ︙ | |||
203 204 205 206 207 208 209 | lappend errs [dict get $errdat -errorinfo] } else { lappend errs $errdat } } } if {[llength $errs]} { | | | < | | | | < > | 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 | lappend errs [dict get $errdat -errorinfo] } else { lappend errs $errdat } } } if {[llength $errs]} { set logfile [file join $::CWD practcl.log] ::practcl::log $logfile "*** ERRORS ***" foreach {item trace} $errs { ::practcl::log $logfile "###\n# ERROR\n###$item" ::practcl::log $logfile "###\n# TRACE\n###$trace" } ::practcl::log $logfile "*** DEBUG INFO ***" ::practcl::log $logfile $::DEBUG_INFO puts stderr "Errors saved to $logfile" exit 1 } set cout [open [file join $path [my define get output_c]] w] puts $cout [subst {/* ** This file is generated by the [info script] script ** any changes will be overwritten the next time it is run */}] |
︙ | ︙ |
Changes to modules/practcl/src/class/project/tclkit.tcl.
︙ | ︙ | |||
268 269 270 271 272 273 274 | if {[file exists $zipfs]} { $TCLOBJ define set tip_430 1 my define set tip_430 1 } else { # The Tclconfig project maintains a mirror of the version # released with the Tcl core my define set tip_430 0 | | | 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 | if {[file exists $zipfs]} { $TCLOBJ define set tip_430 1 my define set tip_430 1 } else { # The Tclconfig project maintains a mirror of the version # released with the Tcl core my define set tip_430 0 ::practcl::LOCAL tool odie unpack set COMPATSRCROOT [::practcl::LOCAL tool odie define get srcdir] my add [file join $COMPATSRCROOT compat zipfs zipfs.tcl] } my define add include_dir [file join $TCLSRCDIR generic] my define add include_dir [file join $TCLSRCDIR $PLATFORM_SRC_DIR] # This file will implement TCL_LOCAL_APPINIT and TCL_LOCAL_MAIN_HOOK |
︙ | ︙ |
Changes to modules/practcl/src/class/subproject/baseclass.tcl.
︙ | ︙ | |||
120 121 122 123 124 125 126 | set LibraryRoot [file join [my define get srcdir] [my define get module_root modules]] if {[file exists $LibraryRoot] && $LibraryRoot ni $::auto_path} { set ::auto_path [linsert $::auto_path 0 $LibraryRoot] } } method env-present {} { | > | | 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 | set LibraryRoot [file join [my define get srcdir] [my define get module_root modules]] if {[file exists $LibraryRoot] && $LibraryRoot ni $::auto_path} { set ::auto_path [linsert $::auto_path 0 $LibraryRoot] } } method env-present {} { set path [my define get srcdir] return [file exists $path] } method linktype {} { return {subordinate package source} } } |
︙ | ︙ | |||
171 172 173 174 175 176 177 | oo::class create ::practcl::subproject.kettle { superclass ::practcl::subproject method kettle {path args} { my variable kettle if {![info exists kettle]} { | | | | | > > > > > > > > > > > > | 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 | oo::class create ::practcl::subproject.kettle { superclass ::practcl::subproject method kettle {path args} { my variable kettle if {![info exists kettle]} { ::practcl::LOCAL tool kettle env-load set kettle [file join [::practcl::LOCAL tool kettle define get srcdir] kettle] } set srcdir [my SourceRoot] ::practcl::dotclexec $kettle -f [file join $srcdir build.tcl] {*}$args } method install DEST { my kettle reinstall --prefix $DEST } } oo::class create ::practcl::subproject.critcl { superclass ::practcl::subproject method install DEST { my critcl -pkg [my define get name] set srcdir [my SourceRoot] ::practcl::copyDir [file join $srcdir [my define get name]] [file join $DEST lib [my define get name]] } } oo::class create ::practcl::subproject.sak { superclass ::practcl::subproject method env-bootstrap {} { set LibraryRoot [file join [my define get srcdir] [my define get module_root modules]] if {[file exists $LibraryRoot] && $LibraryRoot ni $::auto_path} { set ::auto_path [linsert $::auto_path 0 $LibraryRoot] } } method env-install {} { ### # Handle teapot installs ### set pkg [my define get pkg_name [my define get name]] my unpack set prefix [my <project> define get prefix [file normalize [file join ~ tcl]]] set srcdir [my define get srcdir] ::practcl::dotclexec [file join $srcdir installer.tcl] \ -apps -app-path [file join $prefix apps] \ -html -html-path [file join $prefix doc html $pkg] \ -pkg-path [file join $prefix lib $pkg] \ -no-nroff -no-wait -no-gui } method env-present {} { set path [my define get srcdir] return [file exists $path] } method install DEST { ### # Handle teapot installs ### set pkg [my define get pkg_name [my define get name]] my unpack |
︙ | ︙ |
Changes to modules/practcl/src/class/subproject/binary.tcl.
︙ | ︙ | |||
190 191 192 193 194 195 196 | ::practcl::toolset select [self] set srcdir [file normalize [my define get srcdir]] set builddir [file normalize [my define get builddir]] file mkdir $builddir if {[my define get USEMSVC 0]} { return } | | | | | 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 | ::practcl::toolset select [self] set srcdir [file normalize [my define get srcdir]] set builddir [file normalize [my define get builddir]] file mkdir $builddir if {[my define get USEMSVC 0]} { return } if {[file exists [file join $builddir autoconf.log]]} { file delete [file join $builddir autoconf.log] } if {![file exists [file join $srcdir configure]]} { if {[file exists [file join $srcdir autogen.sh]]} { cd $srcdir catch {exec sh autogen.sh >>& [file join $builddir autoconf.log]} cd $::CWD } } if {![file exists [file join $srcdir tclconfig install-sh]]} { # ensure we have tclconfig with all of the trimmings set teapath {} if {[file exists [file join $srcdir .. tclconfig install-sh]]} { |
︙ | ︙ | |||
219 220 221 222 223 224 225 226 227 228 229 | if {[catch {file link -symbolic [file join $srcdir tclconfig] $teapath}]} { ::practcl::copyDir [file join $teapath] [file join $srcdir tclconfig] } } set opts [my ConfigureOpts] ::practcl::debug [list PKG [my define get name] CONFIGURE {*}$opts] cd $builddir if {[my <project> define get CONFIG_SITE] ne {}} { set ::env(CONFIG_SITE) [my <project> define get CONFIG_SITE] } | > | | 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 | if {[catch {file link -symbolic [file join $srcdir tclconfig] $teapath}]} { ::practcl::copyDir [file join $teapath] [file join $srcdir tclconfig] } } set opts [my ConfigureOpts] ::practcl::debug [list PKG [my define get name] CONFIGURE {*}$opts] ::practcl::log [file join $builddir autoconf.log] [list CONFIGURE {*}$opts] cd $builddir if {[my <project> define get CONFIG_SITE] ne {}} { set ::env(CONFIG_SITE) [my <project> define get CONFIG_SITE] } catch {exec sh [file join $srcdir configure] {*}$opts >>& [file join $builddir autoconf.log]} cd $::CWD } method install DEST { set PWD [pwd] set PREFIX [my <project> define get prefix] ### |
︙ | ︙ |
Changes to modules/practcl/src/class/subproject/core.tcl.
︙ | ︙ | |||
11 12 13 14 15 16 17 | method Configure {} { if {[my define get USEMSVC 0]} { return } set opts [my ConfigureOpts] set builddir [file normalize [my define get builddir]] set localsrcdir [file normalize [my define get localsrcdir]] | | | 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | method Configure {} { if {[my define get USEMSVC 0]} { return } set opts [my ConfigureOpts] set builddir [file normalize [my define get builddir]] set localsrcdir [file normalize [my define get localsrcdir]] ::practcl::debug [self] CONFIGURE {*}$opts cd $builddir if {[my <project> define get CONFIG_SITE] ne {}} { set ::env(CONFIG_SITE) [my <project> define get CONFIG_SITE] } catch {exec sh [file join $localsrcdir configure] {*}$opts >& [file join $builddir practcl.log]} } |
︙ | ︙ | |||
35 36 37 38 39 40 41 | if {![regexp -- "--prefix" $opts]} { lappend opts --prefix=$PREFIX } #--exec_prefix=$PREFIX lappend opts --disable-shared return $opts } | | > > > > > | < | 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | if {![regexp -- "--prefix" $opts]} { lappend opts --prefix=$PREFIX } #--exec_prefix=$PREFIX lappend opts --disable-shared return $opts } method env-bootstrap {} {} method env-present {} { set PREFIX [my <project> define get prefix] set name [my define get name] set fname [file join $PREFIX lib ${name}Config.sh] return [file exists $fname] } method env-install {} { my unpack set os [::practcl::local_os] switch [my define get name] { tcl { set options [::practcl::platform::tcl_core_options $os] |
︙ | ︙ |
Changes to modules/practcl/src/class/tool.tcl.
1 2 3 4 | ### # Create an object to represent the local environment ### set ::practcl::MAIN ::practcl::LOCAL | | < | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | ### # Create an object to represent the local environment ### set ::practcl::MAIN ::practcl::LOCAL # Defer the creation of the ::practcl::LOCAL object until it is called # in order to allow packages to set ::auto_index(::practcl::LOCAL) { ::practcl::project create ::practcl::LOCAL ::practcl::LOCAL define set [::practcl::local_os] ::practcl::LOCAL define set LOCAL 1 # Until something better comes along, use ::practcl::LOCAL # as our main project # Add tclconfig as a project of record ::practcl::LOCAL add_tool tclconfig { name tclconfig tag practcl class subproject.source fossil_url http://core.tcl.tk/tclconfig |
︙ | ︙ |
Changes to modules/practcl/src/class/toolset/baseclass.tcl.
︙ | ︙ | |||
91 92 93 94 95 96 97 | append defs " -DPACKAGE_NAME=\"${name}\" -DPACKAGE_VERSION=\"${version}\"" append defs " -DPACKAGE_TARNAME=\"${name}\" -DPACKAGE_STRING=\"${name}\x5c\x20${version}\"" return $defs } method critcl args { if {![info exists critcl]} { | | | | | 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | append defs " -DPACKAGE_NAME=\"${name}\" -DPACKAGE_VERSION=\"${version}\"" append defs " -DPACKAGE_TARNAME=\"${name}\" -DPACKAGE_STRING=\"${name}\x5c\x20${version}\"" return $defs } method critcl args { if {![info exists critcl]} { ::practcl::LOCAL tool critcl env-load set critcl [file join [::practcl::LOCAL tool critcl define get srcdir] main.tcl } set srcdir [my SourceRoot] set PWD [pwd] cd $srcdir ::practcl::dotclexec $critcl {*}$args cd $PWD } method NmakeOpts {} { set opts {} set builddir [file normalize [my define get builddir]] |
︙ | ︙ | |||
136 137 138 139 140 141 142 | } else { set PREFIX [my <project> define get prefix] } if {[my <project> define get CONFIG_SITE] != {}} { lappend opts --host=[my <project> define get HOST] } lappend opts --with-tclsh=[info nameofexecutable] | > | | | | | | | | > > > > > > | 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 162 163 164 | } else { set PREFIX [my <project> define get prefix] } if {[my <project> define get CONFIG_SITE] != {}} { lappend opts --host=[my <project> define get HOST] } lappend opts --with-tclsh=[info nameofexecutable] if {![my <project> define get LOCAL 0]} { set obj [my <project> tclcore] if {$obj ne {}} { lappend opts --with-tcl=[::practcl::file_relative [file normalize $builddir] [$obj define get builddir]] } if {[my define get tk 0]} { set obj [my <project> tkcore] if {$obj ne {}} { lappend opts --with-tk=[::practcl::file_relative [file normalize $builddir] [$obj define get builddir]] } } } else { lappend opts --with-tcl=[file join $PREFIX lib] if {[my define get tk 0]} { lappend opts --with-tk=[file join $PREFIX lib] } } lappend opts {*}[my define get config_opts] if {![regexp -- "--prefix" $opts]} { lappend opts --prefix=$PREFIX --exec-prefix=$PREFIX } if {[my define get debug 0]} { |
︙ | ︙ |
Changes to modules/practcl/src/class/toolset/gcc.tcl.
︙ | ︙ | |||
274 275 276 277 278 279 280 | } ### # Produce a static executable ### method build-tclsh {outfile PROJECT} { puts " BUILDING STATIC TCLSH " | | | | 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 | } ### # Produce a static executable ### method build-tclsh {outfile PROJECT} { puts " BUILDING STATIC TCLSH " set TCLOBJ [$PROJECT tclcore] ::practcl::toolset select $TCLOBJ set PKG_OBJS {} foreach item [$PROJECT link list core.library] { if {[string is true [$item define get static]]} { lappend PKG_OBJS $item } } foreach item [$PROJECT link list package] { if {[string is true [$item define get static]]} { lappend PKG_OBJS $item } } array set TCL [$TCLOBJ config.sh] set TKOBJ [$PROJECT tkcore] if {[info command $TKOBJ] eq {}} { set TKOBJ ::noop $PROJECT define set static_tk 0 } else { ::practcl::toolset select $TKOBJ array set TK [$TKOBJ config.sh] set do_tk [$TKOBJ define get static] |
︙ | ︙ |
Changes to modules/practcl/src/fileutil.tcl.
1 2 3 4 5 6 7 | ### # Bits stolen from fileutil ### proc ::practcl::cat fname { if {![file exists $fname]} { return } | | | | > > > > > > > > > > > > > | 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 | ### # Bits stolen from fileutil ### proc ::practcl::cat fname { if {![file exists $fname]} { return } set fin [open $fname r] set data [read $fin] close $fin return $data } proc ::practcl::log {fname comment} { set fname [file normalize $fname] if {[info exists ::practcl::logchan($fname)]} { set fout $::practcl::logchan($fname) after cancel $::practcl::logevent($fname) } else { set fout [open $fname a] } puts $fout $comment # Defer close until idle set ::practcl::logevent($fname) [after idle "close $fout ; unset ::practcl::logchan($fname)"] } proc ::practcl::file_lexnormalize {sp} { set spx [file split $sp] # Resolution of embedded relative modifiers (., and ..). if { |
︙ | ︙ |