From a4dbdda70039562e22ccf70611cf68cfe09f41c1 Mon Sep 17 00:00:00 2001 From: hypnotoad Date: Wed, 14 Sep 2016 15:11:12 +0000 Subject: Adding build scripts to implement Tip#453 --- pkgs/make.tcl | 165 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ pkgs/packages.tcl | 92 ++++++++++++++++++++++++++++++ 2 files changed, 257 insertions(+) create mode 100644 pkgs/make.tcl create mode 100644 pkgs/packages.tcl 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 +} + -- cgit v0.12