diff options
| author | hypnotoad <yoda@etoyoc.com> | 2016-09-14 15:11:12 (GMT) |
|---|---|---|
| committer | hypnotoad <yoda@etoyoc.com> | 2016-09-14 15:11:12 (GMT) |
| commit | a4dbdda70039562e22ccf70611cf68cfe09f41c1 (patch) | |
| tree | 6aa3ca2f9354d27a784d912f7e9a5c69d6cf6974 | |
| parent | 5bf83d86b6b6d8581410139efdc0312b88b99831 (diff) | |
| download | tcl-a4dbdda70039562e22ccf70611cf68cfe09f41c1.zip tcl-a4dbdda70039562e22ccf70611cf68cfe09f41c1.tar.gz tcl-a4dbdda70039562e22ccf70611cf68cfe09f41c1.tar.bz2 | |
Adding build scripts to implement Tip#453
| -rw-r--r-- | pkgs/make.tcl | 165 | ||||
| -rw-r--r-- | pkgs/packages.tcl | 92 |
2 files changed, 257 insertions, 0 deletions
diff --git a/pkgs/make.tcl b/pkgs/make.tcl new file mode 100644 index 0000000..94a4050 --- /dev/null +++ b/pkgs/make.tcl @@ -0,0 +1,165 @@ +### +# This file contains instructions for how to build the Odielib library +# It will produce the following files in whatever directory it was called from: +# +# * odielibc.mk - A Makefile snippet needed to compile the odielib sources +# * odielibc.c - A C file which acts as the loader for odielibc +# * logicset.c/h - A c +# * (several .c and .h files) - C sources that are generated on the fly by automation +### +# Ad a "just in case" version or practcl we ship locally + +set ::CWD [pwd] +set ::project(builddir) $::CWD +set ::project(srcdir) [file dirname [file dirname [file normalize [info script]]]] +set ::project(sandbox) [file dirname $::project(srcdir)] +set ::project(download) [file join $::project(sandbox) download] +set ::project(teapot) [file join $::project(sandbox) teapot] +source [file join $::CWD .. library practcl practcl.tcl] +array set ::project [::practcl::config.tcl $CWD] + +set SRCPATH $::project(srcdir) +set SANDBOX $::project(sandbox) +file mkdir $CWD/build + +::practcl::target implement { + triggers {} +} +::practcl::target tcltk { + depends deps + triggers {script-packages script-pkgindex} +} +::practcl::target basekit { + depends {deps tcltk} + triggers {} + filename [file join $CWD tclkit_bare$::project(EXEEXT)] +} +::practcl::target packages { + depends {deps tcltk} +} +::practcl::target distclean {} +::practcl::target example { + depends basekit +} + +switch [lindex $argv 0] { + autoconf - + pre - + deps { + ::practcl::trigger implement + } + os { + puts "OS: [practcl::os]" + parray ::project + exit 0 + } + wrap { + ::practcl::depends basekit + } + all { + # Auto detect missing bits + foreach {item obj} $::make_objects { + if {[$obj check]} { + $obj trigger + } + } + } + package { + ::practcl::trigger packages + } + default { + ::practcl::trigger {*}$argv + } +} + +parray make + +set ::CWD [pwd] +::practcl::tclkit create BASEKIT {} +BASEKIT define set name tclkit +BASEKIT define set pkg_name tclkit +BASEKIT define set pkg_version 8.7.0a +BASEKIT define set localpath tclkit +BASEKIT define set profile devel +BASEKIT source [file join $::CWD packages.tcl] + +if {$make(distclean)} { + # Clean all source code back to it's pristine state from fossil + foreach item [BASEKIT link list package] { + $item go + set projdir [$item define get localsrcdir] + if {$projdir ne {} && [file exists $projdir]} { + fossil $projdir clean -force + } + } +} + +file mkdir [file join $CWD build] + +if {$make(tcltk)} { + ### + # Download our required packages + ### + set tcl_config_opts {} + set tk_config_opts {} + switch [::practcl::os] { + windows { + #lappend tcl_config_opts --disable-stubs + } + linux { + lappend tk_config_opts --enable-xft=no --enable-xss=no + } + macosx { + lappend tcl_config_opts --enable-corefoundation=yes --enable-framework=no + lappend tk_config_opts --enable-aqua=yes + } + } + lappend tcl_config_opts --with-tzdata --prefix [BASEKIT define get prefix] + BASEKIT project TCLCORE define set config_opts $tcl_config_opts + BASEKIT project TCLCORE go + set _TclSrcDir [BASEKIT project TCLCORE define get localsrcdir] + BASEKIT define set tclsrcdir $_TclSrcDir + lappend tk_config_opts --with-tcl=$_TclSrcDir + BASEKIT project TKCORE define set config_opts $tk_config_opts + BASEKIT project TCLCORE compile + BASEKIT project TKCORE compile +} + +if {$make(basekit)} { + BASEKIT implement $CWD + ::practcl::build::static-tclsh $target(basekit) BASEKIT +} + +if {[lindex $argv 0] eq "package"} { + #set result {} + foreach item [lrange $argv 1 end] { + set obj [BASEKIT project $item] + puts [list build $item [$obj define get static] [info object class $obj]] + if {[string is true [$obj define get static]]} { + $obj compile + } + if {[string is true [$obj define get vfsinstall]]} { + $obj install-vfs + } + } + #puts "RESULT: $result" +} elseif {$make(packages)} { + foreach item [BASEKIT link list package] { + if {[string is true [$item define get static]]} { + $item compile + } + if {[string is true [$item define get vfsinstall]]} { + $item install-vfs + } + } +} + + +if {$make(example)} { + file mkdir [file join $CWD example.vfs] + BASEKIT wrap $CWD example example.vfs +} + +if {[lindex $argv 0] eq "wrap"} { + BASEKIT wrap $CWD {*}[lrange $argv 1 end] +} diff --git a/pkgs/packages.tcl b/pkgs/packages.tcl new file mode 100644 index 0000000..2a84971 --- /dev/null +++ b/pkgs/packages.tcl @@ -0,0 +1,92 @@ +###
+# This script implements a basic TclTkit with statically linked
+# Tk, sqlite, threads, udp, and mmtk (which includes canvas3d and tkhtml)
+###
+
+set CWD [pwd]
+
+my define set [array get ::project]
+set os [::practcl::os]
+my define set os $os
+puts [list BASEKIT SANDBOX $::project(sandbox)]
+my define set platform $::project(TEA_PLATFORM)
+my define set prefix /zvfs
+my define set sandbox [file normalize $::project(sandbox)]
+my define set installdir [file join $::project(sandbox) pkg]
+my define set teapot [file join $::project(sandbox) teapot]
+my define set USEMSVC [info exists env(VisualStudioVersion)]
+my define set prefix_broken_destdir [file join $::project(sandbox) tmp]
+my define set HOST $os
+my define set TARGET $os
+my define set tclkit_bare [file join $CWD tclkit_bare$::project(EXEEXT)]
+
+my define set name tclkit
+my define set output_c tclkit.c
+my define set libs {}
+
+my add_project TCLCORE {
+ class subproject.core
+ name tcl
+ tag release
+ static 1
+}
+my project TCLCORE define set srcdir [file dirname $::project(sandbox)]
+
+my add_project TKCORE {
+ class subproject.core
+ name tk
+ tag release
+ static 1
+ autoload 0
+ pkg_name Tk
+ initfunc Tk_Init
+}
+
+my add_project tclconfig {
+ profile {
+ release: 3dfb97da548fae506374ac0015352ac0921d0cc9
+ devel: practcl
+ }
+ class subproject
+ preload 1
+ vfsinstall 0
+}
+
+my add_project thread {
+ profile {
+ release: 2a36d0a6c31569bfb3562e3d58e9e8204f447a7e
+ devel: practcl
+ }
+ class subproject.binary
+ pkg_name Thread
+ autoload 1
+ initfunc Thread_Init
+ static 1
+}
+
+my add_project sqlite {
+ profile {
+ release: 40ffdfb26af3e7443b2912e1039c06bf9ed75846
+ devel: practcl
+ }
+ class subproject.binary
+ pkg_name sqlite3
+ autoload 1
+ initfunc Sqlite3_Init
+ static 1
+ vfsinstall 0
+}
+
+my add_project udp {
+ profile {
+ release: 7c396e1a767db57b07b48daa8e0cfc0ea622bbe9
+ devel: practcl
+ }
+ class subproject.binary
+ static 1
+ autoload 1
+ initfunc Udp_Init
+ pkg_name udp
+ vfsinstall 0
+}
+
|
