'''Finding out tclConfig.sh''' presents various methods for determining that path of [tclConfig.sh] in a script. ---- [DGP]: Let's put the correct solution first: ====== package require Tcl 8.5 set d [::tcl::pkgconfig get libdir,install] puts [file join $d tclConfig.sh] exit ====== For the large number of people not yet using Tcl 8.5, continue... ---- [Googie]: My first candidate is following code: ====== foreach d [concat [ list $tcl_library [lindex $tcl_pkgPath 0]] $auto_path [ list [file dirname $tcl_library] [ file dirname [lindex $tcl_pkgPath 0]] [ file dirname [file dirname $tcl_library]] [ file dirname [file dirname [lindex $tcl_pkgPath 0]]] [ file dirname [file dirname [file dirname $tcl_library]]] [ file dirname [file dirname [ file dirname [lindex $tcl_pkgPath 0]]]]]] { if {[file exists $d/tclConfig.sh]} { puts $d/tclConfig.sh exit } } puts none ====== We can put it into the one Tcl script file and execute from a shell to get info, if we can find tclConfig.sh (returns path pointing to it) or we can't (returns `none`). I use few levels of `[file dirname]` for `$tcl_library` and `$tcl_pkgPath` because of some problems on MacOS (tclConfig.sh is places few levels upper than $tcl_library). [BR]: What is the significance of the order of directories? And why are you looking into $auto_path and $tcl_pkgPath? The only interesting member of those should be $tcl_library, right? The other entries in $auto_path and $tcl_pkgPath would point to other versions of Tcl at the most, I think, and if there is a tclConfig.sh in those that would counter-productive. So I'd rather do: ====== proc tclConfigFile {} { set d [info library] set f $d/tclConfig.sh if {[file exists $f]} {return $f} set d [file dirname $d] set f $d/tclConfig.sh if {[file exists $f]} {return $f} set d [file dirname $d] set f $d/tclConfig.sh if {[file exists $f]} {return $f} set d [file dirname $d] set f $d/tclConfig.sh if {[file exists $f]} {return $f} error "tclConfig.sh not found" } ====== <> Package | Porting