# -*- tcl -*- Copyright (c) 2012-2024 Andreas Kupries
# # ## ### ##### ######## ############# #####################
## Kettle package

# @@ Meta Begin
# Package kettle 0
# Meta platform tcl
# Meta author      {Andreas Kupries}
# Meta summary     Build support package.
# Meta description Kettle is a system to make building Tcl
# Meta description packages quick and easy. More importantly,
# Meta description possibly, to make writing the build system
# Meta description for Tcl packages easy.
# Meta description As such kettle is several things:
# Meta description (1) A DSL helping you to write build systems
# Meta description for your packages. (2) A package implementing
# Meta description this DSL. (3) An application which can serve
# Meta description as the interpreter for a build file containing
# Meta description commands in the above DSL.
# Meta subject {build support} critcl teapot {meta data}
# Meta subject doctools diagram
# Meta require {Tcl 8.5 9}
# Meta category Builder/Developer support
# Meta location https://core.tcl.tk/akupries/kettle
# @@ Meta End

# # ## ### ##### ######## ############# #####################
## Requisites

package require Tcl 8.5 9
namespace eval ::kettle {}

# # ## ### ##### ######## ############# #####################
## Export

namespace eval ::kettle {
    namespace export {[a-z]*}
    namespace ensemble create
}

# # ## ### ##### ######## ############# #####################
## @owns: app.tcl
## @owns: atexit.tcl
## @owns: benchmarks.tcl
## @owns: critcl.tcl
## @owns: depend.tcl
## @owns: doc.tcl
## @owns: figures.tcl
## @owns: gui.tcl
## @owns: invoke.tcl
## @owns: io.tcl
## @owns: lambda.tcl
## @owns: mdref.tcl
## @owns: meta.tcl
## @owns: options.tcl
## @owns: ovalidate.tcl
## @owns: path.tcl
## @owns: recipes.tcl
## @owns: special.tcl
## @owns: standard.tcl
## @owns: status.tcl
## @owns: stream.tcl
## @owns: strutil.tcl
## @owns: tcl.tcl
## @owns: tclapp.tcl
## @owns: testsuite.tcl
## @owns: tool.tcl
## @owns: try.tcl

# # ## ### ##### ######## ############# #####################

## The next two files are not sourced as part of the kettle application.
##
# The first is the main entry point for the 'test' and related
# recipes, i.e. the application running a specific .test file. It is
# used to communicate build configuration data into the test
# environment.
##
# The other provides lots of utilities to make writing tests easier.

## @owns: testmain.tcl
## @owns: testutilities.tcl

## The next three files are not sourced as part of the kettle application.
##
# The first is the main entry point for the 'benchmark' recipe, i.e. the
# application running a specific .bench file. It is used to communicate
# build configuration data into the benchmarking environment.
##
# The second provides lots of utilities to make writing tests easier.
##
# The third is the actual application, snarfed from Tcllib, implementing
# the benchmark commands and running files.

## @owns: benchmain.tcl
## @owns: benchutilities.tcl
## @!owns: libbench.tcl

# # ## ### ##### ######## ############# #####################

::apply {{selfdir} {
    # # ## ### ##### ######## ############# ##################### Foundation
    source $selfdir/atexit.tcl     ; # Application shutdown handlers.
    source $selfdir/lambda.tcl     ; # Nicer way of writing apply
    source $selfdir/try.tcl        ; # try/finally coded in Tcl, snarfed from 8.6
    source $selfdir/strutil.tcl    ; # String utilities.
    source $selfdir/io.tcl         ; # Message output support.
    # # ## ### ##### ######## ############# #####################
    source $selfdir/status.tcl     ; # General goal status.
    source $selfdir/path.tcl       ; # General path utilities.
    source $selfdir/mdref.tcl      ; # Teapot pkg ref utilities.
    source $selfdir/meta.tcl       ; # Teapot meta data utilities.
    source $selfdir/ovalidate.tcl  ; # Option Validation sub layer.
    source $selfdir/options.tcl    ; # Option management.
    # # ## ### ##### ######## ############# #####################
    source $selfdir/recipes.tcl    ; # Recipe management.
    source $selfdir/invoke.tcl     ; # Goal recursion via sub-processes.
    source $selfdir/tool.tcl       ; # Manage tool requirements.
    source $selfdir/stream.tcl     ; # Log streams
    # # ## ### ##### ######## ############# #####################
    source $selfdir/gui.tcl        ; # GUI support.
    source $selfdir/special.tcl    ; # Special commands.
    source $selfdir/app.tcl        ; # Application core.
    # # ## ### ##### ######## ############# #####################
    source $selfdir/standard.tcl   ; # Standard recipes.
    # # ## ### ##### ######## ############# #####################
    # # ## ### ##### ######## ############# ##################### DSL
    source $selfdir/depend.tcl     ; # dependency setup.
    source $selfdir/tclapp.tcl     ; # tcl script applications
    source $selfdir/figures.tcl    ; # figures       (diagram)
    source $selfdir/testsuite.tcl  ; # testsuite     (tcltest)
    source $selfdir/benchmarks.tcl ; # benchmarks    (tclbench)
    # # ## ### ##### ######## ############# #####################
    source $selfdir/doc.tcl        ; # documentation (doctools, gh-pages)
    # # ## ### ##### ######## ############# #####################
    source $selfdir/tcl.tcl        ; # tcl packages
    source $selfdir/critcl.tcl     ; # critcl v3 packages
    # # ## ### ##### ######## ############# #####################
    kettle::option::set @kettledir $selfdir
}} [file dirname [file normalize [info script]]]

# # ## ### ##### ######## ############# #####################
## Ready

package provide kettle 1.1
return

# # ## ### ##### ######## ############# #####################
