1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
|
set srcdir [file dirname [file normalize [file join [pwd] [info script]]]]
set moddir [file dirname $srcdir]
set version 0.8.6
set module clay
set filename clay
if {[file exists [file join $moddir .. .. scripts practcl.tcl]]} {
source [file join $moddir .. .. scripts practcl.tcl]
} elseif {[file exists [file join $moddir .. practcl build doctool.tcl]]} {
source [file join $moddir .. practcl build doctool.tcl]
} else {
package require practcl 0.14
}
::practcl::doctool create AutoDoc
set fout [open [file join $moddir ${filename}.tcl] w]
dict set modmap %module% $module
dict set modmap %version% $version
dict set modmap %license% BSD
dict set modmap %filename% $filename
set authors {{Sean Woods} {<yoda@etoyoc.com>}}
puts $fout [string map $modmap {###
# %filename%.tcl
#
# Copyright (c) 2018 Sean Woods
#
# BSD License
###
# @@ Meta Begin
# Package %module% %version%
# Meta platform tcl
# Meta summary A minimalist framework for complex TclOO development
# Meta description This package introduces the method "clay" to both oo::object
# Meta description and oo::class which facilitate complex interactions between objects
# Meta description and their ancestor and mixed in classes.
# Meta category TclOO
# Meta subject framework
# Meta require {Tcl 8.6}}]
foreach {name email} $authors {
puts $fout "# Meta author $name"
}
puts $fout [string map $modmap {# Meta license %license%
# @@ Meta End
}]
puts $fout [string map $modmap {###
# Amalgamated package for %module%
# Do not edit directly, tweak the source in build/ and rerun
# build.tcl
###
package provide %module% %version%
namespace eval ::%module% {}
}]
# Track what files we have included so far
set loaded {}
lappend loaded build.tcl test.tcl
foreach file {
procs.tcl
core.tcl uuid.tcl
dict.tcl list.tcl dictargs.tcl
dialect.tcl
metaclass.tcl
ensemble.tcl
class.tcl
object.tcl
} {
lappend loaded $file
set content [::practcl::cat [file join $srcdir {*}$file]]
AutoDoc scan_text $content
puts $fout "###\n# START: [file tail $file]\n###"
puts $fout [::practcl::docstrip $content]
puts $fout "###\n# END: [file tail $file]\n###"
}
# These files can be loaded in any order
foreach file [lsort -dictionary [glob [file join $srcdir *.tcl]]] {
if {[file tail $file] in $loaded} continue
lappend loaded $file
set content [::practcl::cat [file join $srcdir {*}$file]]
AutoDoc scan_text $content
puts $fout "###\n# START: [file tail $file]\n###"
puts $fout [::practcl::docstrip $content]
puts $fout "###\n# END: [file tail $file]\n###"
}
# Provide some cleanup and our final package provide
puts $fout [string map $modmap {
namespace eval ::%module% {
namespace export *
}
}]
close $fout
###
# Build our pkgIndex.tcl file
###
set fout [open [file join $moddir pkgIndex.tcl] w]
puts $fout [string map $modmap {# Tcl package index file, version 1.1
# This file is generated by the "pkg_mkIndex" command
# and sourced either when an application starts up or
# by a "package unknown" script. It invokes the
# "package ifneeded" command to set up package-related
# information so that packages will be loaded automatically
# in response to "package require" commands. When this
# script is sourced, the variable $dir must contain the
# full path name of this file's directory.
if {![package vsatisfies [package provide Tcl] 8.6]} {return}
}]
puts $fout [string map $modmap {
package ifneeded %module% %version% [list source [file join $dir %module%.tcl]]
}]
close $fout
###
# Generate the test script
###
namespace eval ::clay {}
source [file join $srcdir procs.tcl]
set fout [open [file join $moddir $filename.test] w]
puts $fout {
namespace eval ::oo::dialect {}
set ::oo::dialect::has(tip470) 0
}
puts $fout [source [file join $srcdir test.tcl]]
puts $fout {
if {![package vsatisfies [package provide Tcl] 8.7]} {return}
puts "Repeating tests with 8.7 features"
namespace eval ::oo::dialect {}
set ::oo::dialect::has(tip470) 1
}
puts $fout [source [file join $srcdir test.tcl]]
close $fout
set manout [open [file join $moddir $filename.man] w]
puts $manout [AutoDoc manpage map $modmap \
header [::practcl::cat [file join $srcdir manual.txt]] \
authors $authors \
footer [::practcl::cat [file join $srcdir footer.txt]] \
]
close $manout
|