Purpose: to contain discussion relating to an installation directory structure that is recommended for people writing tcl extensions or applications.

LV Jump right in and add info as you see needed:


By default, extensions should use two main groups of locations for installing things, one for architecture-independent files, and one for architecture-dependent files.

--prefix specifies the location of the architecture-independent files (e.g. Tcl scripts, header files, documentation) and is conventionally /usr/local by default. Beneath this location, the following places are usually defined:

include
Place to put header file(s) needed when writing code against a library.
lib
Location where Tcl-only extensions are installed.
lib/extension-version.level
Location for pkgIndex.tcl files, tcl files, etc.
bin
Place to install Tcl-only applications.
man
Place to install nroff manual pages.
   '''share''': Place to install miscellaneous other files, such as HTML pages.

--exec-prefix specifies the location of architecture-dependent files (binary extensions, etc.)

lib
Location where binary extensions and their pkgIndex.tcl are installed.
lib/extension-version.level
Location for pkgIndex.tcl files, .so/.dll files, static archives (.a, .lib), etc.
bin
Location where binary applications are installed.

Note that the --exec-prefix defaults to the same value as --prefix


jenglish I find it works better to put the entire package runtime in a sibling directory of info library. This is usually the same as ${libdir}, but not always.

Splitting up architecture-dependant (e.g. shared libraries) and architecture-independant (e.g., scripts) parts makes it more difficult for the former to locate the latter.


It is the eternal difficulty of keeping parallel versions in sync versus keeping a single copy of sharable code and a binary for each platform.


What are your thoughts about installed extensions having version numbers in their directory names?

Some people use multiple versions of an extension to keep from having to relink compiled language based programs. Other people see no reason to distribute anything more than one version and just expect people to install things into seperate trees if parallel versions need to be maintained.


What about demos? I would prefer to see demo executables be installed in $prefix/bin, instead of the current practice of some extensions of putting them into $prefix/lib/extension$version.$level/demos or whatever .


CL noted in the comp.lang.tcl newsgroup on the problem of where to put config files: What a mess. Someone ought to go off for a few years, and create a useful solution to such common and stupid deployment problems. Maybe it should be called TclKit, or perhaps called that, but renamed to StarKit. Just think if it were portable, too! The masses would re- joice.

to which BBH replied: Amen, Brother Laird!

(NB. A Starkit is a single file per app that contains all configuration, source, binaries, etc.) Installation is by copying, deinstallation by deleting.