1#!/usr/bin/env tclsh 2# 3# pkgreq.test -- 4# 5# Test loading of all tcl packages installed in /System/Library/Tcl 6# 7 8if {[lsearch [namespace children] ::tcltest] == -1} { 9 package require tcltest 2.2 10} 11 12if {[catch {tcltest::testConstraint notLoadable}]} { 13 tcltest::testConstraint notLoadable 0 14} 15tcltest::testConstraint req85 [expr {![catch {package present Tcl 8.5-}]}] 16tcltest::testConstraint req86 [expr {![catch {package present Tcl 8.6-}]}] 17 18proc constraint {pkg} { 19 # packages not intended for direct loading or known not to be present 20 if {[regexp {^(dom::c|page::((analysis|compiler|transform)::.*|(gen::peg|writer)::(me|mecpu)|(reader|util::norm)::(peg|lemon))|xotcl::.*::(ldap|.*gdbm)|(doctools::(toc|idx)|pt::peg)::(import|export)::.*)$} $pkg]} { 21 return notLoadable 22 } 23 # packages requiring tcl 8.5 or later 24 if {[regexp {^(chatwidget|canvas::(mvg|snap)|char|configuration|controlwidget|diagram(|::.*)|gpx|huddle|yaml|imap4|json(|::.*)|JSONRPC|namespacex|ntext|paths|pt::.*|rest|S3|sqlite3|struct::graph::op|tablelist_tile|tcl::randomseed|text::write|vfs::webdav|xsxp|xyplot)$} $pkg]} { 25 return req85 26 } 27 # packages requiring tcl 8.6 or later 28 if {[regexp {^(coroutine(|::auto)|menubar(|::.*)|tcl::(chan|transform)::.*)$} $pkg]} { 29 return req86 30 } 31 return {} 32} 33 34# get all package names 35set pkgs [exec find -L /System/Library/Tcl \ 36 ! -path "*/Tcl/[expr {[tcltest::testConstraint req85] ? "8.4" : "8.5"}]/*" \ 37 -name pkgIndex.tcl -print0 | \ 38 xargs -0 awk {/^[ \t]*package ifneeded/ && $3 !~ /^\$/ {print $3}} | \ 39 sort -fu] 40 41foreach pkg $pkgs { 42 tcltest::test pkgreq-$pkg "\[package require $pkg\]" \ 43 -constraints [constraint $pkg] -setup {interp create i} \ 44 -body {interp eval i "package require $pkg"} \ 45 -cleanup {interp delete i} -match regexp -result {^[\d\.]+$} 46} 47 48tcltest::cleanupTests 49