Compare commits
12
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d3e0d5789c | ||
|
|
5bdefd0c25 | ||
|
|
a8516aa629 | ||
|
|
d9bbe48c46 | ||
|
|
962b2df00b | ||
|
|
ed61282e22 | ||
|
|
6607e4e824 | ||
|
|
b72fcddfe2 | ||
|
|
6f6229ef6e | ||
|
|
7476029a04 | ||
|
|
93b4c9bd6b | ||
|
|
6f8c6e12dd |
+2
-18
@@ -81,29 +81,13 @@ omitted then the command returns the current system encoding. The
|
||||
system encoding is used whenever Tcl passes strings to system calls.
|
||||
.SH EXAMPLE
|
||||
.PP
|
||||
It is common practice to write script files using a text editor that
|
||||
produces output in the euc-jp encoding, which represents the ASCII
|
||||
characters as singe bytes and Japanese characters as two bytes. This
|
||||
makes it easy to embed literal strings that correspond to non-ASCII
|
||||
characters by simply typing the strings in place in the script.
|
||||
However, because the \fBsource\fR command always reads files using the
|
||||
current system encoding, Tcl will only source such files correctly
|
||||
when the encoding used to write the file is the same. This tends not
|
||||
to be true in an internationalized setting. For example, if such a
|
||||
file was sourced in North America (where the ISO8859\-1 is normally
|
||||
used), each byte in the file would be treated as a separate character
|
||||
that maps to the 00 page in Unicode. The resulting Tcl strings will
|
||||
not contain the expected Japanese characters. Instead, they will
|
||||
contain a sequence of Latin-1 characters that correspond to the bytes
|
||||
of the original string. The \fBencoding\fR command can be used to
|
||||
convert this string to the expected Japanese Unicode characters. For
|
||||
example,
|
||||
The following example converts a byte sequence in Japanese euc-jp encoding to a TCL string:
|
||||
.PP
|
||||
.CS
|
||||
set s [\fBencoding convertfrom\fR euc-jp "\exA4\exCF"]
|
||||
.CE
|
||||
.PP
|
||||
would return the Unicode string
|
||||
The result is the unicode codepoint:
|
||||
.QW "\eu306F" ,
|
||||
which is the Hiragana letter HA.
|
||||
.SH "SEE ALSO"
|
||||
|
||||
+13
-16
@@ -3209,6 +3209,19 @@ Tcl_DeleteCommandFromToken(
|
||||
iPtr->compileEpoch++;
|
||||
}
|
||||
|
||||
/*
|
||||
* Delete any imports of this routine elsewhere before calling deleteProc
|
||||
* to that traces on the imports don't reference deallocated storage.
|
||||
*/
|
||||
if (!(cmdPtr->flags & CMD_REDEF_IN_PROGRESS)) {
|
||||
for (refPtr = cmdPtr->importRefPtr; refPtr != NULL;
|
||||
refPtr = nextRefPtr) {
|
||||
nextRefPtr = refPtr->nextPtr;
|
||||
importCmd = (Tcl_Command) refPtr->importedCmdPtr;
|
||||
Tcl_DeleteCommandFromToken(interp, importCmd);
|
||||
}
|
||||
}
|
||||
|
||||
if (cmdPtr->deleteProc != NULL) {
|
||||
/*
|
||||
* Delete the command's client data. If this was an imported command
|
||||
@@ -3228,20 +3241,6 @@ Tcl_DeleteCommandFromToken(
|
||||
cmdPtr->deleteProc(cmdPtr->deleteData);
|
||||
}
|
||||
|
||||
/*
|
||||
* If this command was imported into other namespaces, then imported
|
||||
* commands were created that refer back to this command. Delete these
|
||||
* imported commands now.
|
||||
*/
|
||||
if (!(cmdPtr->flags & CMD_REDEF_IN_PROGRESS)) {
|
||||
for (refPtr = cmdPtr->importRefPtr; refPtr != NULL;
|
||||
refPtr = nextRefPtr) {
|
||||
nextRefPtr = refPtr->nextPtr;
|
||||
importCmd = (Tcl_Command) refPtr->importedCmdPtr;
|
||||
Tcl_DeleteCommandFromToken(interp, importCmd);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Don't use hPtr to delete the hash entry here, because it's possible
|
||||
* that the deletion callback renamed the command. Instead, use
|
||||
@@ -3332,7 +3331,6 @@ CallCommandTraces(
|
||||
}
|
||||
}
|
||||
cmdPtr->flags |= CMD_TRACE_ACTIVE;
|
||||
cmdPtr->refCount++;
|
||||
|
||||
result = NULL;
|
||||
active.nextPtr = iPtr->activeCmdTracePtr;
|
||||
@@ -3390,7 +3388,6 @@ CallCommandTraces(
|
||||
*/
|
||||
|
||||
cmdPtr->flags &= ~CMD_TRACE_ACTIVE;
|
||||
cmdPtr->refCount--;
|
||||
iPtr->activeCmdTracePtr = active.nextPtr;
|
||||
Tcl_Release(iPtr);
|
||||
return result;
|
||||
|
||||
@@ -740,8 +740,6 @@ EncodingConverttoObjCmd(
|
||||
int length; /* Length of the string being converted */
|
||||
const char *stringPtr; /* Pointer to the first byte of the string */
|
||||
|
||||
/* TODO - ADJUST OBJ INDICES WHEN ENSEMBLIFYING THIS */
|
||||
|
||||
if (objc == 2) {
|
||||
encoding = Tcl_GetEncoding(interp, NULL);
|
||||
data = objv[1];
|
||||
|
||||
+2
-1
@@ -4277,6 +4277,7 @@ Write(
|
||||
/* State info for channel */
|
||||
char *nextNewLine = NULL;
|
||||
int endEncoding, saved = 0, total = 0, flushed = 0, needNlFlush = 0;
|
||||
char safe[BUFFER_PADDING];
|
||||
|
||||
if (srcLen) {
|
||||
WillWrite(chanPtr);
|
||||
@@ -4295,7 +4296,7 @@ Write(
|
||||
|
||||
while (srcLen + saved + endEncoding > 0) {
|
||||
ChannelBuffer *bufPtr;
|
||||
char *dst, safe[BUFFER_PADDING];
|
||||
char *dst;
|
||||
int result, srcRead, dstLen, dstWrote, srcLimit = srcLen;
|
||||
|
||||
if (nextNewLine) {
|
||||
|
||||
@@ -158,6 +158,9 @@ Tcl_ErrnoId(void)
|
||||
#ifdef EINIT
|
||||
case EINIT: return "EINIT";
|
||||
#endif
|
||||
#ifdef EILSEQ
|
||||
case EILSEQ: return "EILSEQ";
|
||||
#endif
|
||||
#ifdef EINPROGRESS
|
||||
case EINPROGRESS: return "EINPROGRESS";
|
||||
#endif
|
||||
@@ -617,6 +620,9 @@ Tcl_ErrnoMsg(
|
||||
#ifdef EINIT
|
||||
case EINIT: return "initialization error";
|
||||
#endif
|
||||
#ifdef EILSEQ
|
||||
case EILSEQ: return "illegal byte sequence";
|
||||
#endif
|
||||
#ifdef EINPROGRESS
|
||||
case EINPROGRESS: return "operation now in progress";
|
||||
#endif
|
||||
|
||||
@@ -3340,6 +3340,38 @@ test namespace-56.5 {Bug 8b9854c3d8} -setup {
|
||||
} -result 1
|
||||
|
||||
|
||||
test namespace-56.6 {
|
||||
Namespace deletion traces on both the original routine and the imported
|
||||
routine should run without any memory error under a debug build.
|
||||
} -body {
|
||||
variable res 0
|
||||
|
||||
proc ondelete {old new op} {
|
||||
$old
|
||||
}
|
||||
|
||||
namespace eval ns1 {} {
|
||||
namespace export *
|
||||
proc p1 {} {
|
||||
namespace upvar [namespace parent] res res
|
||||
incr res
|
||||
}
|
||||
trace add command p1 delete ondelete
|
||||
}
|
||||
|
||||
namespace eval ns2 {} {
|
||||
namespace import ::ns1::p1
|
||||
trace add command p1 delete ondelete
|
||||
}
|
||||
|
||||
namespace delete ns1
|
||||
namespace delete ns2
|
||||
return $res
|
||||
} -cleanup {
|
||||
unset res
|
||||
rename ondelete {}
|
||||
} -result 2
|
||||
|
||||
|
||||
test namespace-57.0 {
|
||||
an imported alias should be usable in the deletion trace for the alias
|
||||
|
||||
+5
-10
@@ -13,14 +13,6 @@
|
||||
#undef STATIC_BUILD
|
||||
#include "tcl.h"
|
||||
|
||||
/*
|
||||
* TCL_STORAGE_CLASS is set unconditionally to DLLEXPORT because the
|
||||
* Pkga_Init declaration is in the source file itself, which is only
|
||||
* accessed when we are building a library.
|
||||
*/
|
||||
#undef TCL_STORAGE_CLASS
|
||||
#define TCL_STORAGE_CLASS DLLEXPORT
|
||||
|
||||
/*
|
||||
* Prototypes for procedures defined later in this file:
|
||||
*/
|
||||
@@ -58,6 +50,7 @@ Pkga_EqObjCmd(
|
||||
int result;
|
||||
const char *str1, *str2;
|
||||
int len1, len2;
|
||||
(void)dummy;
|
||||
|
||||
if (objc != 3) {
|
||||
Tcl_WrongNumArgs(interp, 1, objv, "string1 string2");
|
||||
@@ -99,6 +92,8 @@ Pkga_QuoteObjCmd(
|
||||
int objc, /* Number of arguments. */
|
||||
Tcl_Obj *const objv[]) /* Argument strings. */
|
||||
{
|
||||
(void)dummy;
|
||||
|
||||
if (objc != 2) {
|
||||
Tcl_WrongNumArgs(interp, 1, objv, "value");
|
||||
return TCL_ERROR;
|
||||
@@ -124,14 +119,14 @@ Pkga_QuoteObjCmd(
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
EXTERN int
|
||||
DLLEXPORT int
|
||||
Pkga_Init(
|
||||
Tcl_Interp *interp) /* Interpreter in which the package is to be
|
||||
* made available. */
|
||||
{
|
||||
int code;
|
||||
|
||||
if (Tcl_InitStubs(interp, TCL_VERSION, 0) == NULL) {
|
||||
if (Tcl_InitStubs(interp, "8.5", 0) == NULL) {
|
||||
return TCL_ERROR;
|
||||
}
|
||||
code = Tcl_PkgProvide(interp, "Pkga", "1.0");
|
||||
|
||||
+9
-1
@@ -54,6 +54,7 @@ Pkgb_SubObjCmd(
|
||||
Tcl_Obj *const objv[]) /* Argument objects. */
|
||||
{
|
||||
int first, second;
|
||||
(void)dummy;
|
||||
|
||||
if (objc != 3) {
|
||||
Tcl_WrongNumArgs(interp, 1, objv, "num num");
|
||||
@@ -94,6 +95,10 @@ Pkgb_UnsafeObjCmd(
|
||||
int objc, /* Number of arguments. */
|
||||
Tcl_Obj *const objv[]) /* Argument objects. */
|
||||
{
|
||||
(void)dummy;
|
||||
(void)objc;
|
||||
(void)objv;
|
||||
|
||||
return Tcl_EvalEx(interp, "list unsafe command invoked", -1, TCL_EVAL_GLOBAL);
|
||||
}
|
||||
|
||||
@@ -106,6 +111,9 @@ Pkgb_DemoObjCmd(
|
||||
{
|
||||
#if (TCL_MAJOR_VERSION > 8) || (TCL_MINOR_VERSION > 4)
|
||||
Tcl_Obj *first;
|
||||
(void)dummy;
|
||||
(void)objc;
|
||||
(void)objv;
|
||||
|
||||
if (Tcl_ListObjIndex(NULL, Tcl_GetEncodingSearchPath(), 0, &first)
|
||||
== TCL_OK) {
|
||||
@@ -178,7 +186,7 @@ Pkgb_SafeInit(
|
||||
{
|
||||
int code;
|
||||
|
||||
if (Tcl_InitStubs(interp, "8.5-", 0) == NULL) {
|
||||
if (Tcl_InitStubs(interp, "8.5", 0) == NULL) {
|
||||
return TCL_ERROR;
|
||||
}
|
||||
code = Tcl_PkgProvide(interp, "Pkgb", "2.3");
|
||||
|
||||
+9
-12
@@ -14,14 +14,6 @@
|
||||
#undef STATIC_BUILD
|
||||
#include "tcl.h"
|
||||
|
||||
/*
|
||||
* TCL_STORAGE_CLASS is set unconditionally to DLLEXPORT because the
|
||||
* Pkgc_Init declaration is in the source file itself, which is only
|
||||
* accessed when we are building a library.
|
||||
*/
|
||||
#undef TCL_STORAGE_CLASS
|
||||
#define TCL_STORAGE_CLASS DLLEXPORT
|
||||
|
||||
/*
|
||||
* Prototypes for procedures defined later in this file:
|
||||
*/
|
||||
@@ -56,6 +48,7 @@ Pkgc_SubObjCmd(
|
||||
Tcl_Obj *const objv[]) /* Argument objects. */
|
||||
{
|
||||
int first, second;
|
||||
(void)dummy;
|
||||
|
||||
if (objc != 3) {
|
||||
Tcl_WrongNumArgs(interp, 1, objv, "num num");
|
||||
@@ -93,6 +86,10 @@ Pkgc_UnsafeObjCmd(
|
||||
int objc, /* Number of arguments. */
|
||||
Tcl_Obj *const objv[]) /* Argument objects. */
|
||||
{
|
||||
(void)dummy;
|
||||
(void)objc;
|
||||
(void)objv;
|
||||
|
||||
Tcl_SetObjResult(interp, Tcl_NewStringObj("unsafe command invoked", -1));
|
||||
return TCL_OK;
|
||||
}
|
||||
@@ -114,14 +111,14 @@ Pkgc_UnsafeObjCmd(
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
EXTERN int
|
||||
DLLEXPORT int
|
||||
Pkgc_Init(
|
||||
Tcl_Interp *interp) /* Interpreter in which the package is to be
|
||||
* made available. */
|
||||
{
|
||||
int code;
|
||||
|
||||
if (Tcl_InitStubs(interp, TCL_VERSION, 0) == NULL) {
|
||||
if (Tcl_InitStubs(interp, "8.5", 0) == NULL) {
|
||||
return TCL_ERROR;
|
||||
}
|
||||
code = Tcl_PkgProvide(interp, "Pkgc", "1.7.2");
|
||||
@@ -151,14 +148,14 @@ Pkgc_Init(
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
EXTERN int
|
||||
DLLEXPORT int
|
||||
Pkgc_SafeInit(
|
||||
Tcl_Interp *interp) /* Interpreter in which the package is to be
|
||||
* made available. */
|
||||
{
|
||||
int code;
|
||||
|
||||
if (Tcl_InitStubs(interp, TCL_VERSION, 0) == NULL) {
|
||||
if (Tcl_InitStubs(interp, "8.5", 0) == NULL) {
|
||||
return TCL_ERROR;
|
||||
}
|
||||
code = Tcl_PkgProvide(interp, "Pkgc", "1.7.2");
|
||||
|
||||
+9
-12
@@ -14,14 +14,6 @@
|
||||
#undef STATIC_BUILD
|
||||
#include "tcl.h"
|
||||
|
||||
/*
|
||||
* TCL_STORAGE_CLASS is set unconditionally to DLLEXPORT because the
|
||||
* Pkgd_Init declaration is in the source file itself, which is only
|
||||
* accessed when we are building a library.
|
||||
*/
|
||||
#undef TCL_STORAGE_CLASS
|
||||
#define TCL_STORAGE_CLASS DLLEXPORT
|
||||
|
||||
/*
|
||||
* Prototypes for procedures defined later in this file:
|
||||
*/
|
||||
@@ -56,6 +48,7 @@ Pkgd_SubObjCmd(
|
||||
Tcl_Obj *const objv[]) /* Argument objects. */
|
||||
{
|
||||
int first, second;
|
||||
(void)dummy;
|
||||
|
||||
if (objc != 3) {
|
||||
Tcl_WrongNumArgs(interp, 1, objv, "num num");
|
||||
@@ -93,6 +86,10 @@ Pkgd_UnsafeObjCmd(
|
||||
int objc, /* Number of arguments. */
|
||||
Tcl_Obj *const objv[]) /* Argument objects. */
|
||||
{
|
||||
(void)dummy;
|
||||
(void)objc;
|
||||
(void)objv;
|
||||
|
||||
Tcl_SetObjResult(interp, Tcl_NewStringObj("unsafe command invoked", -1));
|
||||
return TCL_OK;
|
||||
}
|
||||
@@ -114,14 +111,14 @@ Pkgd_UnsafeObjCmd(
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
EXTERN int
|
||||
DLLEXPORT int
|
||||
Pkgd_Init(
|
||||
Tcl_Interp *interp) /* Interpreter in which the package is to be
|
||||
* made available. */
|
||||
{
|
||||
int code;
|
||||
|
||||
if (Tcl_InitStubs(interp, TCL_VERSION, 0) == NULL) {
|
||||
if (Tcl_InitStubs(interp, "8.5", 0) == NULL) {
|
||||
return TCL_ERROR;
|
||||
}
|
||||
code = Tcl_PkgProvide(interp, "Pkgd", "7.3");
|
||||
@@ -151,14 +148,14 @@ Pkgd_Init(
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
EXTERN int
|
||||
DLLEXPORT int
|
||||
Pkgd_SafeInit(
|
||||
Tcl_Interp *interp) /* Interpreter in which the package is to be
|
||||
* made available. */
|
||||
{
|
||||
int code;
|
||||
|
||||
if (Tcl_InitStubs(interp, TCL_VERSION, 0) == NULL) {
|
||||
if (Tcl_InitStubs(interp, "8.5", 0) == NULL) {
|
||||
return TCL_ERROR;
|
||||
}
|
||||
code = Tcl_PkgProvide(interp, "Pkgd", "7.3");
|
||||
|
||||
+2
-11
@@ -13,15 +13,6 @@
|
||||
|
||||
#undef STATIC_BUILD
|
||||
#include "tcl.h"
|
||||
|
||||
/*
|
||||
* TCL_STORAGE_CLASS is set unconditionally to DLLEXPORT because the
|
||||
* Pkge_Init declaration is in the source file itself, which is only
|
||||
* accessed when we are building a library.
|
||||
*/
|
||||
#undef TCL_STORAGE_CLASS
|
||||
#define TCL_STORAGE_CLASS DLLEXPORT
|
||||
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
@@ -40,14 +31,14 @@
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
EXTERN int
|
||||
DLLEXPORT int
|
||||
Pkge_Init(
|
||||
Tcl_Interp *interp) /* Interpreter in which the package is to be
|
||||
* made available. */
|
||||
{
|
||||
static const char script[] = "if 44 {open non_existent}";
|
||||
|
||||
if (Tcl_InitStubs(interp, TCL_VERSION, 0) == NULL) {
|
||||
if (Tcl_InitStubs(interp, "8.5", 0) == NULL) {
|
||||
return TCL_ERROR;
|
||||
}
|
||||
return Tcl_EvalEx(interp, script, -1, 0);
|
||||
|
||||
+11
-2
@@ -38,6 +38,8 @@ Pkgooa_StubsOKObjCmd(
|
||||
int objc, /* Number of arguments. */
|
||||
Tcl_Obj *const objv[]) /* Argument objects. */
|
||||
{
|
||||
(void)dummy;
|
||||
|
||||
if (objc != 1) {
|
||||
Tcl_WrongNumArgs(interp, 1, objv, "");
|
||||
return TCL_ERROR;
|
||||
@@ -76,12 +78,19 @@ static TclOOStubs stubsCopy = {
|
||||
* a function with a different memory address than
|
||||
* the real Tcl_CopyObjectInstance function in Tcl. */
|
||||
(Tcl_Object (*) (Tcl_Interp *, Tcl_Object, const char *,
|
||||
const char *t)) Pkgooa_StubsOKObjCmd
|
||||
const char *t))(void *)Pkgooa_StubsOKObjCmd,
|
||||
/* More entries could be here, but those are not used
|
||||
* for this test-case. So, being NULL is OK. */
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL
|
||||
#ifdef Tcl_MethodIsPrivate
|
||||
,NULL
|
||||
#endif
|
||||
};
|
||||
|
||||
extern DLLEXPORT int
|
||||
DLLEXPORT int
|
||||
Pkgooa_Init(
|
||||
Tcl_Interp *interp) /* Interpreter in which the package is to be
|
||||
* made available. */
|
||||
|
||||
+11
-16
@@ -14,14 +14,6 @@
|
||||
#undef STATIC_BUILD
|
||||
#include "tcl.h"
|
||||
|
||||
/*
|
||||
* TCL_STORAGE_CLASS is set unconditionally to DLLEXPORT because the
|
||||
* Pkgua_Init declaration is in the source file itself, which is only
|
||||
* accessed when we are building a library.
|
||||
*/
|
||||
#undef TCL_STORAGE_CLASS
|
||||
#define TCL_STORAGE_CLASS DLLEXPORT
|
||||
|
||||
/*
|
||||
* Prototypes for procedures defined later in this file:
|
||||
*/
|
||||
@@ -134,6 +126,7 @@ PkguaEqObjCmd(
|
||||
int result;
|
||||
const char *str1, *str2;
|
||||
int len1, len2;
|
||||
(void)dummy;
|
||||
|
||||
if (objc != 3) {
|
||||
Tcl_WrongNumArgs(interp, 1, objv, "string1 string2");
|
||||
@@ -175,6 +168,8 @@ PkguaQuoteObjCmd(
|
||||
int objc, /* Number of arguments. */
|
||||
Tcl_Obj *const objv[]) /* Argument strings. */
|
||||
{
|
||||
(void)dummy;
|
||||
|
||||
if (objc != 2) {
|
||||
Tcl_WrongNumArgs(interp, 1, objv, "value");
|
||||
return TCL_ERROR;
|
||||
@@ -200,7 +195,7 @@ PkguaQuoteObjCmd(
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
EXTERN int
|
||||
DLLEXPORT int
|
||||
Pkgua_Init(
|
||||
Tcl_Interp *interp) /* Interpreter in which the package is to be
|
||||
* made available. */
|
||||
@@ -208,7 +203,7 @@ Pkgua_Init(
|
||||
int code, cmdIndex = 0;
|
||||
Tcl_Command *cmdTokens;
|
||||
|
||||
if (Tcl_InitStubs(interp, TCL_VERSION, 0) == NULL) {
|
||||
if (Tcl_InitStubs(interp, "8.5", 0) == NULL) {
|
||||
return TCL_ERROR;
|
||||
}
|
||||
|
||||
@@ -224,7 +219,7 @@ Pkgua_Init(
|
||||
return code;
|
||||
}
|
||||
|
||||
Tcl_SetVar(interp, "::pkgua_loaded", ".", TCL_APPEND_VALUE);
|
||||
Tcl_SetVar2(interp, "::pkgua_loaded", NULL, ".", TCL_APPEND_VALUE);
|
||||
|
||||
cmdTokens = PkguaInterpToTokens(interp);
|
||||
cmdTokens[cmdIndex++] =
|
||||
@@ -253,7 +248,7 @@ Pkgua_Init(
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
EXTERN int
|
||||
DLLEXPORT int
|
||||
Pkgua_SafeInit(
|
||||
Tcl_Interp *interp) /* Interpreter in which the package is to be
|
||||
* made available. */
|
||||
@@ -278,7 +273,7 @@ Pkgua_SafeInit(
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
EXTERN int
|
||||
DLLEXPORT int
|
||||
Pkgua_Unload(
|
||||
Tcl_Interp *interp, /* Interpreter from which the package is to be
|
||||
* unloaded. */
|
||||
@@ -299,7 +294,7 @@ Pkgua_Unload(
|
||||
|
||||
PkguaDeleteTokens(interp);
|
||||
|
||||
Tcl_SetVar(interp, "::pkgua_detached", ".", TCL_APPEND_VALUE);
|
||||
Tcl_SetVar2(interp, "::pkgua_detached", NULL, ".", TCL_APPEND_VALUE);
|
||||
|
||||
if (flags == TCL_UNLOAD_DETACH_FROM_PROCESS) {
|
||||
/*
|
||||
@@ -309,7 +304,7 @@ Pkgua_Unload(
|
||||
*/
|
||||
|
||||
PkguaFreeTokensHashTable();
|
||||
Tcl_SetVar(interp, "::pkgua_unloaded", ".", TCL_APPEND_VALUE);
|
||||
Tcl_SetVar2(interp, "::pkgua_unloaded", NULL, ".", TCL_APPEND_VALUE);
|
||||
}
|
||||
return TCL_OK;
|
||||
}
|
||||
@@ -331,7 +326,7 @@ Pkgua_Unload(
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
EXTERN int
|
||||
DLLEXPORT int
|
||||
Pkgua_SafeUnload(
|
||||
Tcl_Interp *interp, /* Interpreter from which the package is to be
|
||||
* unloaded. */
|
||||
|
||||
+1
-2
@@ -16,7 +16,6 @@
|
||||
#include "tcl.h"
|
||||
|
||||
static Tcl_ObjCmdProc TesteventloopCmd;
|
||||
extern DLLEXPORT Tcl_PackageInitProc Tclxttest_Init;
|
||||
|
||||
/*
|
||||
* Functions defined in tclXtNotify.c for use by users of the Xt Notifier:
|
||||
@@ -44,7 +43,7 @@ extern XtAppContext TclSetAppContext(XtAppContext ctx);
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
int
|
||||
DLLEXPORT int
|
||||
Tclxttest_Init(
|
||||
Tcl_Interp *interp) /* Interpreter for application. */
|
||||
{
|
||||
|
||||
+21
-3
@@ -1260,7 +1260,13 @@ tklibs = "$(TKSTUBLIB)" "$(TKIMPLIB)"
|
||||
|
||||
# Various output paths
|
||||
PRJIMPLIB = $(OUT_DIR)\$(PROJECT)$(VERSION)$(SUFX).lib
|
||||
PRJLIBNAME = $(PROJECT)$(VERSION)$(SUFX).$(EXT)
|
||||
PRJLIBNAME8 = $(PROJECT)$(VERSION)$(SUFX).$(EXT)
|
||||
PRJLIBNAME9 = tcl9$(PROJECT)$(VERSION)$(SUFX).$(EXT)
|
||||
!if $(TCL_MAJOR_VERSION) == 8
|
||||
PRJLIBNAME = $(PRJLIBNAME8)
|
||||
!else
|
||||
PRJLIBNAME = $(PRJLIBNAME9)
|
||||
!endif
|
||||
PRJLIB = $(OUT_DIR)\$(PRJLIBNAME)
|
||||
|
||||
PRJSTUBLIBNAME = $(STUBPREFIX)$(VERSION).lib
|
||||
@@ -1590,12 +1596,22 @@ default-target: $(DEFAULT_BUILD_TARGET)
|
||||
|
||||
!if $(MULTIPLATFORM_INSTALL)
|
||||
default-pkgindex:
|
||||
@echo if {[package vsatisfies [package provide Tcl] 9.0-]} { > $(OUT_DIR)\pkgIndex.tcl
|
||||
@echo package ifneeded $(PRJ_PACKAGE_TCLNAME) $(DOTVERSION) \
|
||||
[list load [file join $$dir $(PLATFORM_IDENTIFY) $(PRJLIBNAME)]] > $(OUT_DIR)\pkgIndex.tcl
|
||||
[list load [file join $$dir $(PLATFORM_IDENTIFY) $(PRJLIBNAME9)]] >> $(OUT_DIR)\pkgIndex.tcl
|
||||
@echo } else { >> $(OUT_DIR)\pkgIndex.tcl
|
||||
@echo package ifneeded $(PRJ_PACKAGE_TCLNAME) $(DOTVERSION) \
|
||||
[list load [file join $$dir $(PLATFORM_IDENTIFY) $(PRJLIBNAME8)]] >> $(OUT_DIR)\pkgIndex.tcl
|
||||
@echo } >> $(OUT_DIR)\pkgIndex.tcl
|
||||
!else
|
||||
default-pkgindex:
|
||||
@echo if {[package vsatisfies [package provide Tcl] 9.0-]} { > $(OUT_DIR)\pkgIndex.tcl
|
||||
@echo package ifneeded $(PRJ_PACKAGE_TCLNAME) $(DOTVERSION) \
|
||||
[list load [file join $$dir $(PRJLIBNAME)]] > $(OUT_DIR)\pkgIndex.tcl
|
||||
[list load [file join $$dir $(PRJLIBNAME9)]] >> $(OUT_DIR)\pkgIndex.tcl
|
||||
@echo } else { >> $(OUT_DIR)\pkgIndex.tcl
|
||||
@echo package ifneeded $(PRJ_PACKAGE_TCLNAME) $(DOTVERSION) \
|
||||
[list load [file join $$dir $(PRJLIBNAME8)]] >> $(OUT_DIR)\pkgIndex.tcl
|
||||
@echo } >> $(OUT_DIR)\pkgIndex.tcl
|
||||
!endif
|
||||
|
||||
default-pkgindex-tea:
|
||||
@@ -1604,6 +1620,8 @@ default-pkgindex-tea:
|
||||
@PACKAGE_NAME@ $(PRJ_PACKAGE_TCLNAME)
|
||||
@PACKAGE_TCLNAME@ $(PRJ_PACKAGE_TCLNAME)
|
||||
@PKG_LIB_FILE@ $(PRJLIBNAME)
|
||||
@PKG_LIB_FILE8@ $(PRJLIBNAME8)
|
||||
@PKG_LIB_FILE9@ $(PRJLIBNAME9)
|
||||
<<
|
||||
|
||||
default-install: default-install-binaries default-install-libraries
|
||||
|
||||
Reference in New Issue
Block a user