summaryrefslogtreecommitdiff
path: root/make-load-static-exts.tcl
diff options
context:
space:
mode:
authorSteve Bennett <steveb@workware.net.au>2011-05-30 12:36:30 +1000
committerSteve Bennett <steveb@workware.net.au>2011-06-10 14:00:34 +1000
commit382a35e21340439b0c2557cc125fb12ac5d135e3 (patch)
tree236ceb935f3f7805243dcce4dca4304000524220 /make-load-static-exts.tcl
parentdbe7729d6b03470bf91de94a998b1c2e56b4ee3b (diff)
Create static extension loader dynamically
Makes it easier when adding new extensions Signed-off-by: Steve Bennett <steveb@workware.net.au>
Diffstat (limited to 'make-load-static-exts.tcl')
-rw-r--r--make-load-static-exts.tcl45
1 files changed, 45 insertions, 0 deletions
diff --git a/make-load-static-exts.tcl b/make-load-static-exts.tcl
new file mode 100644
index 0000000..955127d
--- /dev/null
+++ b/make-load-static-exts.tcl
@@ -0,0 +1,45 @@
+#!/usr/bin/env tclsh
+
+# Usage: make-load-static-exts extname ... >load-static-exts.c
+
+# Creates load-static-exts.c based on the configured static extensions
+
+# There are some dependencies on static extensions which require
+# a certain load order. Do this by setting priorities and sorting.
+
+array set pri {
+ stdlib 0
+ readdir 1
+ glob 2
+ oo 1
+ tree 2
+ pack 1
+ binary 2
+}
+
+foreach i $argv {
+ set p 1
+ if {[info exists pri($i)]} {
+ set p $pri($i)
+ }
+ lappend exts [list $p $i]
+}
+set exts [lsort $exts]
+
+puts {
+/* autogenerated - do not edit */
+#include "jim.h"
+#include "jimautoconf.h"
+int Jim_InitStaticExtensions(Jim_Interp *interp)
+}
+puts \{
+
+foreach e $exts {
+ set ext [lindex $e 1]
+ puts "\textern int Jim_${ext}Init(Jim_Interp *);"
+ puts "\tJim_${ext}Init(interp);"
+}
+
+puts "\treturn JIM_OK;"
+
+puts \}