[arch-commits] Commit in expectk/trunk (19-tk-init.patch ChangeLog PKGBUILD)

Kevin Piché kevin at archlinux.org
Sun Mar 28 22:20:28 UTC 2010


    Date: Sunday, March 28, 2010 @ 18:20:28
  Author: kevin
Revision: 73841

upgpkg: in_bin -
Updated to latest version, fixed FS#13806

Added:
  expectk/trunk/19-tk-init.patch
  expectk/trunk/ChangeLog
Modified:
  expectk/trunk/PKGBUILD

------------------+
 19-tk-init.patch |  254 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 ChangeLog        |    8 +
 PKGBUILD         |   14 +-
 3 files changed, 270 insertions(+), 6 deletions(-)

Added: 19-tk-init.patch
===================================================================
--- 19-tk-init.patch	                        (rev 0)
+++ 19-tk-init.patch	2010-03-28 22:20:28 UTC (rev 73841)
@@ -0,0 +1,254 @@
+Author: Sergei Golovan <sgolovan at debian.org>
+Description: Fixes Tk intialization by calling Tk_Init instead of using
+ copied&pasted Tk_Init from older Tk.
+Bug: https://sourceforge.net/tracker/?func=detail&aid=2585764&group_id=13179&atid=113179
+Last-Update: 2009-11-12
+
+--- expect-5.44.1.14.orig/exp_main_tk.c
++++ expect-5.44.1.14/exp_main_tk.c
+@@ -29,7 +29,7 @@
+  */
+ 
+ #ifndef lint
+-static char sccsid[] = "@(#) tkAppInit.c 1.19 95/12/23 17:09:24";
++/* static char sccsid[] = "@(#) tkAppInit.c 1.19 95/12/23 17:09:24"; */
+ #endif /* not lint */
+ 
+ /* Don't use stubs since we are in the main application. */
+@@ -162,24 +173,11 @@
+ 
+ 
+-
+-/*
+- * Count of number of main windows currently open in this process.
+- */
+-
+-static int numMainWindows;
+-
+ /*
+  * The variables and table below are used to parse arguments from
+  * the "argv" variable in Tk_Init.
+  */
+ 
+-static int synchronize;
+-static CONST char *name;
+-static char *display;
+-static char *geometry;
+-static char *colormap;
+-static char *visual;
+-static int rest = 0;
++static int rest;
+ 
+ /* for Expect */
+ static int optcmd_eval();
+@@ -181,21 +186,6 @@
+ int print_version = 0;
+ 
+ static Tk_ArgvInfo argTable[] = {
+-    {"-colormap", TK_ARGV_STRING, (char *) NULL, (char *) &colormap,
+-	"Colormap for main window"},
+-    {"-display", TK_ARGV_STRING, (char *) NULL, (char *) &display,
+-	"Display to use"},
+-    {"-geometry", TK_ARGV_STRING, (char *) NULL, (char *) &geometry,
+-	"Initial geometry for window"},
+-    {"-name", TK_ARGV_STRING, (char *) NULL, (char *) &name,
+-	"Name to use for application"},
+-    {"-sync", TK_ARGV_CONSTANT, (char *) 1, (char *) &synchronize,
+-	"Use synchronous mode for display server"},
+-    {"-visual", TK_ARGV_STRING, (char *) NULL, (char *) &visual,
+-	"Visual for main window"},
+-    {"--", TK_ARGV_REST, (char *) 1, (char *) &rest,
+-	"Pass all remaining arguments through to script"},
+-/* for Expect */
+     {"-command", TK_ARGV_GENFUNC, (char *) optcmd_eval, (char *)0,
+ 	"Command(s) to execute immediately"},
+     {"-diag", TK_ARGV_CONSTANT, (char *) optcmd_diagToStderr, (char *)0,
+@@ -210,6 +189,8 @@
+     {"-Debug", TK_ARGV_GENFUNC, (char *) optcmd_debug, (char *)0, 
+ 	"Enable debugger"},
+ #endif
++    {"--", TK_ARGV_REST, (char *) 1, (char *) &rest,
++	"Pass all remaining arguments through to script"},
+     {(char *) NULL, TK_ARGV_END, (char *) NULL, (char *) NULL,
+ 	(char *) NULL}
+ };
+@@ -243,11 +235,11 @@
+     Tcl_Interp *interp;		/* Interpreter to initialize. */
+ {
+     CONST char *p;
+-    char* alist, *cstr;
+-    int argc, code;
+-    char **argv, *args[20];
+-    Tcl_DString class;
++    char *alist, *pp;
++    int argc, length, i, j;
++    char **argv, **newargv;
+     char buffer[30];
++    size_t len;
+ 
+     /*
+      * If there is an "argv" variable, get its value, extract out
+@@ -255,8 +247,7 @@
+      * the arguments that we used.
+      */
+ 
+-    synchronize = 0;
+-    name = display = geometry = colormap = visual = NULL; 
++    rest = -1;
+     p = Tcl_GetVar2(interp, "argv", (char *) NULL, TCL_GLOBAL_ONLY);
+     argv = NULL;
+     if (p != NULL) {
+@@ -285,115 +276,57 @@
+ 	    }
+ 	}
+ 
+-	alist = Tcl_Merge(argc, argv);
+-	Tcl_SetVar2(interp, "argv", (char *) NULL, alist, TCL_GLOBAL_ONLY);
+-	sprintf(buffer, "%d", argc);
+-	Tcl_SetVar2(interp, "argc", (char *) NULL, buffer, TCL_GLOBAL_ONLY);
+-	ckfree(alist);
+-    }
+-
+-    /*
+-     * Figure out the application's name and class.
+-     */
++	if (rest >= 0) {
++	    /* Resore '--' in arguments list
++	     */
+ 
+-    if (name == NULL) {
+-	name = Tcl_GetVar(interp, "argv0", TCL_GLOBAL_ONLY);
+-	if ((name == NULL) || (*name == 0)) {
+-	    name = "tk";
+-	} else {
+-	    p = (char *)strrchr(name, '/');     /* added cast - DEL */
+-	    if (p != NULL) {
+-		name = p+1;
++	    length = 0;
++	    for (i = 0; i < argc; i++) {
++		length += strlen(argv[i]) + 1;
+ 	    }
+-	}
+-    }
+-    Tcl_DStringInit(&class);
+-    Tcl_DStringAppend(&class, name, -1);
+-    cstr = Tcl_DStringValue(&class);
+-    if (islower(*cstr)) {
+-	*cstr = toupper((unsigned char) *cstr);
+-    }
+ 
+-    /*
+-     * Create an argument list for creating the top-level window,
+-     * using the information parsed from argv, if any.
+-     */
++	    newargv = (char **) ckalloc((unsigned) ((argc+2)*sizeof(char *)) + length + 3);
+ 
+-    args[0] = "toplevel";
+-    args[1] = ".";
+-    args[2] = "-class";
+-    args[3] = Tcl_DStringValue(&class);
+-    argc = 4;
+-    if (display != NULL) {
+-	args[argc] = "-screen";
+-	args[argc+1] = display;
+-	argc += 2;
+-
+-	/*
+-	 * If this is the first application for this process, save
+-	 * the display name in the DISPLAY environment variable so
+-	 * that it will be available to subprocesses created by us.
+-	 */
++	    pp = ((char *) newargv) + (argc+2)*sizeof(char *);
++	    j = 0;
++	    for (i = 0; i < argc; i++) {
++		if (i == rest) {
++		    memcpy(pp, "--", 3);
++		    newargv[j++] = pp;
++		    pp += 3;
++		}
++
++		len = strlen(argv[i]) + 1;
++		memcpy(pp, argv[i], len);
++		newargv[j++] = pp;
++		pp += len;
++	    }
++	    newargv[j] = NULL;
+ 
+-	if (numMainWindows == 0) {
+-	    Tcl_SetVar2(interp, "env", "DISPLAY", display, TCL_GLOBAL_ONLY);
++	    alist = Tcl_Merge(argc+1, newargv);
++	} else {
++	    newargv = NULL;
++	    alist = Tcl_Merge(argc, argv);
+ 	}
+-    }
+-    if (colormap != NULL) {
+-	args[argc] = "-colormap";
+-	args[argc+1] = colormap;
+-	argc += 2;
+-    }
+-    if (visual != NULL) {
+-	args[argc] = "-visual";
+-	args[argc+1] = visual;
+-	argc += 2;
+-    }
+-    args[argc] = NULL;
+-    code = TkCreateFrame((ClientData) NULL, interp, argc, args, 1, name);
+-    Tcl_DStringFree(&class);
+-    if (code != TCL_OK) {
+-	goto done;
+-    }
+-    Tcl_ResetResult(interp);
+-#ifndef MAC_OSX_TK
+-    if (synchronize) {
+-	XSynchronize(Tk_Display(Tk_MainWindow(interp)), True);
+-    }
+-#endif
+ 
+-    /*
+-     * Set the geometry of the main window, if requested.  Put the
+-     * requested geometry into the "geometry" variable.
+-     */
+-
+-    if (geometry != NULL) {
+-	Tcl_SetVar(interp, "geometry", geometry, TCL_GLOBAL_ONLY);
+-	code = Tcl_VarEval(interp, "wm geometry . ", geometry, (char *) NULL);
+-	if (code != TCL_OK) {
+-	    goto done;
+-	}
+-    }
+-    if (Tcl_PkgRequire(interp, "Tcl", TCL_VERSION, 1) == NULL) {
+-	code = TCL_ERROR;
+-	goto done;
+-    }
+-    code = Tcl_PkgProvide(interp, "Tk", TK_VERSION);
+-    if (code != TCL_OK) {
+-	goto done;
++	Tcl_SetVar2(interp, "argv", (char *) NULL, alist, TCL_GLOBAL_ONLY);
++	sprintf(buffer, "%d", argc);
++	Tcl_SetVar2(interp, "argc", (char *) NULL, buffer, TCL_GLOBAL_ONLY);
++	ckfree(alist);
+     }
+ 
+-    /*
+-     * Invoke platform-specific initialization.
+-     */
+-
+-    code = TkpInit(interp, 0);
++    if (Tk_Init(interp) == TCL_ERROR) {
++	return TCL_ERROR;
++    }
+ 
+-    done:
+     if (argv != NULL) {
+ 	ckfree((char *) argv);
+     }
+-    return code;
++    if (newargv != NULL) {
++	ckfree((char *) newargv);
++    }
++
++    return TCL_OK;
+ }
+ 
+ /*ARGSUSED*/

Added: ChangeLog
===================================================================
--- ChangeLog	                        (rev 0)
+++ ChangeLog	2010-03-28 22:20:28 UTC (rev 73841)
@@ -0,0 +1,8 @@
+
+2010-03-27  kevin  <kevin at archlinux.org> 
+
+    * expectk 5.44.1.15-1
+    - Source on sourceforge now and maintained mostly by ActiveState
+    - Added patch from Ubuntu to fix Tk intialization.  Fixes FS#13806:
+      buttons of windows created by expectk are not working
+

Modified: PKGBUILD
===================================================================
--- PKGBUILD	2010-03-28 22:17:41 UTC (rev 73840)
+++ PKGBUILD	2010-03-28 22:20:28 UTC (rev 73841)
@@ -2,17 +2,19 @@
 # Maintainer: kevin <kevin at archlinux.org>
 
 pkgname=expectk
-pkgver=5.44.1.10
-pkgrel=2
+pkgver=5.44.1.15
+pkgrel=1
 pkgdesc="An X and Tk variant of expect, a tool for automating interactive applications"
 arch=('i686' 'x86_64')
 url="http://expect.nist.gov/"
 license=('custom')
 depends=("expect=${pkgver}" 'tk>=8.5.0')
+source=(http://downloads.sourceforge.net/project/expect/Expect/${pkgver}/expect-${pkgver}.tar.bz2 19-tk-init.patch)
 # CVS checkout on gerolde.
-source=(ftp://ftp.archlinux.org/other/expect/expect-${pkgver}.tar.bz2)
-#source=(http://expect.nist.gov/src/expect-${pkgver}.tar.bz2)
-md5sums=('da02c862015da2d67f72f1693adab0db')
+#source=(ftp://ftp.archlinux.org/other/expect/expect-${pkgver}.tar.bz2)
+# old nist source=(http://expect.nist.gov/src/expect-${pkgver}.tar.bz2)
+md5sums=('9307bbf67e19125036ce34544a78dadf'
+         'b996676d3af93f1a43cb18424a1ae504')
 
 build() {
   # stuff to build.
@@ -21,7 +23,7 @@
 
   cd ${srcdir}/expect-${pkgver}
   sed 's#/usr/local/bin#/usr/bin#' -i expectk.man
-  sed '/^PACKAGE_/ s/5\.44\.1\.9/5.44.1.10/' -i configure
+  patch -Np1 -i ${srcdir}/19-tk-init.patch
 
   ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var \
       --mandir=/usr/share/man --with-tcl=/usr/lib \




More information about the arch-commits mailing list