Overview
Comment: | In flexible/standalone mode include the core functionality as a header to avoid duplicate symbols |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
b8cca3a6b42d9aedb2d9134b30ef668f |
User & Date: | rkeene on 2019-05-08 19:42:23 |
Other Links: | manifest | tags |
Context
2019-05-22
| ||
14:28 | Improved minirivet to use lists check-in: 9b0190676f user: rkeene tags: trunk | |
2019-05-08
| ||
19:42 | In flexible/standalone mode include the core functionality as a header to avoid duplicate symbols check-in: b8cca3a6b4 user: rkeene tags: trunk | |
17:25 | For --dump-tcl mode dump all dependency C files as well check-in: 7664854ef9 user: rkeene tags: trunk | |
Changes
Modified Makefile from [1a2e05ec17] to [beb49ead95].
1 2 3 4 5 6 7 8 9 10 11 | CPPFLAGS := -I. -DUSE_TCL_STUBS=1 -DXVFS_MODE_FLEXIBLE CFLAGS := -fPIC -g3 -ggdb3 -Wall LDFLAGS := LIBS := -ltclstub8.6 all: example.so example.c: $(shell find example -type f) $(shell find lib -type f) xvfs.c.rvt xvfs-create Makefile ./xvfs-create --directory example --name example > example.c.new mv example.c.new example.c | | < < < | | < | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | CPPFLAGS := -I. -DUSE_TCL_STUBS=1 -DXVFS_MODE_FLEXIBLE CFLAGS := -fPIC -g3 -ggdb3 -Wall LDFLAGS := LIBS := -ltclstub8.6 all: example.so example.c: $(shell find example -type f) $(shell find lib -type f) xvfs.c.rvt xvfs-create Makefile ./xvfs-create --directory example --name example > example.c.new mv example.c.new example.c example.o: example.c xvfs-core.h xvfs-core.c Makefile $(CC) $(CPPFLAGS) $(CFLAGS) -o example.o -c example.c example.so: example.o Makefile $(CC) $(CFLAGS) $(LDFLAGS) -shared -o example.so example.o $(LIBS) test: example.so echo 'if {[catch { load ./example.so Xvfs_example; source //xvfs:/example/main.tcl }]} { puts stderr $$::errorInfo; exit 1 }; exit 0' | tclsh clean: rm -f example.so example.o example.c distclean: clean .PHONY: all clean distclean test |
Modified xvfs-core.c from [a09ee5d8ff] to [1dde3041c8].
︙ | ︙ | |||
123 124 125 126 127 128 129 | * handler * 3. flexible -- Attempts to find a core Xvfs instance for the * process at runtime, if found do #2, otherwise * fallback to #1 * */ static Tcl_Filesystem xvfs_tclfs_standalone_fs; | | | 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 | * handler * 3. flexible -- Attempts to find a core Xvfs instance for the * process at runtime, if found do #2, otherwise * fallback to #1 * */ static Tcl_Filesystem xvfs_tclfs_standalone_fs; static int xvfs_standalone_register(Tcl_Interp *interp, struct Xvfs_FSInfo *fsInfo) { int tcl_ret; static int registered = 0; /* * Ensure this instance is not already registered */ if (registered) { |
︙ | ︙ | |||
196 197 198 199 200 201 202 | } return(TCL_OK); } #endif /* XVFS_MODE_STANDALONE || XVFS_MODE_FLEXIBLE */ #if defined(XVFS_MODE_FLEXIBLE) | | | 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 | } return(TCL_OK); } #endif /* XVFS_MODE_STANDALONE || XVFS_MODE_FLEXIBLE */ #if defined(XVFS_MODE_FLEXIBLE) static int xvfs_flexible_register(Tcl_Interp *interp, struct Xvfs_FSInfo *fsInfo) { ClientData fsHandlerDataRaw; struct xvfs_tclfs_server_info *fsHandlerData; const Tcl_Filesystem *fsHandler; int (*xvfs_register)(Tcl_Interp *interp, struct Xvfs_FSInfo *fsInfo); Tcl_Obj *rootPathObj; xvfs_register = &xvfs_standalone_register; |
︙ | ︙ |
Modified xvfs-core.h from [490b145452] to [689f90a830].
︙ | ︙ | |||
22 23 24 25 26 27 28 | #if defined(XVFS_MODE_STANDALONE) /* * In standalone mode, we just redefine calls to * Xvfs_Register() to go to the xvfs_standalone_register() * function */ # define Xvfs_Register xvfs_standalone_register | | | < | > | > < | > > > > > > > > | 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | #if defined(XVFS_MODE_STANDALONE) /* * In standalone mode, we just redefine calls to * Xvfs_Register() to go to the xvfs_standalone_register() * function */ # define Xvfs_Register xvfs_standalone_register static XVFS_REGISTER_INTERFACE(Xvfs_Register) #elif defined(XVFS_MODE_FLEXIBLE) /* * In flexible mode, we just redefine calls to * Xvfs_Register() to go to the xvfs_flexible_register() * function which will either dispatch to a common * core XVFS or use the xvfs_standalone_register() * function as a standalone would. */ # define Xvfs_Register xvfs_flexible_register static XVFS_REGISTER_INTERFACE(Xvfs_Register) #elif defined(XVFS_MODE_CLIENT) /* * In client mode we declare an external symbol named * Xvfs_Register() that must be provided by the environment * we are loaded into */ extern XVFS_REGISTER_INTERFACE(Xvfs_Register) #elif defined(XVFS_MODE_SERVER) /* * In server mode we are going to implementing Xvfs_Register() * for flexible/client modes, just forward declare it */ XVFS_REGISTER_INTERFACE(Xvfs_Register) #else # error Unsupported XVFS_MODE #endif /* * In flexible or standalone mode, directly include what * would otherwise be a separate translation unit, to * avoid symbols leaking */ #if defined(XVFS_MODE_FLEXIBLE) || defined(XVFS_MODE_STANDALONE) #include <xvfs-core.c> #endif #endif |
Modified xvfs-create from [1c8fe7fbaa] to [58057edf98].
︙ | ︙ | |||
18 19 20 21 22 23 24 | ::minirivet::parse $template } "dump-tcl" { set xvfs_tcl [file join $sourceDirectory lib xvfs xvfs.tcl] set xvfs_core_h [file join $sourceDirectory xvfs-core.h] set xvfs_core_c [file join $sourceDirectory xvfs-core.c] | > | > > | 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | ::minirivet::parse $template } "dump-tcl" { set xvfs_tcl [file join $sourceDirectory lib xvfs xvfs.tcl] set xvfs_core_h [file join $sourceDirectory xvfs-core.h] set xvfs_core_c [file join $sourceDirectory xvfs-core.c] set cleanup { "#include <xvfs-core.h>" "" "#include <xvfs-core.c>" "" } set core_header_data "" append core_header_data [string map $cleanup [read [open $xvfs_core_h]]] "\n" append core_header_data [string map $cleanup [read [open $xvfs_core_c]]] "\n" puts "#! /usr/bin/env tclsh" puts "" |
︙ | ︙ |