From 382a35e21340439b0c2557cc125fb12ac5d135e3 Mon Sep 17 00:00:00 2001 From: Steve Bennett Date: Mon, 30 May 2011 12:36:30 +1000 Subject: Create static extension loader dynamically Makes it easier when adding new extensions Signed-off-by: Steve Bennett --- Makefile.in | 13 +++++---- jim-load-static-exts.c | 71 ----------------------------------------------- make-load-static-exts.tcl | 45 ++++++++++++++++++++++++++++++ 3 files changed, 52 insertions(+), 77 deletions(-) delete mode 100644 jim-load-static-exts.c create mode 100644 make-load-static-exts.tcl diff --git a/Makefile.in b/Makefile.in index 4978864..256dbee 100644 --- a/Makefile.in +++ b/Makefile.in @@ -34,7 +34,7 @@ endif .EXPORT_ALL_VARIABLES: -OBJS := jim-subcmd.o jim-interactive.o jim-format.o jim.o utf8.o jimregexp.o @EXTRA_OBJS@ +OBJS := load-static-exts.o jim-subcmd.o jim-interactive.o jim-format.o jim.o utf8.o jimregexp.o @EXTRA_OBJS@ JIMSH := jimsh@EXEEXT@ @@ -46,9 +46,7 @@ EXTENSION_TCL := $(patsubst %,%.tcl,@JIM_TCL_EXTENSIONS@) # Create C extensions from pure Tcl extensions jim-%.c: %.tcl - @tclsh@ @srcdir@/make-c-ext.tcl $< >$@ - -OBJS += jim-load-static-exts.o + @tclsh@ @srcdir@/make-c-ext.tcl $< >$@ || ( rm $@; exit 1) all: $(JIMSH) $(EXTENSION_MODS) @@ -82,9 +80,12 @@ ifneq (@JIM_UTF8@,) utf8.o: unicode_mapping.c unicode_mapping.c: @srcdir@/UnicodeData.txt @srcdir@/parse-unidata.tcl - @tclsh@ @srcdir@/parse-unidata.tcl @srcdir@/UnicodeData.txt >$@ + @tclsh@ @srcdir@/parse-unidata.tcl @srcdir@/UnicodeData.txt >$@ || ( rm $@; exit 1) endif +load-static-exts.c: @srcdir@/make-load-static-exts.tcl Makefile + @tclsh@ @srcdir@/make-load-static-exts.tcl @JIM_EXTENSIONS@ >$@ || ( rm $@; exit 1) + ifeq ($(jim_libtype),static) $(LIBJIM): $(OBJS) $(EXTENSION_OBJS) $(AR) cr $@ $^ @@ -102,7 +103,7 @@ Tcl.html: jim_tcl.txt @tclsh@ @srcdir@/make-index $^ | asciidoc -o $@ -d manpage - || cp @srcdir@/Tcl_shipped.html Tcl.html clean: - rm -f *.o *.so lib*.a $(JIMSH) Tcl.html unicode_mapping.c @GENERATED_SRCS@ + rm -f *.o *.so lib*.a $(JIMSH) Tcl.html unicode_mapping.c load-static-exts.c @GENERATED_SRCS@ distclean: clean rm -f jimautoconf.h jim-config.h Makefile config.log diff --git a/jim-load-static-exts.c b/jim-load-static-exts.c deleted file mode 100644 index efa0303..0000000 --- a/jim-load-static-exts.c +++ /dev/null @@ -1,71 +0,0 @@ -#include "jim.h" -#include "jimautoconf.h" - -#define LOAD_EXT(n) \ - extern int Jim_ ## n ## Init(Jim_Interp *); \ - Jim_ ## n ## Init(interp); - -int Jim_InitStaticExtensions(Jim_Interp *interp) -{ -#ifdef jim_ext_stdlib - LOAD_EXT(stdlib); -#endif -#ifdef jim_ext_package - LOAD_EXT(package); -#endif -#ifdef jim_ext_load - LOAD_EXT(load); -#endif -#ifdef jim_ext_aio - LOAD_EXT(aio); -#endif -#ifdef jim_ext_readdir - LOAD_EXT(readdir); -#endif -#ifdef jim_ext_regexp - LOAD_EXT(regexp); -#endif -#ifdef jim_ext_eventloop - LOAD_EXT(eventloop); -#endif -#ifdef jim_ext_file - LOAD_EXT(file); -#endif -#ifdef jim_ext_exec - LOAD_EXT(exec); -#endif -#ifdef jim_ext_clock - LOAD_EXT(clock); -#endif -#ifdef jim_ext_glob - LOAD_EXT(glob); -#endif -#ifdef jim_ext_array - LOAD_EXT(array); -#endif -#ifdef jim_ext_posix - LOAD_EXT(posix); -#endif -#ifdef jim_ext_signal - LOAD_EXT(signal); -#endif -#ifdef jim_ext_tclcompat - LOAD_EXT(tclcompat); -#endif -#ifdef jim_ext_syslog - LOAD_EXT(syslog); -#endif -#ifdef jim_ext_oo - LOAD_EXT(oo); -#endif -#ifdef jim_ext_tree - LOAD_EXT(tree); -#endif -#ifdef jim_ext_pack - LOAD_EXT(pack); -#endif -#ifdef jim_ext_binary - LOAD_EXT(binary); -#endif - return JIM_OK; -} 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 \} -- cgit v1.1