practcl(3)



practclThecThe Proper Rational API for C to Tool Command Languagepractcl(3tcl)

______________________________________________________________________________

NAME
       practcl - The Practcl Module

SYNOPSIS
       package require TclOO  1.0

       proc practcl::cat fname

       proc practcl::docstrip text

       proc putb ?map? text

       proc Proc name arglist body

       proc noop ?args?

       proc practcl::debug ?args?

       proc practcl::doexec ?args?

       proc practcl::doexec_in path ?args?

       proc practcl::dotclexec ?args?

       proc practcl::domake path ?args?

       proc practcl::domake.tcl path ?args?

       proc practcl::fossil path ?args?

       proc practcl::fossil_status dir

       proc practcl::os

       proc practcl::mkzip exename barekit vfspath

       proc practcl::sort_dict list

       proc practcl::local_os

       proc practcl::config.tcl path

       proc practcl::read_configuration path

       proc practcl::tcllib_require pkg ?args?

       proc practcl::platform::tcl_core_options os

       proc practcl::platform::tk_core_options os

       proc practcl::read_rc_file filename ?localdat ?

       proc practcl::read_sh_subst line info

       proc practcl::read_sh_file filename ?localdat ?

       proc practcl::read_Config.sh filename

       proc practcl::read_Makefile filename

       proc practcl::cputs varname ?args?

       proc practcl::tcl_to_c body

       proc practcl::_tagblock text ?style tcl? ?note ?

       proc practcl::de_shell data

       proc practcl::grep pattern ?files ?

       proc practcl::file_lexnormalize sp

       proc practcl::file_relative base dst

       proc practcl::findByPattern basedir patterns

       proc practcl::log fname comment

       proc practcl::_pkgindex_simpleIndex path

       proc practcl::_pkgindex_directory path

       proc practcl::_pkgindex_path_subdir path

       proc practcl::pkgindex_path ?args?

       proc practcl::installDir d1 d2

       proc practcl::copyDir d1 d2 ?toplevel 1?

       proc practcl::buildModule modpath

       proc practcl::installModule modpath DEST

       proc practcl::trigger ?args?

       proc practcl::depends ?args?

       proc practcl::target name info ?action ?

       method constructor

       method argspec argspec

       method comment block

       method keyword.Annotation resultvar commentblock type name body

       method keyword.Class resultvar commentblock name body

       method keyword.class resultvar commentblock name body

       method keyword.Class_Method resultvar commentblock name ?args?

       method keyword.method resultvar commentblock name ?args?

       method keyword.proc commentblock name argspec

       method reset

       method Main

       method section.method keyword method minfo

       method section.annotation type name iinfo

       method section.class class_name class_info

       method section.command procinfo

       method manpage ?header value? ?footer value? ?authors list?

       method scan_text text

       method scan_file filename

       method _MorphPatterns

       method define submethod ?args?

       method graft ?args?

       method initialize

       method link command ?args?

       method morph classname

       method script script

       method select

       method source filename

       classmethod select object

       method config.sh

       method BuildDir PWD

       method MakeDir srcdir

       method read_configuration

       method build-cflags PROJECT DEFS namevar versionvar defsvar

       method critcl ?args?

       method Autoconf

       method BuildDir PWD

       method ConfigureOpts

       method MakeDir srcdir

       method make {} autodetect

       method make {} clean

       method make {} compile

       method make {} install DEST

       method build-compile-sources PROJECT COMPILE CPPCOMPILE INCLUDES

       method build-Makefile path PROJECT

       method build-library outfile PROJECT

       method build-tclsh outfile PROJECT ?path auto?

       method BuildDir PWD

       method make {} autodetect

       method make {} clean

       method make {} compile

       method make {} install DEST

       method MakeDir srcdir

       method NmakeOpts

       method constructor module_object name info ?action_body ?

       method do

       method check

       method output

       method reset

       method triggers

       method constructor parent ?args?

       method child method

       method go

       method cstructure name definition ?argdat ?

       method include header

       method include_dir ?args?

       method include_directory ?args?

       method c_header body

       method c_code body

       method c_function header body ?info ?

       method c_tcloomethod name body ?arginfo ?

       method cmethod name body ?arginfo ?

       method c_tclproc_nspace nspace

       method c_tclcmd name body ?arginfo ?

       method c_tclproc_raw name body ?arginfo ?

       method tcltype name argdat

       method project-compile-products

       method implement path

       method initialize

       method linktype

       method generate-cfile-constant

       method generate-cfile-header

       method generate-cfile-tclapi

       method generate-loader-module

       method Collate_Source CWD

       method select

       classmethod select object

       method code section body

       method Collate_Source CWD

       method project-compile-products

       method generate-debug ?spaces ?

       method generate-cfile-constant

       method generate-cfile-public-structure

       method generate-cfile-header

       method generate-cfile-global

       method generate-cfile-private-typedef

       method generate-cfile-private-structure

       method generate-cfile-functions

       method generate-cfile-tclapi

       method generate-hfile-public-define

       method generate-hfile-public-macro

       method generate-hfile-public-typedef

       method generate-hfile-public-structure

       method generate-hfile-public-headers

       method generate-hfile-public-function

       method generate-hfile-public-includes

       method generate-hfile-public-verbatim

       method generate-loader-external

       method generate-loader-module

       method generate-stub-function

       method IncludeAdd headervar ?args?

       method generate-tcl-loader

       method generate-tcl-pre

       method generate-tcl-post

       method linktype

       method Ofile filename

       method project-static-packages

       method toolset-include-directory

       method target method ?args?

       method project-compile-products

       method generate-loader-module

       method project-compile-products

       method linker-products configdict

       method initialize

       variable make_object

       method _MorphPatterns

       method add ?args?

       method install-headers ?args?

       method make {} _preamble

       method make {} pkginfo

       method make {} objects

       method make {} object name

       method make {} reset

       method make {} trigger ?args?

       method make {} depends ?args?

       method make {} filename name

       method make {} target name Info body

       method make {} todo

       method make {} do

       method child which

       method generate-c

       method generate-h

       method generate-loader

       method initialize

       method implement path

       method linktype

       method _MorphPatterns

       method constructor ?args?

       method add_object object

       method add_project pkg info ?oodefine ?

       method add_tool pkg info ?oodefine ?

       method build-tclcore

       method child which

       method linktype

       method project pkg ?args?

       method tclcore

       method tkcore

       method tool pkg ?args?

       method clean PATH

       method project-compile-products

       method go

       method generate-decls pkgname path

       method implement path

       method generate-make path

       method linktype

       method package-ifneeded ?args?

       method shared_library ?filename ?

       method static_library ?filename ?

       method build-tclkit_main PROJECT PKG_OBJS

       method Collate_Source CWD

       method wrap PWD exename vfspath ?args?

       classmethod Sandbox object

       classmethod select object

       classmethod claim_option

       classmethod claim_object object

       classmethod claim_path path

       method scm_info

       method DistroMixIn

       method Sandbox

       method SrcDir

       method ScmTag

       method ScmClone

       method ScmUnpack

       method ScmUpdate

       method Unpack

       classmethod claim_object object

       classmethod claim_option

       classmethod claim_path path

       method ScmUnpack

       classmethod claim_object obj

       classmethod claim_option

       classmethod claim_path path

       method scm_info

       method ScmClone

       method ScmTag

       method ScmUnpack

       method ScmUpdate

       classmethod claim_object obj

       classmethod claim_option

       classmethod claim_path path

       method ScmTag

       method ScmUnpack

       method ScmUpdate

       method _MorphPatterns

       method BuildDir PWD

       method child which

       method compile

       method go

       method install ?args?

       method linktype

       method linker-products configdict

       method linker-external configdict

       method linker-extra configdict

       method env-bootstrap

       method env-exec

       method env-install

       method env-load

       method env-present

       method sources

       method update

       method unpack

       method env-bootstrap

       method env-present

       method linktype

       method env-bootstrap

       method env-install

       method env-present

       method install DEST

       method kettle path ?args?

       method install DEST

       method install DEST

       method env-bootstrap

       method env-install

       method env-present

       method install DEST

       method install-module DEST ?args?

       method env-bootstrap

       method env-install

       method install DEST

       method install-module DEST ?args?

       method clean

       method env-install

       method project-compile-products

       method ComputeInstall

       method go

       method linker-products configdict

       method project-static-packages

       method BuildDir PWD

       method compile

       method Configure

       method install DEST

       method install DEST

       method install DEST

       method env-bootstrap

       method env-present

       method env-install

       method go

       method linktype

______________________________________________________________________________

DESCRIPTION
       The  Practcl  module  is a tool for integrating large modules for C API
       Tcl code that requires custom Tcl types and TclOO objects.

       The concept with Practcl is that is a single file package that can  as-
       sist any tcl based project with distribution, compilation, linking, VFS
       preparation, executable assembly, and installation. Practcl also allows
       one  project  to invoke the build system from another project, allowing
       complex projects such as a statically linked basekit  to  be  assembled
       with relative ease.

       Practcl  ships  as a single file, and aside from a Tcl 8.6 interpreter,
       has no external dependencies.

       Making a practcl project

COMMANDS
       proc practcl::cat fname
              Concatenate a file

       proc practcl::docstrip text
              Strip the global comments from tcl code.  Used  to  prevent  the
              documentation  markup  comments  from clogging up files intended
              for distribution in machine readable format.

       proc putb ?map? text
              Append a line of text to a variable. Optionally apply  a  string
              mapping.

       proc Proc name arglist body
              Generate a proc if no command already exists by that name

       proc noop ?args?
              A  command to do nothing. A handy way of negating an instruction
              without having to comment it completely out.  It's also a  handy
              attachment point for an object to be named later

       proc practcl::debug ?args?

       proc practcl::doexec ?args?
              Drop in a static copy of Tcl

       proc practcl::doexec_in path ?args?

       proc practcl::dotclexec ?args?

       proc practcl::domake path ?args?

       proc practcl::domake.tcl path ?args?

       proc practcl::fossil path ?args?

       proc practcl::fossil_status dir

       proc practcl::os

       proc practcl::mkzip exename barekit vfspath
              Build a zipfile. On tcl8.6 this invokes the native Zip implemen-
              tation on older interpreters this invokes zip via exec

       proc practcl::sort_dict list
              Dictionary sort a key/value list. Needed because pre tcl8.6 does
              not have lsort -stride 2

       proc practcl::local_os
              Returns  a  dictionary  describing  the  local operating system.
              Fields return include:

              o      download - Filesystem path where fossil repositories  and
                     source tarballs are downloaded for the current user

              o      EXEEXT - The extension to give to executables. (i.e. .exe
                     on windows)

              o      fossil_mirror - A URI for a local network web server  who
                     acts as a fossil repository mirror

              o      local_install  - Filesystem path where packages for local
                     consumption by the current user are installed

              o      prefix - The prefix as given to the Tcl core/TEA for  in-
                     stallation to local_install in ./configure

              o      sandbox  -  The  file location where this project unpacks
                     external projects

              o      TEACUP_PROFILE - The  ActiveState/Teacup  canonical  name
                     for     this     platform     (i.e.     win32-ix86    ma-
                     cosx10.5-i386-x86_84)

              o      TEACUP_OS - The local operating system (windows,  macosx,
                     openbsd,  etc).  Gives  the same answer as tcl.m4, except
                     that macosx is given as macosx instead of Darwin.

              o      TEA_PLATFORM - The platform returned by uname -s-uname -r
                     (on Unix), or "windows" on Windows

              o      TEACUP_ARCH - The processor architecture for the local os
                     (i.e. ix86, x86_64)

              o      TEACUP_ARCH - The processor architecture for the local os
                     (i.e. ix86, x86_64)

              o      teapot  -  Filesystem path where teapot package files are
                     downloaded for the current user

              o      userhome - File  path  to  store  localized  preferences,
                     cache download files, etc for the current user

              This  command  uses a combination of local checks with Exec, any
              tclConfig.sh file that is resident, autoconf data where  already
              computed, and data gleaned from a file named practcl.rc in user-
              home. The location for userhome varies by platform and operating
              system:

              o      Windows: ::env(LOCALAPPDATA)/Tcl

              o      Macos: ~/Library/Application Support/Tcl

              o      Other: ~/tcl

       proc practcl::config.tcl path
              A  transparent call to ::practcl::read_configuration to preserve
              backward compadibility with older copies of Practcl

       proc practcl::read_configuration path
              Detect local platform. This command looks for  data  gleaned  by
              autoconf  or autosetup in the path specified, or perform its own
              logic tests if neither has been run.  A file  named  config.site
              present  in  the  location  indicates that this project is cross
              compiling, and the data stored in that file is used for the com-
              piler and linker.

              This  command looks for information from the following files, in
              the following order:

              o      config.tcl - A file generated  by  autoconf/configure  in
                     newer editions of TEA, encoded as a Tcl script.

              o      config.site  -  A file containing cross compiler informa-
                     tion, encoded as a SH script

              o      ::env(VisualStudioVersion) - On Windows, and  environmen-
                     tal value that indicates MS Visual Studio is installed

       This  command  returns  a dictionary containing all of the data cleaned
       from the sources above.  In the absence of any  guidance  this  command
       returns  the  same output as ::practcl::local_os.  In this mode, if the
       environmental variable VisualStudioVersion exists,  this  command  will
       provide a template of fields that are appropriate for compiling on Win-
       dows under Microsoft Visual Studio. The USEMSVC flag in the  dictionary
       is a boolean flag to indicate if this is indeed the case.

       proc practcl::tcllib_require pkg ?args?
              Try to load  a package, and failing that retrieve tcllib

       proc practcl::platform::tcl_core_options os
              Return the string to pass to ./configure to compile the Tcl core
              for the given OS.

              o      windows: --with-tzdata --with-encoding utf-8

              o      macosx:   --enable-corefoundation=yes     --enable-frame-
                     work=no --with-tzdata --with-encoding utf-8

              o      other: --with-tzdata --with-encoding utf-8

       proc practcl::platform::tk_core_options os

       proc practcl::read_rc_file filename ?localdat ?
              Read a stylized key/value list stored in a file

       proc practcl::read_sh_subst line info
              Converts a XXX.sh file into a series of Tcl variables

       proc practcl::read_sh_file filename ?localdat ?

       proc practcl::read_Config.sh filename
              A  simpler  form  of  read_sh_file tailored to pulling data from
              (tcl|tk)Config.sh

       proc practcl::read_Makefile filename
              A simpler form of read_sh_file tailored to pulling data  from  a
              Makefile

       proc practcl::cputs varname ?args?
              Append arguments to a buffer The command works like puts in that
              each call will also insert a line feed. Unlike puts, blank links
              in the interstitial are suppressed

       proc practcl::tcl_to_c body

       proc practcl::_tagblock text ?style tcl? ?note ?

       proc practcl::de_shell data

       proc practcl::grep pattern ?files ?
              Search for the pattern pattern amongst $files

       proc practcl::file_lexnormalize sp

       proc practcl::file_relative base dst
              Calculate a relative path between base and dst

              Example:

                ::practcl::file_relative ~/build/tcl/unix ~/build/tcl/library
                > ../library

       proc practcl::findByPattern basedir patterns

       proc practcl::log fname comment
              Record an event in the practcl log

       proc practcl::_pkgindex_simpleIndex path

       proc practcl::_pkgindex_directory path
              Return  true  if  the pkgindex file contains any statement other
              than "package ifneeded" and/or if any package ifneeded  loads  a
              DLL

       proc practcl::_pkgindex_path_subdir path
              Helper function for ::practcl::pkgindex_path

       proc practcl::pkgindex_path ?args?
              Index  all  paths  given  as though they will end up in the same
              virtual file system

       proc practcl::installDir d1 d2
              Delete the contents of d2, and then recusively  Ccopy  the  con-
              tents of d1 to d2.

       proc practcl::copyDir d1 d2 ?toplevel 1?
              Recursively copy the contents of d1 to d2

       proc practcl::buildModule modpath

       proc practcl::installModule modpath DEST
              Install a module from MODPATH to the directory specified.  dpath
              is assumed to be the fully qualified path where module is to  be
              placed.   Any  existing  files will be deleted at that path.  If
              the path is symlink the process will return with no error and no
              action.  If the module has contents in the build/ directory that
              are newer than the .tcl files in the  module  source  directory,
              and  a  build/build.tcl file exists, the build/build.tcl file is
              run.  If the source directory includes a file  named  index.tcl,
              the  directory is assumed to be in the tao style of modules, and
              the entire directory (and all subdirectories) are copied  verba-
              tim.  If no index.tcl file is present, all .tcl files are copied
              from the module source directory, and  a  pkgIndex.tcl  file  is
              generated  if non yet exists.  I a folder named htdocs exists in
              the source directory, that directory is copied verbatim  to  the
              destination.

       proc practcl::trigger ?args?
              Trigger build targets, and recompute dependencies

              Internals:

                ::practcl::LOCAL make trigger {*}$args
                foreach {name obj} [::practcl::LOCAL make objects] {
                  set ::make($name) [$obj do]
                }

       proc practcl::depends ?args?
              Calculate  if  a dependency for any of the arguments needs to be
              fulfilled or rebuilt.

              Internals:

                ::practcl::LOCAL make depends {*}$args

       proc practcl::target name info ?action ?
              Declare a build product. This  proc  is  just  a  shorthand  for
              ::practcl::LOCAL make task $name $info $action

              Registering a build product with this command will create an en-
              try in the global  array, and populate a  value  in  the  global
              array.

              Internals:

                set obj [::practcl::LOCAL make task $name $info $action]
                set ::make($name) 0
                set filename [$obj define get filename]
                if {$filename ne {}} {
                  set ::target($name) $filename
                }

CLASSES
   CLASS  PRACTCL::DOCTOOL
              { set authors {
                 {John Doe} {jdoe@illustrious.edu}
                 {Tom RichardHarry} {tomdickharry@illustrius.edu}
               }
               # Create the object
               ::practcl::doctool create AutoDoc
               set fout [open [file join $moddir module.tcl] w]
               foreach file [glob [file join $srcdir *.tcl]] {
                 set content [::practcl::cat [file join $srcdir $file]]
                  # Scan the file
                  AutoDoc scan_text $content
                  # Strip the comments from the distribution
                  puts $fout [::practcl::docstrip $content]
               }
               # Write out the manual page
               set manout [open [file join $moddir module.man] w]
               dict set args header [string map $modmap [::practcl::cat [file join $srcdir manual.txt]]]
               dict set args footer [string map $modmap [::practcl::cat [file join $srcdir footer.txt]]]
               dict set args authors $authors
               puts $manout [AutoDoc manpage {*}$args]
               close $manout

              }

       Tool  for  build scripts to dynamically generate manual files from com-
       ments in source code files

       Methods

       method constructor

       method argspec argspec
              Process an argument  list  into  an  informational  dict.   This
              method  also  understands  non-positional arguments expressed in
              the     notation     of      Tip      471      https://core.tcl-
              lang.org/tips/doc/trunk/tip/479.md.

              The output will be a dictionary of all of the fields and whether
              the fields are positional, mandatory, and whether  they  have  a
              default value.

              Example:

                 my argspec {a b {c 10}}

                 > a {positional 1 mandatory 1} b {positional 1 mandatory 1} c {positional 1 mandatory 0 default 10}

       method comment block
              Convert  a  block  of comments into an informational dictionary.
              If lines in the comment start with a single  word  ending  in  a
              colon,  all  subsequent lines are appended to a dictionary field
              of that name.  If no fields are given, all of the  text  is  ap-
              pended to the description field.

              Example:

               my comment {Does something cool}
               > description {Does something cool}

               my comment {
               title : Something really cool
               author : Sean Woods
               author : John Doe
               description :
               This does something really cool!
               }
               > description {This does something really cool!}
                 title {Something really cool}
                 author {Sean Woods
                 John Doe}

       method keyword.Annotation resultvar commentblock type name body

       method keyword.Class resultvar commentblock name body
              Process an oo::objdefine call that modifies the class object it-
              self

       method keyword.class resultvar commentblock name body
              Process an oo::define, clay::define, etc statement.

       method keyword.Class_Method resultvar commentblock name ?args?
              Process a statement for a clay style class method

       method keyword.method resultvar commentblock name ?args?
              Process a statement for a tcloo style object method

       method keyword.proc commentblock name argspec
              Process a proc statement

       method reset
              Reset the state of the object and its embedded coroutine

       method Main
              Main body of the embedded coroutine for the object

       method section.method keyword method minfo
              Generate the manual page text for a method or proc

       method section.annotation type name iinfo

       method section.class class_name class_info
              Generate the manual page text for a class

       method section.command procinfo
              Generate the manual page text for the commands section

       method manpage ?header value? ?footer value? ?authors list?
              Generate the manual page. Returns the  completed  text  suitable
              for saving in .man file.  The header argument is a block of doc-
              tools text to go in before the machine generated section. footer
              is a block of doctools text to go in after the machine generated
              section. authors is a list of individual authors and  emails  in
              the form of AUTHOR EMAIL ?AUTHOR EMAIL?...

       method scan_text text
              Scan a block of text

       method scan_file filename
              Scan a file of text

   CLASS  PRACTCL::METACLASS
       The metaclass for all practcl objects

       Methods

       method _MorphPatterns

       method define submethod ?args?

       method graft ?args?

       method initialize

       method link command ?args?

       method morph classname

       method script script

       method select

       method source filename

   CLASS  PRACTCL::TOOLSET
       Ancestor-less  class  intended  to be a mixin which defines a family of
       build related behaviors that are modified when targetting either gcc or
       msvc

       Class Methods

       classmethod select object
              Perform the selection for the toolset mixin

       Methods

       method config.sh
              find or fake a key/value list describing this project

       method BuildDir PWD
              Compute the location where the product will be built

       method MakeDir srcdir
              Return  where  the  Makefile is located relative to srcdir.  For
              this implementation the MakeDir is always srcdir.

       method read_configuration
              Read information about the build process for this package.   For
              this  implementation,  data is sought in the following locations
              in the following order: config.tcl (generated by practcl.)  PKG-
              Config.sh. The Makefile

              If  the  Makefile needs to be consulted, but does not exist, the
              Configure method is invoked

       method build-cflags PROJECT DEFS namevar versionvar defsvar
              method DEFS This method populates 4 variables: name -  The  name
              of  the  package  version  - The version of the package defs - C
              flags passed to the compiler includedir - A  list  of  paths  to
              feed to the compiler for finding headers

       method critcl ?args?
              Invoke critcl in an external process

   CLASS  PRACTCL::TOOLSET.GCC
       ancestors: practcl::toolset

       Methods

       method Autoconf

       method BuildDir PWD

       method ConfigureOpts

       method MakeDir srcdir
              Detect what directory contains the Makefile template

       method make {} autodetect

       method make {} clean

       method make {} compile

       method make {} install DEST

       method build-compile-sources PROJECT COMPILE CPPCOMPILE INCLUDES

       method build-Makefile path PROJECT

       method build-library outfile PROJECT
              Produce a static or dynamic library

       method build-tclsh outfile PROJECT ?path auto?
              Produce a static executable

   CLASS  PRACTCL::TOOLSET.MSVC
       ancestors: practcl::toolset

       Methods

       method BuildDir PWD
              MSVC always builds in the source directory

       method make {} autodetect
              Do nothing

       method make {} clean

       method make {} compile

       method make {} install DEST

       method MakeDir srcdir
              Detect what directory contains the Makefile template

       method NmakeOpts

   CLASS  PRACTCL::MAKE_OBJ
       ancestors: practcl::metaclass

       A  build  deliverable  object.  Normally an object file, header, or tcl
       script which must be compiled or generated in some way

       Methods

       method constructor module_object name info ?action_body ?

       method do

       method check

       method output

       method reset

       method triggers

   CLASS  PRACTCL::OBJECT
       ancestors: practcl::metaclass

       A generic Practcl object

       Methods

       method constructor parent ?args?

       method child method

       method go

   CLASS  PRACTCL::DYNAMIC
       Dynamic blocks do not generate their own .c files, instead the contrib-
       ute to the amalgamation of the main library file

       Methods

       method cstructure name definition ?argdat ?
              Parser functions

       method include header

       method include_dir ?args?

       method include_directory ?args?

       method c_header body

       method c_code body

       method c_function header body ?info ?

       method c_tcloomethod name body ?arginfo ?

       method cmethod name body ?arginfo ?
              Alias to classic name

       method c_tclproc_nspace nspace

       method c_tclcmd name body ?arginfo ?

       method c_tclproc_raw name body ?arginfo ?
              Alias to classic name

       method tcltype name argdat

       method project-compile-products
              Module interactions

       method implement path

       method initialize
              Practcl internals

       method linktype

       method generate-cfile-constant

       method generate-cfile-header

       method generate-cfile-tclapi
              Generate code that provides implements Tcl API calls

       method generate-loader-module
              Generate  code  that runs when the package/module is initialized
              into the interpreter

       method Collate_Source CWD

       method select
              Once an object marks itself as some flavor of dynamic, stop try-
              ing to morph it into something else

   CLASS  PRACTCL::PRODUCT
       A deliverable for the build system

       Class Methods

       classmethod select object

       Methods

       method code section body

       method Collate_Source CWD

       method project-compile-products

       method generate-debug ?spaces ?

       method generate-cfile-constant

       method generate-cfile-public-structure
              Populate const static data structures

       method generate-cfile-header

       method generate-cfile-global

       method generate-cfile-private-typedef

       method generate-cfile-private-structure

       method generate-cfile-functions
              Generate  code that provides subroutines called by Tcl API meth-
              ods

       method generate-cfile-tclapi
              Generate code that provides implements Tcl API calls

       method generate-hfile-public-define

       method generate-hfile-public-macro

       method generate-hfile-public-typedef

       method generate-hfile-public-structure

       method generate-hfile-public-headers

       method generate-hfile-public-function

       method generate-hfile-public-includes

       method generate-hfile-public-verbatim

       method generate-loader-external

       method generate-loader-module

       method generate-stub-function

       method IncludeAdd headervar ?args?

       method generate-tcl-loader

       method generate-tcl-pre
              This methods generates any Tcl script file which is required  to
              pre-initialize the C library

       method generate-tcl-post

       method linktype

       method Ofile filename

       method project-static-packages
              Methods called by the master project

       method toolset-include-directory
              Methods called by the toolset

       method target method ?args?

   CLASS  PRACTCL::PRODUCT.CHEADER
       ancestors: practcl::product

       A  product which generated from a C header file. Which is to say, noth-
       ing.

       Methods

       method project-compile-products

       method generate-loader-module

   CLASS  PRACTCL::PRODUCT.CSOURCE
       ancestors: practcl::product

       A product which generated from a C source file. Normally an object (.o)
       file.

       Methods

       method project-compile-products

   CLASS  PRACTCL::PRODUCT.CLIBRARY
       ancestors: practcl::product

       A  product  which is generated from a compiled C library.  Usually a .a
       or a .dylib file, but in complex cases may actually just be  a  conduit
       for one project to integrate the source code of another

       Methods

       method linker-products configdict

   CLASS  PRACTCL::PRODUCT.DYNAMIC
       ancestors: practcl::dynamic practcl::product

       A  product  which  is generated from C code that itself is generated by
       practcl or some other means. This C file may or may not produce its own
       .o file, depending on whether it is eligible to become part of an amal-
       gamation

       Methods

       method initialize

   CLASS  PRACTCL::PRODUCT.CRITCL
       ancestors: practcl::dynamic practcl::product

       A binary product produced by critcl. Note: The  implementation  is  not
       written yet, this class does nothing.

   CLASS  PRACTCL::MODULE
       ancestors: practcl::object practcl::product.dynamic

       In the end, all C code must be loaded into a module This will either be
       a dynamically loaded library implementing a tcl extension,  or  a  com-
       piled in segment of a custom shell/app

       Variable

       variable make_object

       Methods

       method _MorphPatterns

       method add ?args?

       method install-headers ?args?

       method make {} _preamble

       method make {} pkginfo

       method make {} objects
              Return a dictionary of all handles and associated objects

       method make {} object name
              Return the object associated with handle name

       method make {} reset
              Reset all deputy objects

       method make {} trigger ?args?
              Exercise the triggers method for all handles listed

       method make {} depends ?args?
              Exercise the check method for all handles listed

       method make {} filename name
              Return the file name of the build product for the listed handle

       method make {} target name Info body

       method make {} todo
              Return a list of handles for object which return true for the do
              method

       method make {} do
              For each target exercise the action specified in the action def-
              inition if the do method returns true

       method child which

       method generate-c
              This  methods  generates  the contents of an amalgamated .c file
              which implements the loader for a batch of tools

       method generate-h
              This methods generates the contents of an  amalgamated  .h  file
              which describes the public API of this module

       method generate-loader

       method initialize

       method implement path

       method linktype

   CLASS  PRACTCL::PROJECT
       ancestors: practcl::module

       A toplevel project that is a collection of other projects

       Methods

       method _MorphPatterns

       method constructor ?args?

       method add_object object

       method add_project pkg info ?oodefine ?

       method add_tool pkg info ?oodefine ?

       method build-tclcore
              Compile  the  Tcl core. If the define tk is true, compile the Tk
              core as well

       method child which

       method linktype

       method project pkg ?args?
              Exercise the methods of a sub-object

       method tclcore

       method tkcore

       method tool pkg ?args?

   CLASS  PRACTCL::LIBRARY
       ancestors: practcl::project

       A toplevel project that produces a library

       Methods

       method clean PATH

       method project-compile-products

       method go

       method generate-decls pkgname path

       method implement path

       method generate-make path
              Backward compadible call

       method linktype

       method package-ifneeded ?args?
              Create a "package ifneeded" Args are a list of aliases for which
              this package will answer to

       method shared_library ?filename ?

       method static_library ?filename ?

   CLASS  PRACTCL::TCLKIT
       ancestors: practcl::library

       A toplevel project that produces a self-contained executable

       Methods

       method build-tclkit_main PROJECT PKG_OBJS

       method Collate_Source CWD

       method wrap PWD exename vfspath ?args?
              Wrap an executable

   CLASS  PRACTCL::DISTRIBUTION
       Standalone  class to manage code distribution This class is intended to
       be mixed into another class (Thus the lack of ancestors)

       Class Methods

       classmethod Sandbox object

       classmethod select object

       classmethod claim_option

       classmethod claim_object object

       classmethod claim_path path

       Methods

       method scm_info

       method DistroMixIn

       method Sandbox

       method SrcDir

       method ScmTag

       method ScmClone

       method ScmUnpack

       method ScmUpdate

       method Unpack

   CLASS  PRACTCL::DISTRIBUTION.SNAPSHOT
       ancestors: practcl::distribution

       A file distribution from zip, tarball, or other non-scm archive format

       Class Methods

       classmethod claim_object object

       classmethod claim_option

       classmethod claim_path path

       Methods

       method ScmUnpack

   CLASS  PRACTCL::DISTRIBUTION.FOSSIL
       ancestors: practcl::distribution

       A file distribution based on fossil

       Class Methods

       classmethod claim_object obj
              Check for markers in the metadata

       classmethod claim_option

       classmethod claim_path path
              Check for markers in the source root

       Methods

       method scm_info

       method ScmClone
              Clone the source

       method ScmTag

       method ScmUnpack

       method ScmUpdate

   CLASS  PRACTCL::DISTRIBUTION.GIT
       ancestors: practcl::distribution

       A file distribution based on git

       Class Methods

       classmethod claim_object obj

       classmethod claim_option

       classmethod claim_path path

       Methods

       method ScmTag

       method ScmUnpack

       method ScmUpdate

   CLASS  PRACTCL::SUBPROJECT
       ancestors: practcl::module

       A subordinate project

       Methods

       method _MorphPatterns

       method BuildDir PWD

       method child which

       method compile

       method go

       method install ?args?
              Install project into the local build system

       method linktype

       method linker-products configdict

       method linker-external configdict

       method linker-extra configdict

       method env-bootstrap
              Methods for packages/tools that can be downloaded possibly built
              and  used  internally  by this Practcl process Load the facility
              into the interpreter

       method env-exec
              Return a file path that exec can call

       method env-install
              Install the tool into the local environment

       method env-load
              Do whatever is necessary to get the tool into the local environ-
              ment

       method env-present
              Check if tool is available for load/already loaded

       method sources

       method update

       method unpack

   CLASS  PRACTCL::SUBPROJECT.SOURCE
       ancestors: practcl::subproject practcl::library

       A project which the kit compiles and integrates the source for itself

       Methods

       method env-bootstrap

       method env-present

       method linktype

   CLASS  PRACTCL::SUBPROJECT.TEAPOT
       ancestors: practcl::subproject

       a copy from the teapot

       Methods

       method env-bootstrap

       method env-install

       method env-present

       method install DEST

   CLASS  PRACTCL::SUBPROJECT.KETTLE
       ancestors: practcl::subproject

       Methods

       method kettle path ?args?

       method install DEST

   CLASS  PRACTCL::SUBPROJECT.CRITCL
       ancestors: practcl::subproject

       Methods

       method install DEST

   CLASS  PRACTCL::SUBPROJECT.SAK
       ancestors: practcl::subproject

       Methods

       method env-bootstrap

       method env-install

       method env-present

       method install DEST

       method install-module DEST ?args?

   CLASS  PRACTCL::SUBPROJECT.PRACTCL
       ancestors: practcl::subproject

       Methods

       method env-bootstrap

       method env-install

       method install DEST

       method install-module DEST ?args?

   CLASS  PRACTCL::SUBPROJECT.BINARY
       ancestors: practcl::subproject

       A subordinate binary package

       Methods

       method clean

       method env-install

       method project-compile-products

       method ComputeInstall

       method go

       method linker-products configdict

       method project-static-packages

       method BuildDir PWD

       method compile

       method Configure

       method install DEST

   CLASS  PRACTCL::SUBPROJECT.TEA
       ancestors: practcl::subproject.binary

       A subordinate TEA based binary package

   CLASS  PRACTCL::SUBPROJECT.LIBRARY
       ancestors: practcl::subproject.binary practcl::library

       A subordinate C library built by this project

       Methods

       method install DEST

   CLASS  PRACTCL::SUBPROJECT.EXTERNAL
       ancestors: practcl::subproject.binary

       A subordinate external C library

       Methods

       method install DEST

   CLASS  PRACTCL::SUBPROJECT.CORE
       ancestors: practcl::subproject.binary

       Methods

       method env-bootstrap

       method env-present

       method env-install

       method go

       method linktype

BUGS, IDEAS, FEEDBACK
       This  document,  and the package it describes, will undoubtedly contain
       bugs and other problems.  Please report such in the category practcl of
       the  Tcllib  Trackers  [http://core.tcl.tk/tcllib/reportlist].   Please
       also report any ideas for enhancements you may have for either  package
       and/or documentation.

       When proposing code changes, please provide unified diffs, i.e the out-
       put of diff -u.

       Note further that  attachments  are  strongly  preferred  over  inlined
       patches.  Attachments  can  be  made  by  going to the Edit form of the
       ticket immediately after its creation, and  then  using  the  left-most
       button in the secondary navigation bar.

KEYWORDS
       practcl

CATEGORY
       TclOO

COPYRIGHT
       Copyright (c) 2016-2018 Sean Woods <yoda@etoyoc.com>

tcllib                              0.16.4                       practcl(3tcl)

Man(1) output converted with man2html
list of all man pages