# TIP 483: Improved TIP #59 implementation for Tk
	Author:         Stuart Cassoff <stwo@users.sourceforge.net>
	State:          Final
	Type:           Project
	Vote:           Done
	Created:        03-Nov-2017
	Post-History:   
	Keywords:       Tk, configuration
	Tcl-Version:    8.7
	Tk-Branch:      tk-stu-pkg
-----
# Abstract

Initially implemented in TIP #205 [[205]](205.md), the TIP #59 [[59]](59.md) implementation for Tk is incomplete.

This TIP proposes a more complete TIP #59 implementation for Tk.

# Rationale

There is currently only one key (_fontsystem_) provided by `::tk::pkgconfig`,
which will contain the value _xft_ only if xft was enabled at configure-time,
requiring a `[catch]`-wrapping of any `[::tk::pkgconfig get fontsystem]` calls.

# Proposal

* Add to `::tk::pkgconfig` a group of keys/values analogous to those provided by Tcl.

* Make the _fontsystem_ key ever-present and use the following to determine its value:

<pre>
    #if defined(_WIN32) || defined(__CYGWIN__)
    #  define CFG_FONTSYSTEM	"gdi"
    #elif defined(MAC_OSX_TK)
    #  define CFG_FONTSYSTEM	"xft"
    #elif defined(HAVE_XFT)
    #  define CFG_FONTSYSTEM	"xft"
    #else
    #  define CFG_FONTSYSTEM	"x11"
    #endif
</pre>

# Tk Configuration Specification

Keys to be provided by `::tk::pkgconfig`, their types and a description of their use.

Types: B = Boolean flag, S = String.

Examples of the files expected to be found in the configured directories in parenthesis.

|: Name              | Type  | Description                                                                      |
-----------------------------------------------------------------------------------------------------------------
| 64bit              |:  B  :| Set to true if Tk was compiled in 64bit mode                                     |
| debug              |:  B  :| Set to true if Tk was compiled to contain debugging information                  |
| mem\_debug         |:  B  :| Set to true if Tk has memory debugging compiled into it                          |
| optimized          |:  B  :| Set to true if Tk was compiled with compiler optimizations                       |
| profiled           |:  B  :| Set to true if Tk was compiled to contain profiling statements                   |
| threaded           |:  B  :| Set to true if Tk was compiled as thread-enabled                                 |
| fontsystem         |:  S  :| Name of fontsystem being used by Tk                                              |
| bindir,install     |:  S  :| Directory where binary        files are configured to be installed        (wish) |
| demodir,install    |:  S  :| Directory where demonstration files are configured to be installed  (.tcl, .xbm) |
| docdir,install     |:  S  :| Directory where documentation files are configured to be installed (.man, .html) |
| includedir,install |:  S  :| Directory where include       files are configured to be installed          (.h) |
| libdir,install     |:  S  :| Directory where library       files are configured to be installed     (.so, .a) |
| scriptdir,install  |:  S  :| Directory where script        files are configured to be installed      (tk.tcl) |
| bindir,runtime     |:  S  :| Directory where binary        files should be found at runtime            (wish) |
| demodir,runtime    |:  S  :| Directory where demonstration files should be found at runtime      (.tcl, .xbm) |
| docdir,runtime     |:  S  :| Directory where documentation files should be found at runtime     (.man, .html) |
| includedir,runtime |:  S  :| Directory where include       files should be found at runtime              (.h) |
| libdir,runtime     |:  S  :| Directory where library       files should be found at runtime         (.so, .a) |
| scriptdir,runtime  |:  S  :| Directory where script        files should be found at runtime          (tk.tcl) |

# Platform Considerations

* Unix, MacOSX
 * This TIP works as described.
* Windows
 * This TIP works as described however saved configuration information about directories
   is generally less useful on Windows because Tk is almost never installed into the same
   directories that are recorded in the pre-built files.

# Current Uncertainties as of 2017/11/22:
* Are the choices ok for _fontsystem_?
* Is it necessary to always provide the _fontsystem_ key?
  Not all **Tcl** platforms provide all the same tcl::pkgconfig keys.
  Should Tcl's example be followed?
* The new test file for Tk is named _pkgconfig.test_ while Tcl's is named _config.test_.
  The new name more accurately describes the tests but maybe it's better to go along with Tcl?
* Only tested on Unix.

# Status 2018/07/04:
* Changes made based on recommendations in <http://code.activestate.com/lists/tcl-core/19816/>
* Tk checkin: <https://core.tcl-lang.org/tk/info/d65d0705151eb38b>
* Tcl checkin: <https://core.tcl-lang.org/tcl/info/14bb7ec850ddaf66>

# Reference Implementation

The reference implementation is available in the tk-stu-pkg branch. <https://core.tcl-lang.org/tk/timeline?r=tk-stu-pkg>

The code is licensed under the same license as Tk.

# See Also

TIP #482 [[482]](482.md): Record Tk demo directory information.

# Copyright

This document has been placed in the public domain.
