Index: Makefile.in ================================================================== --- Makefile.in +++ Makefile.in @@ -21,11 +21,11 @@ TCLCONFIGPATH = @TCLCONFIGPATH@ TCL_PACKAGE_PATH = @TCL_PACKAGE_PATH@ tcllibdir = $(shell if echo "$(libdir)" | grep '^UNSPECIFIED' >/dev/null; then echo $(TCL_PACKAGE_PATH); else echo "$(libdir)"; fi) PACKAGE_INSTALL_DIR = $(tcllibdir)/$(PACKAGE_NAME)-$(PACKAGE_VERSION) -TCC_CONFIGURE_OPTS = --cc='$(CC)' --extra-cflags='$(CPPFLAGS) $(CFLAGS) -DCONFIG_TCC_STATIC=1' --with-tcl=$(TCLCONFIGPATH) --sysincludepaths='{B}/include@HOST_PATH_SEPARATOR@{B}/include/1@HOST_PATH_SEPARATOR@{B}/include/2@HOST_PATH_SEPARATOR@{B}/include/3@HOST_PATH_SEPARATOR@{B}/include/4@HOST_PATH_SEPARATOR@{B}/include/5@HOST_PATH_SEPARATOR@{B}/include/6@HOST_PATH_SEPARATOR@{B}/include/7@HOST_PATH_SEPARATOR@{B}/include/8@HOST_PATH_SEPARATOR@{B}/include/9' --libpaths='{B}/lib' @TCC_CONFIGURE_OPTS@ +TCC_CONFIGURE_OPTS = --cc='$(CC)' --extra-cflags='$(CPPFLAGS) $(CFLAGS) @TCC_EXTRA_CFLAGS@' --with-tcl=$(TCLCONFIGPATH) --sysincludepaths='{B}/include@HOST_PATH_SEPARATOR@{B}/include/1@HOST_PATH_SEPARATOR@{B}/include/2@HOST_PATH_SEPARATOR@{B}/include/3@HOST_PATH_SEPARATOR@{B}/include/4@HOST_PATH_SEPARATOR@{B}/include/5@HOST_PATH_SEPARATOR@{B}/include/6@HOST_PATH_SEPARATOR@{B}/include/7@HOST_PATH_SEPARATOR@{B}/include/8@HOST_PATH_SEPARATOR@{B}/include/9' --libpaths='{B}/lib' @TCC_CONFIGURE_OPTS@ INSTALL_HEADERS = tcl.h assert.h ctype.h errno.h float.h limits.h locale.h math.h setjmp.h signal.h stdarg.h stddef.h stdint.h stdio.h stdlib.h string.h time.h wctype.h srcdir = @srcdir@ host_os = @host_os@ @SET_MAKE@ DELETED aclocal/dlsym.m4 Index: aclocal/dlsym.m4 ================================================================== --- aclocal/dlsym.m4 +++ /dev/null @@ -1,36 +0,0 @@ -AC_DEFUN([TCC4TCL_FIND_DLOPEN], [ - AC_CHECK_HEADERS_ONCE([dlfcn.h]) - - AC_SEARCH_LIBS([dlsym], [dl dld], [ - AC_DEFINE([HAVE_DLSYM], [1], [Have the dlsym function]) - ], [ - AC_CHECK_HEADERS([windows.h]) - - AC_MSG_CHECKING([for working EnumProcessModules]) - SAVE_LIBS="$LIBS" - LIBS="$LIBS -lpsapi" - AC_LINK_IFELSE([ - AC_LANG_PROGRAM([ -#ifdef HAVE_WINDOWS_H -# include -#endif -#include - ], [ -HANDLE cur_proc; -DWORD needed; - -needed = 0; - -cur_proc = GetCurrentProcess(); -EnumProcessModules(cur_proc, NULL, 0, &needed); - ] - )], [ - AC_DEFINE([HAVE_ENUMPROCESSMODULES], [1], [Have the EnumProcessModules function]) - AC_DEFINE([HAVE_PSAPI_H], [1], [Have the psapi.h header file]) - AC_MSG_RESULT([found]) - ], [ - LIBS="$SAVE_LIBS" - AC_MSG_RESULT([not found]) - ]) - ]) -]) Index: build/build-platform ================================================================== --- build/build-platform +++ build/build-platform @@ -3,13 +3,18 @@ platform="$1" shift if [ -z "${platform}" ]; then echo "Platforms:" + echo " native" fi for dir in work/libtclkit-*/ __fail__; do + if [ "${platform}" = 'native' ]; then + break + fi + if [ "${dir}" == '__fail__' ]; then if [ -z "${platform}" ]; then exit 0 fi @@ -30,10 +35,13 @@ fi done dir="$(pwd)/${dir}" case "${platform}" in + native) + platform='' + ;; linux-i386) platform="x86_64-redhat5-linux 32" ;; linux-mipsel) platform="mipsel-unknown-linux-uclibc" @@ -68,12 +76,39 @@ TCLKIT_SDK_DIR="${dir}" export TCLKIT_SDK_DIR make distclean -eval `~/root/cross-compilers/setup-cc $platform` + +if [ "${platform}" != '' ]; then + eval `~/root/cross-compilers/setup-cc $platform` + + platform="$(echo "${platform}" | cut -f1 -d ' ')" +fi -platform="$(echo "${platform}" | cut -f1 -d ' ')" +rm -rf INST +if [ "${platform}" = '' ]; then + ./configure --libdir="$(pwd)/INST" "$@" || exit 1 +else + ./configure --host="${platform}" --libdir="$(pwd)/INST" --with-tcl="${dir}/lib" "$@" || exit 1 +fi -./configure --host="${platform}" --libdir="$(pwd)/INST" --with-tcl="${dir}/lib" "$@" -make +make || exit 1 make install + +case "${platform}" in + i586-mingw32msvc) + make TCLSH="wine ${dir}/lib/tclsh.exe" test + ;; + x86_64-w64-mingw32) + WINEPREFIX="${HOME}/.wine64" + export WINEPREFIX + + make TCLSH="wine64 ${dir}/lib/tclsh.exe" test + ;; + x86_64-redhat5-linux) + make TCLSH="${dir}/lib/tclsh" test + ;; + '') + make test + ;; +esac Index: configure.ac ================================================================== --- configure.ac +++ configure.ac @@ -36,17 +36,20 @@ DC_GET_SHOBJFLAGS dnl Only export symbols we wish to expose TARGET="tcc4tcl.${SHOBJEXT}" else + TCC_EXTRA_CFLAGS="${TCC_EXTRA_CFLAGS} -DCONFIG_TCC_STATIC=1" + AC_CHECK_TOOL([RANLIB], [ranlib]) AC_CHECK_TOOL([AR], [ar]) TARGET="tcc4tcl-static.a" fi AC_SUBST(TARGET) AC_SUBST(TCC4TCL_TARGET) +AC_SUBST(TCC_EXTRA_CFLAGS) no_dlopen='0' AC_ARG_WITH([dlopen], AS_HELP_STRING([--without-dlopen], [do not define dlopen/dlclose/dlerror]), [ if test "$withval" = "no"; then no_dlopen='1' @@ -68,13 +71,10 @@ HOST_PATH_SEPARATOR=':' ;; esac AC_SUBST(HOST_PATH_SEPARATOR) -dnl Determine how to lookup symbols at runtime -TCC4TCL_FIND_DLOPEN - dnl Perform Tcl Extension required stuff TCLEXT_INIT dnl This must be done last since it breaks the compilation if test "${TCC4TCL_TARGET}" = "shared"; then Index: tcc4tcl.c ================================================================== --- tcc4tcl.c +++ tcc4tcl.c @@ -20,19 +20,10 @@ */ #include #include #include "tcc.h" -#ifdef HAVE_DLFCN_H -#include -#endif -#ifdef HAVE_PSAPI_H -# ifdef HAVE_WINDOWS_H -# include -# endif -# include -#endif struct TclTCCState { TCCState *s; int relocated; }; @@ -67,18 +58,16 @@ Tcl_Obj *sym_addr; static CONST char *options[] = { "add_include_path", "add_file", "add_library", "add_library_path", "add_symbol", "command", "compile", "define", "get_symbol", "output_file", "undefine", - "add_runtime_sym", (char *) NULL }; enum options { TCC4TCL_ADD_INCLUDE, TCC4TCL_ADD_FILE, TCC4TCL_ADD_LIBRARY, TCC4TCL_ADD_LIBRARY_PATH, TCC4TCL_ADD_SYMBOL, TCC4TCL_COMMAND, TCC4TCL_COMPILE, - TCC4TCL_DEFINE, TCC4TCL_GET_SYMBOL, TCC4TCL_OUTPUT_FILE, TCC4TCL_UNDEFINE, - TCC4TCL_ADD_RUNTIME_SYM + TCC4TCL_DEFINE, TCC4TCL_GET_SYMBOL, TCC4TCL_OUTPUT_FILE, TCC4TCL_UNDEFINE }; char *str; ts = (struct TclTCCState *) cdata; s = ts->s; @@ -236,59 +225,10 @@ Tcl_WrongNumArgs(interp, 2, objv, "symbol"); return TCL_ERROR; } tcc_undefine_symbol(s,Tcl_GetString(objv[2])); return TCL_OK; - case TCC4TCL_ADD_RUNTIME_SYM: - if (objc != 3) { - Tcl_WrongNumArgs(interp, 2, objv, "symbol_name"); - return(TCL_ERROR); - } - - str = Tcl_GetString(objv[2]); -#ifdef HAVE_DLSYM - val_p = dlsym(NULL, str); -#elif defined(HAVE_ENUMPROCESSMODULES) - val_p = NULL; - { - HANDLE cur_proc; - HMODULE *modules; - DWORD needed, i; - - needed = 0; - - cur_proc = GetCurrentProcess(); - EnumProcessModules(cur_proc, NULL, 0, &needed); - - if (needed > 0) { - modules = (void *) ckalloc(needed); - if (EnumProcessModules(cur_proc, modules, needed, &needed)) { - for (i = 0; i < (needed / sizeof(HMODULE)); i++) { - val_p = (void *) GetProcAddress(modules[i], str); - - if (val_p) { - break; - } - } - } - - ckfree((void *) modules); - } - } -#else - val_p = NULL; -#endif - - if (val_p == NULL) { - Tcl_AppendResult(interp, "symbol not found", NULL); - - return(TCL_ERROR); - } - - tcc_add_symbol(s, Tcl_GetString(objv[2]), val_p); - - return(TCL_OK); default: Tcl_Panic("internal error during option lookup"); } return TCL_OK; } Index: tcc4tcl.tcl ================================================================== --- tcc4tcl.tcl +++ tcc4tcl.tcl @@ -354,16 +354,16 @@ return $code } #--------------------------------------------------------------------- -proc ::tcc4tcl::cproc {name adefs rtype {body "#"} {addfuncs ""}} { +proc ::tcc4tcl::cproc {name adefs rtype {body "#"}} { foreach {code cbody} [wrap $name $adefs $rtype $body] break ::tcc4tcl::ccode $code - uplevel 1 [list ::tcc4tcl::ccommand $name {dummy ip objc objv} $cbody $addfuncs] + uplevel 1 [list ::tcc4tcl::ccommand $name {dummy ip objc objv} $cbody] } #--------------------------------------------------------------------- proc ::tcc4tcl::cdata {name data} { # Extract bytes from data @@ -407,11 +407,11 @@ return $name } #------------------------------------------------------------------- -proc ::tcc4tcl::ccommand {procname anames body {addfuncs ""}} { +proc ::tcc4tcl::ccommand {procname anames body} { variable tcc # Fully qualified proc name if {[string match "::*" $procname]} { # procname is already absolute @@ -463,18 +463,10 @@ append code "int $cname (ClientData $v(clientdata),Tcl_Interp *$v(interp)," append code "int $v(objc),Tcl_Obj *CONST $v(objv)\[\]) {" "\n" append code $body "\n" append code "}" "\n" - if {[llength $addfuncs] > 0} { - set tcc(cc) [tcc4tcl::new] - - foreach addfunc $addfuncs { - $tcc(cc) add_runtime_sym $addfunc - } - } - if {[catch { uplevel 1 [list tcc4tcl::cc $code] } err]} { unset tcc(cc) tcc4tcl::reset Index: test ================================================================== --- test +++ test @@ -26,11 +26,11 @@ if (rv == 0) { return(TCL_OK); }; return(TCL_ERROR); -} [list mkdir] +} puts [test 1] puts [test1 1] puts [test3 1]