Tcl/Tk Image formats (TkImg) (Version 1.4 / September 2010) Jan Nijtmans, Andreas Kupries, Paul Obermeijer This file contains a collection of format handlers for the Tk photo image type, and a new image type, pixmaps. It can be used in combination with Tcl/Tk 8.3 or later but 8.5.9 (or 8.6, when available) are highly recommended. Included in this distribution are the most recent versions (as of sept 2010) of the libz, libpng, libjpeg, and libtiff libraries. These are not required, unless you need support for the PNG, JPEG, or TIFF format. Note that you have to build these libraries to support the named formats, even if your system already has shared libraries for these formats. This is because the libraries here are built such that they can be loaded as packages by the Tcl/Tk core, making the handling of the various dependencies much easier. An earlier version, 1.2.4, used a modified copy of Tcl's functions for loading of shared libraries to load the support libraries at runtime. These have been abandoned in favor of the new approach. BACKGROUND TO BUILDING The TkImg sources have been heavily refactored. Instead of building one big package there are several small packages most of which are independent of each other. All packages employ a TEA 2 based build system (configure/Make) for easy configuration and building. This means that 99% of the options to configure are the same for all the packages. All packages save for the supporting ones (see below) have names starting with 'img'. For compatibility with older scripts the package index file of the utility package 'img::base' declares pseudo-packages 'img' and 'Img' which load all packages provided by this extension. BUILDING - The convenient way The toplevel directory of tkImg contains a configure and Makefile for convenient configuration and building of all packages in the extension. Run this configure script in a build directory of your choice to configure all packages, then run make all make install in the build directory. The most important options for configure are --prefix and --exec-prefix which tell the build system where to find Tcl and Tk, and also where to install the results of the builds (header, shared libraries, ...). This convenient build installs all shared libraries in a single directory 'Img, together with a union package index for all packages. If the builder requires only a subset of the packages he can use make all to build all packages, but must not use 'make install' in the top build directory. Instead run make install in the sub directories of the build directory which contain the requested packages, and their dependencies ! PACKAGES AND THEIR DEPENDENCIES This section is for people who want to bypass the master configure/Makefile. At the bottom of the hierarchy of dependencies are the 'support packages'. They encapsulate the support libraries for ZIP, TIFF, PNG and JPEG in packages directly loadable by Tcl. They provide the functionality of their underlying libraries via stub-tables. The names of these packages are: Name Directory Dependency ------------------------------------------------- zlibtcl tkimg/compat/libz pngtcl tkimg/compat/libpng zlibtcl jpegtcl tkimg/compat/libjpeg tifftcl tkimg/compat/libtiff ------------------------------------------------- The package 'pngtcl' depends on 'zlibtcl' and has to be built after it. Beyond that the order of building is free. Their TEA build systems can be found in the directories listed above. The configure/Makefile's in the directories tkimg/compat/libz, tkimg/compat/libpng, tkimg/compat/libjpeg, tkimg/compat/libtiff must _not_ be used directly under any circumstances. At the next level is the package 'tkimg'. It provides utility functions used by all format handlers, and therefore has to be built before any of them. Its TEA build system can be found in the directory Name Directory Dependency ------------------------------------------------- img::base tkimg/base ------------------------------------------------- Beyond that are the packages providing the various format handlers. They can be built in any order. Some of them depend on supporting packages, as noted below. Their names and directories are Name Directory Dependency ------------------------------------------------- img::bmp tkimg/bmp img::dted tkimg/dted img::gif tkimg/gif img::ico tkimg/ico img::jpeg tkimg/jpeg jpegtcl img::pcx tkimg/pcx img::pixmap tkimg/pixmap img::png tkimg/png pngtcl, zlibtcl img::ppm tkimg/ppm img::ps tkimg/ps img::raw tkimg/raw img::sgi tkimg/sgi img::sun tkimg/sun img::tga tkimg/tga img::tiff tkimg/tiff tifftcl, zlibtcl, jpegtcl img::window tkimg/window img::xbm tkimg/xbm img::xpm tkimg/xpm ------------------------------------------------- CONFIGURE The source distributions have "configure", which has the following possibilities: configure ?options? Some possible options: --prefix= Install headers in /include. Default: "/usr/local" --exec-prefix= Install libraries in /lib. Default: "${prefix}" --with-tcl= Find Tcl libraries in and include files in /../include or /../generic. Default: "${exec-prefix}/lib" or a sibling directory of the Img build directory. --with-tk= Find Tk libraries in and include files in /../include or /../generic. Default: the same values as given by --with-tcl or a sibling directory of the Img build directory. Packages dependent on one or more of the support packages have appropriate options to locate their libraries and headers, if they cannot be found via --prefix and --exec-prefix Use configure --help to query each configure for the full set of options available to it. MAKE & INSTALL 'make', or 'make all' will build any package. 'make install' will install its headers and libraries in the directories specified via --prefix/include and --exec-prefix/lib. USE If you want to use one or more of new image formats to be available in your own scripts, add a line like the following somewhere in your script: package require img::FORMAT where FORMAT stands for the name of the format requested. See the list in section 'PACKAGES AND THEIR DEPENDENCIES' for the available formats. Each format will automatically load all of the packages it is dependent on. The line package require Img is still legal and will load all format handlers provided by this extension except dted and raw. As an example, have a look at the file "demo.tcl" For further options see the manpages. DOCUMENTATION The documentation coming with the distribution is written in the doctools format (see tcllib). NOTE: The Img documentation makes use of features (include files and variables) which are not part of an official tcllib release yet. A cvs snapshot of tcllib is required. PLATFORMS tested: Linux 2.0.30 (gcc, egcs) IRIX 6.2 (cc, 32 bits only) ULTRIX 4.1 (cc, gcc, egcs) ULTRIX 4.4 (cc 3.0) HP-UX-9 (cc, gcc, egcs) HP-UX-10.2 (gcc, egcs) SunOS-4.1.2 (cc) Solaris 2.5 (gcc, egcs) FreeBSD 2.2 (gcc, egcs) Windows 95/98/NT(gcc-2.95/MS Visual C++ 4.2/5.0/6.0) Not done yet: Mac ) someone interested VMS ) to try?????? Other machines and OS's should work too. Feedback about other OS's and compilers is appreciated. Please help me in making this package better. -- Jan Nijtmans email: nijtmans@users.sourceforge.net url: http://purl.oclc.org/net/nijtmans/ Andreas Kupries, ActiveState Corp email: andreas_kupries@users.sourceforge.net (private) akupries@shaw.ca (private) andreask@activestate.com (work) url: http://www.purl.org/NET/akupries/