Provided by: tcllib_1.21+dfsg-1_all bug

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 assist  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 implementation 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:

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

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

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

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

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

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

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

              •      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.

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

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

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

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

              •      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 userhome. The location for userhome varies by platform and
              operating system:

              •      Windows: ::env(LOCALAPPDATA)/Tcl

              •      Macos: ~/Library/Application Support/Tcl

              •      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 compiler and linker.

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

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

              •      config.site - A file containing cross compiler information, encoded as a  SH
                     script

              •      ::env(VisualStudioVersion)  -  On  Windows,  and  environmental  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 Windows 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.

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

              •      macosx:   --enable-corefoundation=yes   --enable-framework=no  --with-tzdata
                     --with-encoding utf-8

              •      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 contents 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 verbatim.  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 entry 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 comments 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 appended 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 itself

       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 doctools 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.) PKGConfig.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 contribute 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 trying 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 methods

       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, nothing.

       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 amalgamation

       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  compiled  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 definition 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 environment

       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 output 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>