Provided by: critcl_3.1.9-1_all bug

NAME

       critcl_devguide - Critcl - The Developer's Guide

DESCRIPTION

       Welcome  to the C Runtime In Tcl, CriTcl for short, a system to build C extension packages
       for Tcl on the fly, from C code embedded within Tcl scripts, for  all  who  wish  to  make
       their code go faster.

       This  document  is a guide for developers working on Critcl, i.e. maintainers fixing bugs,
       extending the package's functionality, etc.

       Please read

       [1]    Critcl - License,

       [2]    Critcl - How To Get The Sources, and

       [3]    Critcl - The Installer's Guide

       first, if that was not done already.

       Here we assume that the sources are already available in a directory of your  choice,  and
       that  you  not  only  know  how to build and install them, but also have all the necessary
       requisites to actually do so. The guide to the sources in particular also  explains  which
       source code management system is used, where to find it, how to set it up, etc.

PLAYING WITH CRITCL

       The  sources of Critcl, should you have gotten them, contain several larger examples show-
       casing various aspects of the system. These demonstration packages can all be found in the
       sub-directory "examples/" of the sources.

       Lots  of  smaller  examples  can be found in the document Using CriTcl, an introduction to
       Critcl by way of a of examples. These focus more on  specific  critcl  commands  than  the
       overall picture shown by the large examples mentioned in the previous paragraph.

DEVELOPING FOR CRITCL

   ARCHITECTURE & CONCEPTS
       The  system consists of two main layers, as seen in the figure below, plus a support layer
       containing general packages the system uses during operation.

       +----------------+
       |Applications    |
       | critcl         |
       | critcl::app    |
       +----------------+

       +----------------+
       |Core Packages   |
       | critcl         |
       | critcl::util   |
       +----------------+

       +----------------+
       |Support Packages|
       | stubs::*       |
       | md5, platform  |
       |  ...           |
       +----------------+

       [1]    At the top we have an application built on top  of  the  core  packages,  providing
              command  line access to the second and third usage modes, i.e. Generate Package and
              Generate TEA Package.

              critcl

              critcl::app

       [2]    Below that is the core package providing the essential functionality of the system,
              plus various utility packages which make common tasks more convenient.

              critcl

              critcl::util

       [3]    Lastly a layer of supporting packages, mostly external to critcl.

              md5    For  this  pure-Tcl  package  to  be  fast  users  should get one of several
                     possible accelerator packages:

                     [1]    tcllibc

                     [2]    Trf

                     [3]    md5c

              cmdline

              platform

              stubs::container

              stubs::reader

              stubs::writer

              stubs::gen

              stubs::gen::init

              stubs::gen::header

              stubs::gen::decl

              stubs::gen::macro

              stubs::gen::slot

              stubs::gen::lib

   REQUIREMENTS
       To develop for critcl the following packages and applications must  be  available  in  the
       environment. These are all used by the build.tcl helper application.

       dtplite
              A  Tcl  application  provided  by  Tcllib,  for  the  validation  and conversion of
              doctools-formatted text.

       dia    A Tcl application provided by Tklib, for the validation and conversion of  diagram-
              formatted figures into raster images.

              Do not confuse this with the Gnome dia application, which is a graphical editor for
              figures and diagrams, and completely unrelated.

       fileutil
              A Tcl package provided by Tcllib, providing file system utilities.

       vfs::mk4, vfs
              Tcl packages written in C providing access to Tcl's VFS  facilities,  required  for
              the generation of critcl starkits and starpacks.

   DIRECTORY STRUCTURE
       Helpers

              "build.tcl"
                     This  helper  application  provides various operations needed by a developer
                     for critcl, like regenerating the documentation, the figures,  building  and
                     installing critcl, etc.

                     Running the command like

                     will   provide  more  details  about  the  available  operations  and  their
                     arguments.

       Documentation

              "doc/" This directory contains the documentation sources, for both  the  text,  and
                     the  figures.  The texts are written in doctools format, whereas the figures
                     are written for tklib's dia(gram) package and application.

              "embedded/"
                     This directory contains the  documentation  converted  to  regular  manpages
                     (nroff) and HTML.  It is called embedded because these files, while derived,
                     are part of the git repository, i.e. embedded into it. This  enables  us  to
                     place  these  files  where  they  are  visible when serving the prject's web
                     interface.

       Testsuite

              "test/all.tcl"

              "test/testutilities.tcl"

              "test/*.test"
                     These files are a standard testsuite based on Tcl's  tcltest  package,  with
                     some utility code snarfed from Tcllib.

                     This currently tests only some of the stubs::* packages.

              "test/*.tcl"
                     These  files  (but not "all.tcl", and "testutilities.tcl") are example files
                     (Tcl with embedded C) which can be run through critcl for testing.

                     TODO: These should be converted into a proper test suite.

       Package Code, General structure

       Package Code, Per Package

              critcl

                     "lib/critcl/critcl.tcl"
                            The Tcl code implementing the package.

                     "lib/critcl/Config"
                            The configuration file for the standard targets and their settings.

                     "lib/critcl/critcl_c/"
                            Various C code snippets used by the  package.   This  directory  also
                            contains  the  copies  of  the  Tcl  header files used to compile the
                            assembled C code, for the major brnaches of Tcl, i.e. 8.4,  8.5,  and
                            8.6.

              critcl::util

                     "lib/critcl-util/util.tcl"
                            The Tcl code implementing the package.

              critcl::app

                     "lib/app-critcl/critcl.tcl"
                            The Tcl code implementing the package.

              critcl::iassoc

                     "lib/critcl-iassoc/iassoc.tcl"
                            The Tcl code implementing the package.

                     "lib/critcl-iassoc/iassoc.h"
                            C code template used by the package.

              critcl::class

                     "lib/critcl-class/class.tcl"
                            The Tcl code implementing the package.

                     "lib/critcl-class/class.h"
                            C code template used by the package.

              dict84

              lassign84

                     "lib/util84/dict.tcl"

                     "lib/util84/lassign.tcl"
                            These  are two packages implementing forward compatibility emulations
                            of the dict and lassign commands introduced with Tcl 8.5.  These  are
                            used automatically when critcl is run by Tcl 8.4.

              stubs::*

                     "lib/stubs/*"
                            A  set  of  non-public  (still) packages which provide read and write
                            access to and represent Tcl  stubs  tables.  These  were  created  by
                            taking the "genStubs.tcl" helper application coming with the Tcl core
                            sources apart along its internal logical lines.

              critclf

                     "lib/critclf/"
                            Arjen Markus' work on a critcl/Fortran. The code is outdated and  has
                            not been adapted to the changes in critcl version 3 yet.

              autoscroll

              cmdline

              md5

              md5c

              platform

              snit

              snitbutton

              wikit  These  are  all  external  packages  whose  code  has  been  inlined  in the
                     repository for easier development (less dependencies to pull),  and  quicker
                     deployment from the repository (generation of starkit and -pack).

                     The  packages autoscroll, snit, snitbutton, and wikit are for the support of
                     the Wikit GUI  accessible  from  starkit  and  -pack  when  the  application
                     functionality (critcl::app) is run with an empty command line.

                     TODO:  These  should  all  be  checked  against their origin for updates and
                     changes since they were inlined.

AUTHORS

       Jean Claude Wippler, Steve Landers, Andreas Kupries

BUGS, IDEAS, FEEDBACK

       This document, and the package it describes,  will  undoubtedly  contain  bugs  and  other
       problems.   Please report them at https://github.com/andreas-kupries/critcl/issues.  Ideas
       for enhancements you may have for either package, application,  and/or  the  documentation
       are   also   very   welcome   and   should   be  reported  at  https://github.com/andreas-
       kupries/critcl/issues as well.

KEYWORDS

       C code, Embedded C Code, code generator, compile & run, compiler, dynamic code generation,
       dynamic   compilation,   generate  package,  linker,  on  demand  compilation,  on-the-fly
       compilation

CATEGORY

       Glueing/Embedded C code

COPYRIGHT

       Copyright (c) Jean-Claude Wippler
       Copyright (c) Steve Landers
       Copyright (c) 2011-2013 Andreas Kupries