Overview
| Comment: | Updated to not build TCC as a static so that existing symbols could resolved by TCC itself |
|---|---|
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA1: |
fd6711ab7374b8fff538aa6ef3ad4869 |
| User & Date: | rkeene on 2014-06-16 04:48:58.333 |
| Other Links: | manifest | tags |
Context
|
2014-06-17
| ||
| 05:26 | tcc4tcl 0.19 check-in: 3c95a2ab7e user: rkeene tags: trunk, 0.19 | |
|
2014-06-16
| ||
| 04:48 | Updated to not build TCC as a static so that existing symbols could resolved by TCC itself check-in: fd6711ab73 user: rkeene tags: trunk | |
| 04:20 | Updated to allow external symbols to be resolved if dlopen() is available check-in: 82e8ebb242 user: rkeene tags: trunk | |
Changes
Modified Makefile.in
from [a0fe9448ac]
to [0a8186dc49].
| ︙ | ︙ | |||
19 20 21 22 23 24 25 | PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ 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) | | | 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
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) @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@
all: $(TARGET)
|
| ︙ | ︙ |
Deleted aclocal/dlsym.m4 version [9b676022d2].
Modified build/build-platform
from [af2d67d68b]
to [50ab5da7e8].
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#! /bin/bash
platform="$1"
shift
if [ -z "${platform}" ]; then
echo "Platforms:"
fi
for dir in work/libtclkit-*/ __fail__; do
if [ "${dir}" == '__fail__' ]; then
if [ -z "${platform}" ]; then
exit 0
fi
echo "No such platform: ${platform}" >&2
| > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#! /bin/bash
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
echo "No such platform: ${platform}" >&2
|
| ︙ | ︙ | |||
28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
break
fi
fi
done
dir="$(pwd)/${dir}"
case "${platform}" in
linux-i386)
platform="x86_64-redhat5-linux 32"
;;
linux-mipsel)
platform="mipsel-unknown-linux-uclibc"
;;
solaris-amd64)
| > > > | 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
break
fi
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"
;;
solaris-amd64)
|
| ︙ | ︙ | |||
66 67 68 69 70 71 72 |
;;
esac
TCLKIT_SDK_DIR="${dir}"
export TCLKIT_SDK_DIR
make distclean
| > > | | > > > > > | > > | > > > > > > > > > > > > > > > > > > | 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 |
;;
esac
TCLKIT_SDK_DIR="${dir}"
export TCLKIT_SDK_DIR
make distclean
if [ "${platform}" != '' ]; then
eval `~/root/cross-compilers/setup-cc $platform`
platform="$(echo "${platform}" | cut -f1 -d ' ')"
fi
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
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
|
Modified configure.ac
from [13d9b5f529]
to [b6d99aa0b3].
| ︙ | ︙ | |||
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
if test "${TCC4TCL_TARGET}" = "shared"; then
dnl Determine how to make shared objects
DC_GET_SHOBJFLAGS
dnl Only export symbols we wish to expose
TARGET="tcc4tcl.${SHOBJEXT}"
else
AC_CHECK_TOOL([RANLIB], [ranlib])
AC_CHECK_TOOL([AR], [ar])
TARGET="tcc4tcl-static.a"
fi
AC_SUBST(TARGET)
AC_SUBST(TCC4TCL_TARGET)
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'
else
no_dlopen='0'
| > > > | 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
if test "${TCC4TCL_TARGET}" = "shared"; then
dnl Determine how to make shared objects
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'
else
no_dlopen='0'
|
| ︙ | ︙ | |||
66 67 68 69 70 71 72 | ;; *) HOST_PATH_SEPARATOR=':' ;; esac AC_SUBST(HOST_PATH_SEPARATOR) | < < < | 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
;;
*)
HOST_PATH_SEPARATOR=':'
;;
esac
AC_SUBST(HOST_PATH_SEPARATOR)
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
DC_SETVERSIONSCRIPT([${srcdir}/tcc4tcl.vers], [tcc4tcl.syms])
DC_FIND_STRIP_AND_REMOVESYMS([tcc4tcl.syms])
fi
dnl Produce output
AC_OUTPUT(Makefile pkgIndex.tcl tcc4tcl.syms)
|
Modified tcc4tcl.c
from [0dd7284c29]
to [24c78e2cb7].
| ︙ | ︙ | |||
18 19 20 21 22 23 24 | * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include <tcl.h> #include <stdlib.h> #include "tcc.h" | < < < < < < < < < | 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include <tcl.h>
#include <stdlib.h>
#include "tcc.h"
struct TclTCCState {
TCCState *s;
int relocated;
};
static void Tcc4tclErrorFunc(Tcl_Interp * interp, char * msg) {
|
| ︙ | ︙ | |||
65 66 67 68 69 70 71 |
struct TclTCCState *ts;
TCCState *s;
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",
| < | < | 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
struct TclTCCState *ts;
TCCState *s;
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",
(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
};
char *str;
ts = (struct TclTCCState *) cdata;
s = ts->s;
if (objc < 2) {
|
| ︙ | ︙ | |||
234 235 236 237 238 239 240 |
case TCC4TCL_UNDEFINE:
if (objc != 3) {
Tcl_WrongNumArgs(interp, 2, objv, "symbol");
return TCL_ERROR;
}
tcc_undefine_symbol(s,Tcl_GetString(objv[2]));
return TCL_OK;
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 223 224 225 226 227 228 229 230 231 232 233 234 235 236 |
case TCC4TCL_UNDEFINE:
if (objc != 3) {
Tcl_WrongNumArgs(interp, 2, objv, "symbol");
return TCL_ERROR;
}
tcc_undefine_symbol(s,Tcl_GetString(objv[2]));
return TCL_OK;
default:
Tcl_Panic("internal error during option lookup");
}
return TCL_OK;
}
static int Tcc4tclCreateCmd( ClientData cdata, Tcl_Interp *interp, int objc, Tcl_Obj * CONST objv[]){
|
| ︙ | ︙ |
Modified tcc4tcl.tcl
from [47dd5cbf47]
to [7f2fbfc8a7].
| ︙ | ︙ | |||
352 353 354 355 356 357 358 | append code $body append code "\nreturn TCL_OK;\n\}" return $code } #--------------------------------------------------------------------- | | | | 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 |
append code $body
append code "\nreturn TCL_OK;\n\}"
return $code
}
#---------------------------------------------------------------------
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]
}
#---------------------------------------------------------------------
proc ::tcc4tcl::cdata {name data} {
# Extract bytes from data
binary scan $data c* bytes
|
| ︙ | ︙ | |||
405 406 407 408 409 410 411 |
uplevel 1 [list tcc4tcl::ccommand $name {dummy ip objc objv} $cbody]
return $name
}
#-------------------------------------------------------------------
| | | 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 |
uplevel 1 [list tcc4tcl::ccommand $name {dummy ip objc objv} $cbody]
return $name
}
#-------------------------------------------------------------------
proc ::tcc4tcl::ccommand {procname anames body} {
variable tcc
# Fully qualified proc name
if {[string match "::*" $procname]} {
# procname is already absolute
} else {
set nsfrom [uplevel 1 {namespace current}]
|
| ︙ | ︙ | |||
461 462 463 464 465 466 467 |
set tcc(code) ""
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"
| < < < < < < < < | 461 462 463 464 465 466 467 468 469 470 471 472 473 474 |
set tcc(code) ""
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 {[catch {
uplevel 1 [list tcc4tcl::cc $code]
} err]} {
unset tcc(cc)
tcc4tcl::reset
return -code error $err
|
| ︙ | ︙ |
Modified test
from [e2e01fc434]
to [7d8a169a15].
| ︙ | ︙ | |||
24 25 26 27 28 29 30 |
rv = mkdir(dir);
if (rv == 0) {
return(TCL_OK);
};
return(TCL_ERROR);
| < > | 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
rv = mkdir(dir);
if (rv == 0) {
return(TCL_OK);
};
return(TCL_ERROR);
}
puts [test 1]
puts [test1 1]
puts [test3 1]
puts [::bob::test1 1]
puts [add [test 1] 1]
|
| ︙ | ︙ |