summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhypnotoad <yoda@etoyoc.com>2016-09-14 15:11:12 (GMT)
committerhypnotoad <yoda@etoyoc.com>2016-09-14 15:11:12 (GMT)
commita4dbdda70039562e22ccf70611cf68cfe09f41c1 (patch)
tree6aa3ca2f9354d27a784d912f7e9a5c69d6cf6974
parent5bf83d86b6b6d8581410139efdc0312b88b99831 (diff)
downloadtcl-a4dbdda70039562e22ccf70611cf68cfe09f41c1.zip
tcl-a4dbdda70039562e22ccf70611cf68cfe09f41c1.tar.gz
tcl-a4dbdda70039562e22ccf70611cf68cfe09f41c1.tar.bz2
Adding build scripts to implement Tip#453
-rw-r--r--pkgs/make.tcl165
-rw-r--r--pkgs/packages.tcl92
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
+}
+