From 64231492f3d4efcbc7b9874442e69a650d730591 Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Mon, 19 Mar 2012 14:26:26 +0000 Subject: experiment: use web colors in stead of X11 colors (win only) --- tests/color.test | 2 +- xlib/rgb.txt | 33 ++++++++++++++++++++++++++++----- xlib/xcolors.c | 22 +++++++++++++++------- 3 files changed, 44 insertions(+), 13 deletions(-) diff --git a/tests/color.test b/tests/color.test index 8557252..2308964 100644 --- a/tests/color.test +++ b/tests/color.test @@ -154,7 +154,7 @@ test color-1.4 {Tk_AllocColorFromObj - try other colors in list} colorsFree { pack .b2 -side top lappend result [testcolor purple] } {{{1 1}} {{1 1} {1 0}} {{1 0} {2 1}}} -test color-1.5 {Color table} nonPortable { +test color-1.5 {Color table} { set fd [open ../xlib/rgb.txt] set result {} while {[gets $fd line] != -1} { diff --git a/xlib/rgb.txt b/xlib/rgb.txt index 67b979e..7a4f983 100644 --- a/xlib/rgb.txt +++ b/xlib/rgb.txt @@ -1,3 +1,18 @@ +! Changes compared to Xorg:rgb.txt +! name old value new value +! aqua - 0 255 255 +! crimson - 220 20 60 +! fuchsia - 255 0 255 +! gray 190 190 190 128 128 128 +! green 0 255 0 0 128 0 +! grey 190 190 190 128 128 128 +! indigo - 75 0 130 +! lime - 0 255 0 +! maroon 176 48 96 128 0 0 +! olive - 128 128 0 +! purple 160 32 240 128 0 128 +! silver - 192 192 192 +! teal - 0 128 128 ! 240 248 255 aliceBlue 250 235 215 antiqueWhite @@ -5,6 +20,7 @@ 238 223 204 antiqueWhite2 205 192 176 antiqueWhite3 139 131 120 antiqueWhite4 + 0 255 255 aqua 127 255 212 aquamarine 127 255 212 aquamarine1 118 238 198 aquamarine2 @@ -65,6 +81,7 @@ 238 232 205 cornsilk2 205 200 177 cornsilk3 139 136 120 cornsilk4 +220 20 60 crimson 0 255 255 cyan 0 255 255 cyan1 0 238 238 cyan2 @@ -137,6 +154,7 @@ 139 26 26 firebrick4 255 250 240 floralWhite 34 139 34 forestGreen +255 0 255 fuchsia 220 220 220 gainsboro 248 248 255 ghostWhite 255 215 0 gold @@ -149,7 +167,7 @@ 238 180 34 goldenrod2 205 155 29 goldenrod3 139 105 20 goldenrod4 -190 190 190 gray +128 128 128 gray 3 3 3 gray1 5 5 5 gray2 8 8 8 gray3 @@ -251,13 +269,13 @@ 252 252 252 gray99 255 255 255 gray100 0 0 0 gray0 - 0 255 0 green + 0 128 0 green 0 255 0 green1 0 238 0 green2 0 205 0 green3 0 139 0 green4 173 255 47 greenYellow -190 190 190 grey +128 128 128 grey 3 3 3 grey1 5 5 5 grey2 8 8 8 grey3 @@ -374,6 +392,7 @@ 238 99 99 indianRed2 205 85 85 indianRed3 139 58 58 indianRed4 + 75 0 130 indigo 255 255 240 ivory 255 255 240 ivory1 238 238 224 ivory2 @@ -445,6 +464,7 @@ 238 238 209 lightYellow2 205 205 180 lightYellow3 139 139 122 lightYellow4 + 0 255 0 lime 50 205 50 limeGreen 250 240 230 linen 255 0 255 magenta @@ -452,7 +472,7 @@ 238 0 238 magenta2 205 0 205 magenta3 139 0 139 magenta4 -176 48 96 maroon +128 0 0 maroon 255 52 179 maroon1 238 48 167 maroon2 205 41 144 maroon3 @@ -490,6 +510,7 @@ 0 0 128 navy 0 0 128 navyBlue 253 245 230 oldLace +128 128 0 olive 107 142 35 oliveDrab 192 255 62 oliveDrab1 179 238 58 oliveDrab2 @@ -544,7 +565,7 @@ 205 150 205 plum3 139 102 139 plum4 176 224 230 powderBlue -160 32 240 purple +128 0 128 purple 155 48 255 purple1 145 44 238 purple2 125 38 205 purple3 @@ -586,6 +607,7 @@ 238 121 66 sienna2 205 104 57 sienna3 139 71 38 sienna4 +192 192 192 silver 135 206 235 skyBlue 135 206 255 skyBlue1 126 192 238 skyBlue2 @@ -622,6 +644,7 @@ 238 154 73 tan2 205 133 63 tan3 139 90 43 tan4 + 0 128 128 teal 216 191 216 thistle 255 225 255 thistle1 238 210 238 thistle2 diff --git a/xlib/xcolors.c b/xlib/xcolors.c index 7a83146..11ab6a0 100644 --- a/xlib/xcolors.c +++ b/xlib/xcolors.c @@ -17,8 +17,8 @@ * Index array. For each of the characters 'a'-'y', this table gives the first color * starting with that character in the xColors table. */ -static int az[] = {0, 4, 12, 19, 43, 43, 46, 56, 58, 60, 60, 61, 84, 99, - 102, 107, 118, 118, 121, 134, 138, 138, 140, 143, 143, 145}; +static int az[] = {0, 5, 13, 21, 45, 45, 49, 59, 61, 64, 64, 65, 89, 104, + 107, 113, 124, 124, 127, 141, 146, 146, 148, 151, 151, 153}; /* * Define an array that defines the mapping from color names to RGB values. @@ -43,6 +43,7 @@ static const elem xColors[] = { /* Colors starting with 'a' */ "liceBlue\0 \360\370\377\0", "ntiqueWhite\0 \213\203\170\315\300\260\356\337\314\377\357\333\372\353\327\4", + "qua\0 \000\377\377\0", "quamarine\0 \105\213\164\146\315\252\166\356\306\177\377\324\177\377\324\4", "zure\0 \203\213\213\301\315\315\340\356\356\360\377\377\360\377\377\4", /* Colors starting with 'b' */ @@ -61,6 +62,7 @@ static const elem xColors[] = { "oral\0 \213\076\057\315\133\105\356\152\120\377\162\126\377\177\120\4", "ornflowerBlue\0 \144\225\355\0", "ornsilk\0 \213\210\170\315\310\261\356\350\315\377\370\334\377\370\334\4", + "rimson\0 \334\024\074\0", "yan\0 \000\213\213\000\315\315\000\356\356\000\377\377\000\377\377\4", /* Colors starting with 'd' */ "arkBlue\0 \000\000\213\0", @@ -92,24 +94,26 @@ static const elem xColors[] = { "irebrick\0 \213\032\032\315\046\046\356\054\054\377\060\060\262\042\042\4", "loralWhite\0 \377\372\360\0", "orestGreen\0 \042\213\042\0", + "uchsia\0 \377\000\377\0", /* Colors starting with 'g' */ "ainsboro\0 \334\334\334\0", "hostWhite\0 \370\370\377\0", "old\0 \213\165\000\315\255\000\356\311\000\377\327\000\377\327\000\4", "oldenrod\0 \213\151\024\315\233\035\356\264\042\377\301\045\332\245\040\4", "ray\0\024\024\024\022\022\022\017\017\017\015\015\015\012\012\012" - "\010\010\010\005\005\005\003\003\003\276\276\276\10", + "\010\010\010\005\005\005\003\003\003\200\200\200\10", "ray0\0 \000\000\000\0", - "reen\0 \000\213\000\000\315\000\000\356\000\000\377\000\000\377\000\4", + "reen\0 \000\213\000\000\315\000\000\356\000\000\377\000\000\200\000\4", "reenYellow\0 \255\377\057\0", "rey\0\024\024\024\022\022\022\017\017\017\015\015\015\012\012\012" - "\010\010\010\005\005\005\003\003\003\276\276\276\10", + "\010\010\010\005\005\005\003\003\003\200\200\200\10", "rey0\0 \000\000\000\0", /* Colors starting with 'h' */ "oneydew\0 \203\213\203\301\315\301\340\356\340\360\377\360\360\377\360\4", "otPink\0 \213\072\142\315\140\220\356\152\247\377\156\264\377\151\264\4", /* Colors starting with 'i' */ "ndianRed\0 \213\072\072\315\125\125\356\143\143\377\152\152\315\134\134\4", + "ndigo\0 \113\000\202\0", "vory\0 \213\213\203\315\315\301\356\356\340\377\377\360\377\377\360\4", /* Colors starting with 'j' */ /* Colors starting with 'k' */ @@ -136,11 +140,12 @@ static const elem xColors[] = { "ightSlateGrey\0 \167\210\231\0", "ightSteelBlue\0 \156\173\213\242\265\315\274\322\356\312\341\377\260\304\336\4", "ightYellow\0 \213\213\172\315\315\264\356\356\321\377\377\340\377\377\340\4", + "ime\0 \000\377\000\0", "imeGreen\0 \062\315\062\0", "inen\0 \372\360\346\0", /* Colors starting with 'm' */ "agenta\0 \213\000\213\315\000\315\356\000\356\377\000\377\377\000\377\4", - "aroon\0 \213\034\142\315\051\220\356\060\247\377\064\263\260\060\140\4", + "aroon\0 \213\034\142\315\051\220\356\060\247\377\064\263\200\000\000\4", "ediumAquamarine\0 \146\315\252\0", "ediumBlue\0 \000\000\315\0", "ediumOrchid\0 \172\067\213\264\122\315\321\137\356\340\146\377\272\125\323\4", @@ -160,6 +165,7 @@ static const elem xColors[] = { "avyBlue\0 \000\000\200\0", /* Colors starting with 'o' */ "ldLace\0 \375\365\346\0", + "live\0 \200\200\000\0", "liveDrab\0 \151\213\042\232\315\062\263\356\072\300\377\076\153\216\043\4", "range\0 \213\132\000\315\205\000\356\232\000\377\245\000\377\245\000\4", "rangeRed\0 \213\045\000\315\067\000\356\100\000\377\105\000\377\105\000\4", @@ -175,7 +181,7 @@ static const elem xColors[] = { "ink\0 \213\143\154\315\221\236\356\251\270\377\265\305\377\300\313\4", "lum\0 \213\146\213\315\226\315\356\256\356\377\273\377\335\240\335\4", "owderBlue\0 \260\340\346\0", - "urple\0 \125\032\213\175\046\315\221\054\356\233\060\377\240\040\360\4", + "urple\0 \125\032\213\175\046\315\221\054\356\233\060\377\200\000\200\4", /* Colors starting with 'q' */ /* Colors starting with 'r' */ "ed\0 \213\000\000\315\000\000\356\000\000\377\000\000\377\000\000\4", @@ -188,6 +194,7 @@ static const elem xColors[] = { "eaGreen\0 \056\213\127\103\315\200\116\356\224\124\377\237\056\213\127\4", "eashell\0 \213\206\202\315\305\277\356\345\336\377\365\356\377\365\356\4", "ienna\0 \213\107\046\315\150\071\356\171\102\377\202\107\240\122\055\4", + "ilver\0 \300\300\300\0", "kyBlue\0 \112\160\213\154\246\315\176\300\356\207\316\377\207\316\353\4", "lateBlue\0 \107\074\213\151\131\315\172\147\356\203\157\377\152\132\315\4", "lateGray\0 \154\173\213\237\266\315\271\323\356\306\342\377\160\200\220\4", @@ -197,6 +204,7 @@ static const elem xColors[] = { "teelBlue\0 \066\144\213\117\224\315\134\254\356\143\270\377\106\202\264\4", /* Colors starting with 't' */ "an\0 \213\132\053\315\205\077\356\232\111\377\245\117\322\264\214\4", + "eal\0 \000\200\200\0", "histle\0 \213\173\213\315\265\315\356\322\356\377\341\377\330\277\330\4", "omato\0 \213\066\046\315\117\071\356\134\102\377\143\107\377\143\107\4", "urquoise\0 \000\206\213\000\305\315\000\345\356\000\365\377\100\340\320\4", -- cgit v0.12 From d9ac48147c4cc07f47d581b94c2fd05cfff767a7 Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Sat, 5 May 2012 16:31:41 +0000 Subject: smaller az table --- xlib/xcolors.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xlib/xcolors.c b/xlib/xcolors.c index 61a99a4..8942d14 100644 --- a/xlib/xcolors.c +++ b/xlib/xcolors.c @@ -17,8 +17,8 @@ * Index array. For each of the characters 'a'-'y', this table gives the first color * starting with that character in the xColors table. */ -static const int az[] = {0, 5, 13, 21, 45, 46, 50, 60, 62, 65, 66, 67, - 91, 106, 109, 115, 126, 127, 130, 144, 149, 150, 152, 155, 156, 158}; +static const unsigned char az[] = {0, 5, 13, 21, 45, 46, 50, 60, 62, 65, 66, + 67, 91, 106, 109, 115, 126, 127, 130, 144, 149, 150, 152, 155, 156, 158}; /* * Define an array that defines the mapping from color names to RGB values. -- cgit v0.12 From 95c723cdcfe9a574608d9d85288588b9ea982bc9 Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Mon, 16 Jul 2012 15:17:27 +0000 Subject: better wrapper, with one less roundtrip through X11 server --- generic/tkColor.c | 14 ++++---------- generic/tkInt.h | 2 ++ unix/tkUnixColor.c | 23 +++++++++++++++++++++-- 3 files changed, 27 insertions(+), 12 deletions(-) diff --git a/generic/tkColor.c b/generic/tkColor.c index f1258f5..ea03e28 100644 --- a/generic/tkColor.c +++ b/generic/tkColor.c @@ -832,7 +832,7 @@ TkDebugColor( #undef XParseColor -static CONST char *CONST webColors[] = { +const char *const tkWebColors[20] = { /* 'a' */ "qua\0#0000ffffffff", /* 'b' */ NULL, /* 'c' */ "rimson\0#dcdc14143c3c", @@ -852,13 +852,7 @@ static CONST char *CONST webColors[] = { /* 'q' */ NULL, /* 'r' */ NULL, /* 's' */ "ilver\0#c0c0c0c0c0c0", - /* 't' */ "eal\0#000080808080", - /* 'u' */ NULL, - /* 'v' */ NULL, - /* 'w' */ NULL, - /* 'x' */ NULL, - /* 'y' */ NULL, - /* 'z' */ NULL + /* 't' */ "eal\0#000080808080" }; Status @@ -914,14 +908,14 @@ TkParseColor( name -= 13; } goto done; - } else if (((*name - 'A') & 0xdf) < sizeof(webColors)/sizeof(webColors[0])) { + } else if (((*name - 'A') & 0xdf) < sizeof(tkWebColors)/sizeof(tkWebColors[0])) { if (!((name[0] - 'G') & 0xdf) && !((name[1] - 'R') & 0xdf) && !((name[2] - 'A') & 0xdb) && !((name[3] - 'Y') & 0xdf) && !name[4]) { name = "#808080808080"; goto done; } else { - const char *p = webColors[((*name - 'A') & 0x1f)]; + const char *p = tkWebColors[((*name - 'A') & 0x1f)]; if (p) { const char *q = name; while (!((*p - *(++q)) & 0xdf)) { diff --git a/generic/tkInt.h b/generic/tkInt.h index 88e0c25..01cc9cb 100644 --- a/generic/tkInt.h +++ b/generic/tkInt.h @@ -944,6 +944,8 @@ MODULE_SCOPE TkMainInfo *tkMainWindowList; MODULE_SCOPE Tk_ImageType tkPhotoImageType; MODULE_SCOPE Tcl_HashTable tkPredefBitmapTable; +MODULE_SCOPE const char *const tkWebColors[20]; + /* * The definition of pi, at least from the perspective of double-precision * floats. diff --git a/unix/tkUnixColor.c b/unix/tkUnixColor.c index aa01f24..43500ad 100644 --- a/unix/tkUnixColor.c +++ b/unix/tkUnixColor.c @@ -133,10 +133,28 @@ TkpGetColor( * names. */ - /* TODO: better wrapper for XAllocNamedColor, for now always use TkParseColor */ - if (0 && *name != '#') { + if (*name != '#') { XColor screen; + if (((*name - 'A') & 0xdf) < sizeof(tkWebColors)/sizeof(tkWebColors[0])) { + if (!((name[0] - 'G') & 0xdf) && !((name[1] - 'R') & 0xdf) + && !((name[2] - 'A') & 0xdb) && !((name[3] - 'Y') & 0xdf) + && !name[4]) { + name = "#808080808080"; + goto gotWebColor; + } else { + const char *p = tkWebColors[((*name - 'A') & 0x1f)]; + if (p) { + const char *q = name; + while (!((*p - *(++q)) & 0xdf)) { + if (!*p++) { + name = p; + goto gotWebColor; + } + } + } + } + } if (strlen(name) > 99) { /* Don't bother to parse this. [Bug 2809525]*/ return (TkColor *) NULL; @@ -156,6 +174,7 @@ TkpGetColor( FindClosestColor(tkwin, &screen, &color); } } else { + gotWebColor: if (TkParseColor(display, colormap, name, &color) == 0) { return NULL; } -- cgit v0.12 From ece0414362b9fa3ef50f557c919bbb7ba13c247b Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Wed, 15 Aug 2012 13:09:48 +0000 Subject: Only build the threaded builds by default. Backport some improvements from Tcl 8.6 --- ChangeLog | 5 +++ win/buildall.vc.bat | 69 +++++++++++++++-------------------------- win/rules.vc | 89 +++++++++++++++++++++++++++++++++++++---------------- 3 files changed, 93 insertions(+), 70 deletions(-) diff --git a/ChangeLog b/ChangeLog index 39a8d81..87c709a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2012-08-15 Jan Nijtmans + + * win/buildall.vc.bat: Only build the threaded builds by default + * win/rules.vc: Backport some improvements from Tcl 8.6 + 2012-08-11 Francois Vogel * generic/tkTextTag.c: [Bug 3554273]: Test textDisp-32.2 failed diff --git a/win/buildall.vc.bat b/win/buildall.vc.bat index 16605ee..0bd2888 100755 --- a/win/buildall.vc.bat +++ b/win/buildall.vc.bat @@ -23,18 +23,27 @@ goto OPTIONS_DONE :: reset errorlevel cd > nul +:: You might have installed your developer studio to add itself to the +:: path or have already run vcvars32.bat. Testing these envars proves +:: cl.exe and friends are in your path. +:: +if defined VCINSTALLDIR (goto :startBuilding) +if defined MSDEVDIR (goto :startBuilding) +if defined MSVCDIR (goto :startBuilding) +if defined MSSDK (goto :startBuilding) +if defined WINDOWSSDKDIR (goto :startBuilding) + :: We need to run the development environment batch script that comes -:: with developer studio (v4,5,6,7,etc...) All have it. These paths -:: might not be correct. You may need to edit these. +:: with developer studio (v4,5,6,7,etc...) All have it. This path +:: might not be correct. You should call it yourself prior to running +:: this batchfile. :: -if not defined MSDevDir ( - call "C:\Program Files\Microsoft Developer Studio\vc98\bin\vcvars32.bat" - ::call "C:\Program Files\Microsoft Developer Studio\vc\bin\vcvars32.bat" - ::call c:\dev\devstudio60\vc98\bin\vcvars32.bat - if errorlevel 1 goto no_vcvars -) +call "C:\Program Files\Microsoft Developer Studio\vc98\bin\vcvars32.bat" +if errorlevel 1 (goto no_vcvars) +:startBuilding +echo. echo Sit back and have a cup of coffee while this grinds through ;) echo You asked for *everything*, remember? echo. @@ -54,47 +63,19 @@ if "%TCLDIR%" == "" set TCLDIR=..\..\tcl :: Build the normal stuff along with the help file. :: -set OPTS=none -if not %SYMBOLS%.==. set OPTS=symbols -nmake -nologo -f makefile.vc release winhelp OPTS=%OPTS% %1 -if errorlevel 1 goto error - -:: Build the static core, dlls and shell. -:: -set OPTS=static -if not %SYMBOLS%.==. set OPTS=symbols,static -nmake -nologo -f makefile.vc release OPTS=%OPTS% %1 -if errorlevel 1 goto error - -:: Build the special static libraries that use the dynamic runtime. -:: -set OPTS=static,msvcrt -if not %SYMBOLS%.==. set OPTS=symbols,static,msvcrt -nmake -nologo -f makefile.vc core OPTS=%OPTS% %1 -if errorlevel 1 goto error - -:: Build the core and shell for thread support. -:: set OPTS=threads if not %SYMBOLS%.==. set OPTS=symbols,threads nmake -nologo -f makefile.vc release OPTS=%OPTS% %1 if errorlevel 1 goto error -:: Build a static, thread support core library (no shell). -:: -set OPTS=static,threads -if not %SYMBOLS%.==. set OPTS=symbols,static,threads -nmake -nologo -f makefile.vc core OPTS=%OPTS% %1 -if errorlevel 1 goto error - -:: Build the special static libraries the use the dynamic runtime, -:: but now with thread support. +:: Build the static core and shell. :: set OPTS=static,msvcrt,threads if not %SYMBOLS%.==. set OPTS=symbols,static,msvcrt,threads -nmake -nologo -f makefile.vc core OPTS=%OPTS% %1 +nmake -nologo -f makefile.vc shell OPTS=%OPTS% %1 if errorlevel 1 goto error +set OPTS= set SYMBOLS= goto end @@ -103,16 +84,16 @@ echo *** BOOM! *** goto end :no_vcvars -echo vcvars32.bat not found. You'll need to edit this batch script. +echo vcvars32.bat was not run prior to this batchfile, nor are the MS tools in your path. goto out :help title buildall.vc.bat help message echo usage: -echo %0 : builds Tk for all build types (do this first) -echo %0 install : installs all the release builds (do this second) -echo %0 symbols : builds Tk for all debugging build types. -echo %0 symbols install : install all the debug builds +echo %0 : builds Tk for all build types (do this first) +echo %0 install : installs all the release builds (do this second) +echo %0 symbols : builds Tk for all debugging build types +echo %0 symbols install : install all the debug builds echo. goto out diff --git a/win/rules.vc b/win/rules.vc index 20c967a..dd417c8 100644 --- a/win/rules.vc +++ b/win/rules.vc @@ -6,9 +6,9 @@ # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. -# +# # Copyright (c) 2001-2003 David Gravereaux. -# Copyright (c) 2003-2007 Patrick Thoyts +# Copyright (c) 2003-2008 Patrick Thoyts #------------------------------------------------------------------------------ !ifndef _RULES_VC @@ -217,7 +217,8 @@ TCL_THREADS = 0 DEBUG = 0 SYMBOLS = 0 PROFILE = 0 -MSVCRT = 0 +PGO = 0 +MSVCRT = 1 LOIMPACT = 0 TCL_USE_STATIC_PACKAGES = 0 USE_THREAD_ALLOC = 0 @@ -233,9 +234,13 @@ STATIC_BUILD = 0 !message *** Doing msvcrt MSVCRT = 1 !else +!if !$(STATIC_BUILD) +MSVCRT = 1 +!else MSVCRT = 0 !endif -!if [nmakehlp -f $(OPTS) "staticpkg"] +!endif +!if [nmakehlp -f $(OPTS) "staticpkg"] && $(STATIC_BUILD) !message *** Doing staticpkg TCL_USE_STATIC_PACKAGES = 1 !else @@ -244,8 +249,10 @@ TCL_USE_STATIC_PACKAGES = 0 !if [nmakehlp -f $(OPTS) "threads"] !message *** Doing threads TCL_THREADS = 1 +USE_THREAD_ALLOC = 1 !else TCL_THREADS = 0 +USE_THREAD_ALLOC = 0 !endif !if [nmakehlp -f $(OPTS) "symbols"] !message *** Doing symbols @@ -265,6 +272,15 @@ PROFILE = 1 !else PROFILE = 0 !endif +!if [nmakehlp -f $(OPTS) "pgi"] +!message *** Doing profile guided optimization instrumentation +PGO = 1 +!elseif [nmakehlp -f $(OPTS) "pgo"] +!message *** Doing profile guided optimization +PGO = 2 +!else +PGO = 0 +!endif !if [nmakehlp -f $(OPTS) "loimpact"] !message *** Doing loimpact LOIMPACT = 1 @@ -274,7 +290,9 @@ LOIMPACT = 0 !if [nmakehlp -f $(OPTS) "thrdalloc"] !message *** Doing thrdalloc USE_THREAD_ALLOC = 1 -!else +!endif +!if [nmakehlp -f $(OPTS) "tclalloc"] +!message *** Doing tclalloc USE_THREAD_ALLOC = 0 !endif !if [nmakehlp -f $(OPTS) "unchecked"] @@ -285,15 +303,6 @@ UNCHECKED = 0 !endif !endif - -!if !$(STATIC_BUILD) -# Make sure we don't build overly fat DLLs. -MSVCRT = 1 -# We shouldn't statically put the extensions inside the shell when dynamic. -TCL_USE_STATIC_PACKAGES = 0 -!endif - - #---------------------------------------------------------- # Figure-out how to name our intermediate and output directories. # We wouldn't want different builds to use the same .obj files @@ -335,10 +344,8 @@ TMP_DIRFULL = .\$(BUILDDIRTOP)\$(PROJECT)_ThreadedDynamicStaticX TMP_DIRFULL = $(TMP_DIRFULL:Static=) SUFX = $(SUFX:s=) EXT = dll -!if $(MSVCRT) TMP_DIRFULL = $(TMP_DIRFULL:X=) SUFX = $(SUFX:x=) -!endif !else TMP_DIRFULL = $(TMP_DIRFULL:Dynamic=) EXT = lib @@ -417,6 +424,24 @@ WARNINGS = $(WARNINGS) -Wp64 !endif !endif +!if $(PGO) > 1 +!if [nmakehlp -l -ltcg:pgoptimize] +LINKERFLAGS = $(LINKERFLAGS:-ltcg=) -ltcg:pgoptimize +!else +MSG=^ +This compiler does not support profile guided optimization. +!error $(MSG) +!endif +!elseif $(PGO) > 0 +!if [nmakehlp -l -ltcg:pginstrument] +LINKERFLAGS = $(LINKERFLAGS:-ltcg=) -ltcg:pginstrument +!else +MSG=^ +This compiler does not support profile guided optimization. +!error $(MSG) +!endif +!endif + #---------------------------------------------------------- # Set our defines now armed with our options. #---------------------------------------------------------- @@ -552,19 +577,16 @@ Failed to find tcl.h. The TCLDIR macro does not appear correct. TCL_VERSION = $(TCL_MAJOR_VERSION)$(TCL_MINOR_VERSION) -!if $(TCL_VERSION) < 81 -TCL_DOES_STUBS = 0 -!else -TCL_DOES_STUBS = 1 -!endif - !if $(TCLINSTALL) TCLSH = "$(_TCLDIR)\bin\tclsh$(TCL_VERSION)$(SUFX).exe" -!if !exist($(TCLSH)) && $(TCL_THREADS) -TCLSH = "$(_TCLDIR)\bin\tclsh$(TCL_VERSION)t$(SUFX).exe" +!if !exist($(TCLSH)) +TCLSH = "$(_TCLDIR)\bin\tclsh$(TCL_VERSION)$(SUFX:x=).exe" !endif TCLSTUBLIB = "$(_TCLDIR)\lib\tclstub$(TCL_VERSION).lib" TCLIMPLIB = "$(_TCLDIR)\lib\tcl$(TCL_VERSION)$(SUFX).lib" +!if !exist($(TCLIMPLIB)) +TCLIMPLIB = "$(_TCLDIR)\lib\tcl$(TCL_VERSION)$(SUFX:x=).lib" +!endif TCL_LIBRARY = $(_TCLDIR)\lib TCLREGLIB = "$(_TCLDIR)\lib\tclreg12$(SUFX:t=).lib" TCLDDELIB = "$(_TCLDIR)\lib\tcldde13$(SUFX:t=).lib" @@ -573,11 +595,14 @@ TCLTOOLSDIR = \must\have\tcl\sources\to\build\this\target TCL_INCLUDES = -I"$(_TCLDIR)\include" !else TCLSH = "$(_TCLDIR)\win\$(BUILDDIRTOP)\tclsh$(TCL_VERSION)$(SUFX).exe" -!if !exist($(TCLSH)) && $(TCL_THREADS) -TCLSH = "$(_TCLDIR)\win\$(BUILDDIRTOP)\tclsh$(TCL_VERSION)t$(SUFX).exe" +!if !exist($(TCLSH)) +TCLSH = "$(_TCLDIR)\win\$(BUILDDIRTOP)\tclsh$(TCL_VERSION)$(SUFX:x=).exe" !endif TCLSTUBLIB = "$(_TCLDIR)\win\$(BUILDDIRTOP)\tclstub$(TCL_VERSION).lib" TCLIMPLIB = "$(_TCLDIR)\win\$(BUILDDIRTOP)\tcl$(TCL_VERSION)$(SUFX).lib" +!if !exist($(TCLIMPLIB)) +TCLIMPLIB = "$(_TCLDIR)\win\$(BUILDDIRTOP)\tcl$(TCL_VERSION)$(SUFX:x=).lib" +!endif TCL_LIBRARY = $(_TCLDIR)\library TCLREGLIB = "$(_TCLDIR)\win\$(BUILDDIRTOP)\tclreg12$(SUFX:t=).lib" TCLDDELIB = "$(_TCLDIR)\win\$(BUILDDIRTOP)\tcldde13$(SUFX:t=).lib" @@ -650,13 +675,25 @@ TK_VERSION = $(TK_MAJOR_VERSION)$(TK_MINOR_VERSION) !if "$(PROJECT)" != "tk" !if $(TKINSTALL) WISH = "$(_TKDIR)\bin\wish$(TK_VERSION)$(SUFX).exe" +!if !exist($(WISH)) +WISH = "$(_TKDIR)\bin\wish$(TK_VERSION)$(SUFX:x=).exe" +!endif TKSTUBLIB = "$(_TKDIR)\lib\tkstub$(TK_VERSION).lib" TKIMPLIB = "$(_TKDIR)\lib\tk$(TK_VERSION)$(SUFX).lib" +!if !exist($(TKIMPLIB)) +TKIMPLIB = "$(_TKDIR)\win\$(BUILDDIRTOP)\tk$(TCL_VERSION)$(SUFX:x=).lib" +!endif TK_INCLUDES = -I"$(_TKDIR)\include" !else WISH = "$(_TKDIR)\win\$(BUILDDIRTOP)\wish$(TCL_VERSION)$(SUFX).exe" +!if !exist($(WISH)) +WISH = "$(_TKDIR)\win\$(BUILDDIRTOP)\wish$(TCL_VERSION)$(SUFX:x=).exe" +!endif TKSTUBLIB = "$(_TKDIR)\win\$(BUILDDIRTOP)\tkstub$(TCL_VERSION).lib" TKIMPLIB = "$(_TKDIR)\win\$(BUILDDIRTOP)\tk$(TCL_VERSION)$(SUFX).lib" +!if !exist($(TKIMPLIB)) +TKIMPLIB = "$(_TKDIR)\win\$(BUILDDIRTOP)\tk$(TCL_VERSION)$(SUFX:x=).lib" +!endif TK_INCLUDES = -I"$(_TKDIR)\generic" -I"$(_TKDIR)\win" -I"$(_TKDIR)\xlib" !endif !endif -- cgit v0.12 From a845eea0eb414ffeb6f1710faf4856726be5eb7e Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Wed, 15 Aug 2012 13:33:17 +0000 Subject: Backport some more improvements from Tcl 8.6 --- ChangeLog | 1 + win/makefile.vc | 189 +++++++++++++++++++++++++++++++++++++------------------- 2 files changed, 128 insertions(+), 62 deletions(-) diff --git a/ChangeLog b/ChangeLog index 87c709a..fc2da8f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,7 @@ * win/buildall.vc.bat: Only build the threaded builds by default * win/rules.vc: Backport some improvements from Tcl 8.6 + * win/makefile.vc: 2012-08-11 Francois Vogel diff --git a/win/makefile.vc b/win/makefile.vc index 2f60436..d84270d 100644 --- a/win/makefile.vc +++ b/win/makefile.vc @@ -1,15 +1,16 @@ -#------------------------------------------------------------------------------ +#------------------------------------------------------------- -*- makefile -*- # makefile.vc -- # # Microsoft Visual C++ makefile for use with nmake.exe v1.62+ (VC++ 5.0+) # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. -# +# # Copyright (c) 1995-1996 Sun Microsystems, Inc. # Copyright (c) 1998-2000 Ajuba Solutions. # Copyright (c) 2001-2005 ActiveState Corporation. # Copyright (c) 2001-2004 David Gravereaux. +# Copyright (c) 2003-2008 Pat Thoyts. #------------------------------------------------------------------------------ # Check to see we are configured to build with MSVC (MSDEVDIR, MSVCDIR or @@ -41,23 +42,28 @@ the build instructions. # turn on the 64-bit compiler, if your SDK has it. # # 3) Targets are: -# release -- builds the core, the shell. (default) -# core -- Only builds the core. -# all -- builds everything. -# test -- builds and runs the test suite. -# tktest -- just builds the binaries for the test suite. -# install -- installs the built binaries and libraries to $(INSTALLDIR) +# release -- Builds the core, the shell. (default) +# dlls -- Just builds the windows extensions. +# shell -- Just builds the shell and the core. +# core -- Only builds the core [tkXX.(dll|lib)]. +# all -- Builds everything. +# test -- Builds and runs the test suite. +# tktest -- Just builds the binaries for the test suite. +# install -- Installs the built binaries and libraries to $(INSTALLDIR) # as the root of the install tree. -# cwish -- builds a console version of wish. -# clean -- removes the contents of $(TMP_DIR) -# hose -- removes the contents of $(TMP_DIR) and $(OUT_DIR) -# genstubs -- rebuilds the Stubs table and support files (dev only). +# cwish -- Builds a console version of wish. +# tidy/clean/hose -- varying levels of cleaning. +# genstubs -- Rebuilds the Stubs table and support files (dev only). # depend -- Generates an accurate set of source dependancies for this # makefile. Helpful to avoid problems when the sources are # refreshed and you rebuild, but can "overbuild" when common # headers like tkInt.h just get small changes. -# winhelp -- builds the windows .hlp file for Tcl from the troff man -# files. +# htmlhelp -- Builds a Windows .chm help file for Tcl and Tk from the +# troff manual pages found in $(ROOT)\doc. You need to +# have installed the HTML Help Compiler package from Microsoft +# to produce the .chm file. +# winhelp -- Builds the windows .hlp file for Tcl from the troff man +# files found in $(ROOT)\doc. # # 4) Macros usable on the commandline: # TCLDIR= @@ -70,60 +76,65 @@ the build instructions. # Sets where to install Tcl from the built binaries. # C:\Progra~1\Tcl is assumed when not specified. # -# OPTS=static,msvcrt,linkexten,threads,symbols,profile,unchecked,none +# OPTS=loimpact,msvcrt,nothreads,noxp,pdbs,profile,square,static,staticpkg,symbols,unchecked,none # Sets special options for the core. The default is for none. # Any combination of the above may be used (comma separated). # 'none' will over-ride everything to nothing. # -# static = Builds a static library of the core instead of a -# dll. The shell will be static (and large), as well. -# msvcrt = Effects the static option only to switch it from +# loimpact = Adds a flag for how NT treats the heap to keep memory +# in use, low. This is said to impact alloc performance. +# msvcrt = Affects the static option only to switch it from # using libcmt(d) as the C runtime [by default] to # msvcrt(d). This is useful for static embedding # support. +# nothreads= Turns off full multithreading support. +# noxp = If you do not have the uxtheme.h header then you +# cannot include support for XP themeing. +# square = Include the demo square widget. +# static = Builds a static library of the core instead of a +# dll. The shell will be static (and large), as well. # staticpkg= Affects the static option only to switch wishXX.exe # to have the dde and reg extension linked inside it. -# threads = Turns on full multithreading support. -# thrdalloc= Use the thread allocator (shared global free pool). -# symbols = Adds symbols for step debugging. +# pdbs = Build detached symbols for release builds. # profile = Adds profiling hooks. Map file is assumed. -# loimpact = Adds a flag for how NT treats the heap to keep -# memory in use, low. This is said to impact alloc -# performance. -# unchecked= Allows a symbols build to not use the debug +# thrdalloc = Use the thread allocator (shared global free pool) +# This is the default on threaded builds. +# tclalloc = Use the old non-thread allocator +# symbols = Debug build. Links to the debug C runtime, disables +# optimizations and creates pdb symbols files. +# unchecked = Allows a symbols build to not use the debug # enabled runtime (msvcrt.dll not msvcrtd.dll # or libcmt.lib not libcmtd.lib). -# noxp = If you do not have the uxtheme.h header then you -# cannot include support for XP themeing. -# square = Include the demo square widget. # -# STATS=memdbg,compdbg,none +# STATS=compdbg,memdbg,none # Sets optional memory and bytecode compiler debugging code added # to the core. The default is for none. Any combination of the # above may be used (comma separated). 'none' will over-ride # everything to nothing. # -# memdbg = Enables the debugging memory allocator. # compdbg = Enables byte compilation logging. +# memdbg = Enables the debugging memory allocator. # -# CHECKS=nodep,fullwarn,none +# CHECKS=64bit,fullwarn,nodep,none # Sets special macros for checking compatability. # -# nodep = Turns off compatability macros to ensure Tk isn't -# being built with deprecated functions. +# 64bit = Enable 64bit portability warnings (if available) # fullwarn = Builds with full compiler and link warnings enabled. # Very verbose. +# nodep = Turns off compatability macros to ensure the core +# isn't being built with deprecated functions. # -# MACHINE=(IX86|IA64|AMD64|ALPHA) +# MACHINE=(ALPHA|AMD64|IA64|IX86) # Set the machine type used for the compiler, linker, and # resource compiler. This hook is needed to tell the tools # when alternate platforms are requested. IX86 is the default -# when not specified. +# when not specified. If the CPU environment variable has been +# set (ie: recent Platform SDK) then MACHINE is set from CPU. # # TMP_DIR= # OUT_DIR= # Hooks to allow the intermediate and output directories to be -# changed. $(OUT_DIR) is assumed to be +# changed. $(OUT_DIR) is assumed to be # $(BINROOT)\(Release|Debug) based on if symbols are requested. # $(TMP_DIR) will de $(OUT_DIR)\ by default. # @@ -171,7 +182,7 @@ Please `cd` to its location first. !error $(MSG) !endif -PROJECT = tk +PROJECT = tk !include "rules.vc" !if $(TCLINSTALL) @@ -351,7 +362,7 @@ TKOBJS = \ $(TMP_DIR)\tkStubInit.obj \ $(TMP_DIR)\tkStubLib.obj \ $(TMP_DIR)\tkWindow.obj \ - $(TTK_OBJS) \ + $(TTK_OBJS) \ !if !$(STATIC_BUILD) $(TMP_DIR)\tk.res !endif @@ -392,7 +403,8 @@ TTK_OBJS = \ $(TMP_DIR)\ttkStubInit.obj TKSTUBOBJS = \ - $(TMP_DIR)\tkStubLib.obj $(TMP_DIR)\ttkStubLib.obj + $(TMP_DIR)\tkStubLib.obj \ + $(TMP_DIR)\ttkStubLib.obj WINDIR = $(ROOT)\win @@ -417,7 +429,7 @@ CONFIG_DEFS =-DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 \ -DTTK_SQUARE_WIDGET=1 \ !endif -TK_DEFINES =-DBUILD_ttk $(OPTDEFINES) $(CONFIG_DEFS) +TK_DEFINES =-DBUILD_ttk $(OPTDEFINES) $(CONFIG_DEFS) -Dinline=__inline #--------------------------------------------------------------------- # Compile flags @@ -465,7 +477,6 @@ CON_CFLAGS = $(cdebug) $(cflags) $(crt) -DCONSOLE WISH_CFLAGS = $(BASE_CFLAGS) $(TK_DEFINES) STUB_CFLAGS = $(cflags) $(cdebug) $(TK_DEFINES) - #--------------------------------------------------------------------- # Link flags #--------------------------------------------------------------------- @@ -474,6 +485,9 @@ STUB_CFLAGS = $(cflags) $(cdebug) $(TK_DEFINES) ldebug = -debug -debugtype:cv !else ldebug = -release -opt:ref -opt:icf,3 +!if $(SYMBOLS) +ldebug = $(ldebug) -debug -debugtype:cv +!endif !endif ### Declarations common to all linker options @@ -515,7 +529,7 @@ guilibs = $(baselibs) gdi32.lib #--------------------------------------------------------------------- !if "$(TESTPAT)" != "" -TESTFLAGS = $(TESTFLAGS) -file $(TESTPAT) +TESTFLAGS = $(TESTFLAGS) -file $(TESTPAT) !endif @@ -543,9 +557,10 @@ test-classic: setup $(TKTEST) $(TKLIB) $(CAT32) @set PATH=$(_TCLDIR)\win\$(BUILDDIRTOP);$(PATH) !endif !if "$(OS)" == "Windows_NT" || "$(MSVCDIR)" == "IDE" - $(TKTEST) "$(ROOT)/tests/all.tcl" $(TESTFLAGS) | $(CAT32) + $(DEBUGGER) $(TKTEST) "$(ROOT:\=/)/tests/all.tcl" $(TESTFLAGS) | $(CAT32) !else - $(TKTEST) "$(ROOT)/tests/all.tcl" $(TESTFLAGS) | $(CAT32) + $(DEBUGGER) $(TKTEST) "$(ROOT:\=/)/tests/all.tcl" $(TESTFLAGS) > tests.log + type tests.log | more !endif test-ttk: setup $(TKTEST) $(TKLIB) $(CAT32) @@ -558,9 +573,10 @@ test-ttk: setup $(TKTEST) $(TKLIB) $(CAT32) @set PATH=$(_TCLDIR)\win\$(BUILDDIRTOP);$(PATH) !endif !if "$(OS)" == "Windows_NT" || "$(MSVCDIR)" == "IDE" - $(TKTEST) "$(ROOT)/tests/ttk/all.tcl" $(TESTFLAGS) | $(CAT32) + $(DEBUGGER) $(TKTEST) "$(ROOT:\=/)/tests/ttk/all.tcl" $(TESTFLAGS) | $(CAT32) !else - $(TKTEST) "$(ROOT)/tests/ttk/all.tcl" $(TESTFLAGS) | $(CAT32) + $(DEBUGGER) $(TKTEST) "$(ROOT:\=/)/tests/ttk/all.tcl" $(TESTFLAGS) > tests.log + type tests.log | more !endif runtest: setup $(TKTEST) $(TKLIB) $(CAT32) @@ -572,7 +588,7 @@ runtest: setup $(TKTEST) $(TKLIB) $(CAT32) !else @set PATH=$(_TCLDIR)\win\$(BUILDDIRTOP);$(PATH) !endif - $(TKTEST) + $(DEBUGGER) $(TKTEST) rundemo: setup $(TKTEST) $(TKLIB) $(CAT32) @set TCL_LIBRARY=$(TCL_LIBRARY:\=/) @@ -583,7 +599,7 @@ rundemo: setup $(TKTEST) $(TKLIB) $(CAT32) !else @set PATH=$(_TCLDIR)\win\$(BUILDDIRTOP);$(PATH) !endif - $(TKTEST) $(ROOT)\library\demos\widget + $(TKTEST) $(ROOT:\=/)\library\demos\widget shell: setup $(WISH) @set TCL_LIBRARY=$(TCL_LIBRARY:\=/) @@ -594,7 +610,7 @@ shell: setup $(WISH) !else @set PATH=$(_TCLDIR)\win\$(BUILDDIRTOP);$(PATH) !endif - $(WISH) << + $(DEBUGGER) $(WISH) << console show << @@ -656,9 +672,8 @@ $(CAT32): $(_TCLDIR)\win\cat.c $(link32) $(conlflags) -out:$@ -stack:16384 $(TMP_DIR)\cat.obj $(baselibs) $(_VC_MANIFEST_EMBED_EXE) - #--------------------------------------------------------------------- -# Regenerate the stubs files. +# Regenerate the stubs files. [Development use only] #--------------------------------------------------------------------- genstubs: @@ -672,9 +687,49 @@ genstubs: #--------------------------------------------------------------------- -# Regenerate the windows help files. +# Build the Windows HTML help file. #--------------------------------------------------------------------- +# NOTE: you can define HHC on the command-line to override this +!ifndef HHC +HHC=""%ProgramFiles%\HTML Help Workshop\hhc.exe"" +!endif +HTMLDIR=$(ROOT)\html +HTMLBASE=TclTk$(VERSION) +HHPFILE=$(HTMLDIR)\$(HTMLBASE).hhp +CHMFILE=$(HTMLDIR)\$(HTMLBASE).chm + +htmlhelp: chmsetup $(CHMFILE) + +$(CHMFILE): $(DOCDIR)\* + @$(TCLSH) $(TOOLSDIR)\tcltk-man2html.tcl + @echo Compiling HTML help project + @$(HHC) <<$(HHPFILE) >NUL +[OPTIONS] +Compatibility=1.1 or later +Compiled file=$(HTMLBASE).chm +Display compile progress=no +Error log file=$(HTMLBASE).log +Language=0x409 English (United States) +Title=Tcl/Tk $(DOT_VERSION) Help +[FILES] +contents.htm +docs.css +Keywords +TclCmd +TclLib +TkCmd +TkLib +UserCmd +<< + +chmsetup: + @if not exist $(HTMLDIR)\nul mkdir $(HTMLDIR) + +#------------------------------------------------------------------------- +# Build the old-style Windows .hlp file +#------------------------------------------------------------------------- + HLPBASE = $(PROJECT)$(TK_VERSION) HELPFILE = $(OUT_DIR)\$(HLPBASE).hlp HELPCNT = $(OUT_DIR)\$(HLPBASE).cnt @@ -723,8 +778,8 @@ CreateButton(3, "Wiki", ExecFile("http://wiki.tcl.tk")) CreateButton(4, "FAQ", ExecFile("http://www.purl.org/NET/Tcl-FAQ/")) << cd $(MAKEDIR) - $(CPY) "$(DOCTMP_DIR)\$(@B).hlp" "$(OUT_DIR)" - $(CPY) "$(DOCTMP_DIR)\$(@B).cnt" "$(OUT_DIR)" + @$(CPY) "$(DOCTMP_DIR)\$(@B).hlp" "$(OUT_DIR)" + @$(CPY) "$(DOCTMP_DIR)\$(@B).cnt" "$(OUT_DIR)" $(MAN2TCL): $(TCLTOOLSDIR)\$$(@B).c $(cc32) $(TK_CFLAGS) -Fo$(@D)\ $(TCLTOOLSDIR)\$(@B).c @@ -798,11 +853,15 @@ $(TMP_DIR)\tkStubLib.obj : $(GENERICDIR)\tkStubLib.c $(TMP_DIR)\wish.exe.manifest: $(WINDIR)\wish.exe.manifest.in @nmakehlp -s << $** >$@ @MACHINE@ $(MACHINE:IX86=X86) -@TK_WIN_VERSION@ $(TK_MAJOR_VERSION).$(TK_MINOR_VERSION).0.0 +@TK_WIN_VERSION@ $(TK_DOTVERSION).0.0 << #--------------------------------------------------------------------- -# Generate the makefile depedancies. +# Generate the source dependencies. Having dependency rules will +# improve incremental build accuracy without having to resort to a +# full rebuild just because some non-global header file like +# tclCompile.h was changed. These rules aren't needed when building +# from scratch. #--------------------------------------------------------------------- depend: @@ -810,7 +869,7 @@ depend: @echo Build tclsh first! !else set TCL_LIBRARY=$(TCL_LIBRARY) - $(TCLSH) $(TCLTOOLSDIR)\mkdepend.tcl -vc32 -out:"$(OUT_DIR)\depend.mk" \ + $(TCLSH) $(TCLTOOLSDIR:\=/)/mkdepend.tcl -vc32 -out:"$(OUT_DIR)\depend.mk" \ -passthru:"-DBUILD_tk $(TK_INCLUDES)" $(GENERICDIR),$$(GENERICDIR) \ $(WINDIR),$$(WINDIR) $(TTKDIR),$$(TTKDIR) $(XLIBDIR),$$(XLIBDIR) \ $(BITMAPDIR),$$(BITMAPDIR) @<< @@ -818,9 +877,8 @@ $(TKOBJS) << !endif - #--------------------------------------------------------------------- -# Dedependency rules +# Dependency rules #--------------------------------------------------------------------- $(TMP_DIR)\tk.res: \ @@ -830,7 +888,7 @@ $(TMP_DIR)\tk.res: \ !if exist("$(OUT_DIR)\depend.mk") !include "$(OUT_DIR)\depend.mk" -!message *** Dependency rules in effect. +!message *** Dependency rules in use. !else !message *** Dependency rules are not being used. !endif @@ -896,8 +954,13 @@ install-binaries: !if !$(STATIC_BUILD) @echo creating package index @type << > $(OUT_DIR)\pkgIndex.tcl -if {[catch {package present Tcl 8.5.0}]} { return } -package ifneeded Tk $(TK_PATCH_LEVEL) [list load [file join $$dir .. .. bin $(TKLIBNAME)] Tk] +if {[catch {package present Tcl $(TK_DOTVERSION).0}]} { return } +if {($$::tcl_platform(platform) eq "unix") && ([info exists ::env(DISPLAY)] + || ([info exists ::argv] && ("-display" in $$::argv)))} { + package ifneeded Tk $(TK_PATCH_LEVEL) [list load [file join $$dir .. .. bin libtk$(TK_DOTVERSION).dll] Tk] +} else { + package ifneeded Tk $(TK_PATCH_LEVEL) [list load [file join $$dir .. .. bin $(TKLIBNAME)] Tk] +} << @$(CPY) $(OUT_DIR)\pkgIndex.tcl "$(SCRIPT_INSTALL_DIR)\" !endif @@ -959,6 +1022,8 @@ clean: @echo Cleaning $(WINDIR)\versions.vc ... @if exist $(WINDIR)\versions.vc del $(WINDIR)\versions.vc +realclean: hose + hose: @echo Hosing $(OUT_DIR)\* ... @if exist $(OUT_DIR)\nul $(RMDIR) $(OUT_DIR) -- cgit v0.12 From e6aac5ccc80d9f75e8b1e7fb71090eba0329c39d Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Wed, 15 Aug 2012 13:51:48 +0000 Subject: [Frq 3555324]: On Windows, re-define Ctrl-A for Select-All., as most Windows applications do. --- library/tk.tcl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/library/tk.tcl b/library/tk.tcl index 7ef25ec..0d8853f 100644 --- a/library/tk.tcl +++ b/library/tk.tcl @@ -417,7 +417,7 @@ switch -exact -- [tk windowingsystem] { event add <> event add <> - event add <> + event add <> event add <> event add <> event add <> @@ -427,9 +427,9 @@ switch -exact -- [tk windowingsystem] { event add <> event add <> event add <> - event add <> + event add <> event add <> - event add <> + event add <> event add <> event add <> event add <> -- cgit v0.12 From 497629b55b3c15f1a7464c8d15db8aca0bb3cd7d Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Wed, 15 Aug 2012 13:58:25 +0000 Subject: changelog entry for previous commit --- ChangeLog | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ChangeLog b/ChangeLog index 5dc986c..84af54c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -4,6 +4,8 @@ * win/rules.vc: For msvcrt static builds, allow to link against libraries where the 'x' is missing (generated by Makefile.in). * win/makefile.vc: Always compile Tk with -DUSE_TCL_STUBS, formatting. + * library/tk.tcl: [Frq 3555324]: On Windows, re-define Ctrl-A for + Select-All., as most Windows applications do. 2012-08-11 Jan Nijtmans -- cgit v0.12 From 3e015bc690d012c2d7a83be914babd37cbd259c0 Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Fri, 17 Aug 2012 07:50:29 +0000 Subject: nmakehlp: Add "-V" option, in order to be able to detect partial version numbers. --- ChangeLog | 5 +++++ win/nmakehlp.c | 10 ++++++---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index cc7a38f..52d9739 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2012-08-17 Jan Nijtmans + + * win/nmakehlp.c: Add "-V" option, in order to be able + to detect partial version numbers. + 2012-08-03 Francois Vogel * tests/bind.test: [Bug 3554081]: Test bind-22.10 failed diff --git a/win/nmakehlp.c b/win/nmakehlp.c index 2868857..d0edcf0 100644 --- a/win/nmakehlp.c +++ b/win/nmakehlp.c @@ -47,7 +47,7 @@ static int CheckForLinkerFeature(const char *option); static int IsIn(const char *string, const char *substring); static int SubstituteFile(const char *substs, const char *filename); static int QualifyPath(const char *path); -static const char *GetVersionFromFile(const char *filename, const char *match); +static const char *GetVersionFromFile(const char *filename, const char *match, int numdots); static DWORD WINAPI ReadFromPipe(LPVOID args); /* globals */ @@ -153,7 +153,7 @@ main( &dwWritten, NULL); return 0; } - printf("%s\n", GetVersionFromFile(argv[2], argv[3])); + printf("%s\n", GetVersionFromFile(argv[2], argv[3], *(argv[1]+2) - '0')); return 0; case 'Q': if (argc != 3) { @@ -479,7 +479,8 @@ IsIn( static const char * GetVersionFromFile( const char *filename, - const char *match) + const char *match, + int numdots) { size_t cbBuffer = 100; static char szBuffer[100]; @@ -509,7 +510,8 @@ GetVersionFromFile( */ q = p; - while (*q && (isalnum(*q) || *q == '.')) { + while (*q && (strchr("0123456789.ab", *q)) && ((!strchr(".ab", *q) + && (!strchr("ab", q[-1])) || --numdots))) { ++q; } -- cgit v0.12 From 2b1528e9dbc860a6f5cba6321ac0b0f03f156bdd Mon Sep 17 00:00:00 2001 From: dkf Date: Wed, 22 Aug 2012 23:22:08 +0000 Subject: Corrections to TIP number; make recent TIP commits more visible in ChangeLog --- ChangeLog | 65 ++++++++++++++++++++++++++++++++++++--------------------------- 1 file changed, 37 insertions(+), 28 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0944c96..d5d5d6b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,30 +1,35 @@ 2012-08-22 Jan Nijtmans - * xlib/xcolors.c: [TIP 405]: Web Colors for Tk. New colors aqua, - * xlib/rgb.txt: crimson, fuchsia, indigo, lime, olive, silver - * unix/tkUnixColor.c: and teal. Modified RGB values for gray/grey, - * generic/tkInt.h: green, maroon and purple. + TIP #404 IMPLEMENTATION + + * xlib/xcolors.c: Web Colors for Tk. New colors aqua, crimson, + * xlib/rgb.txt: fuchsia, indigo, lime, olive, silver and teal. + * unix/tkUnixColor.c: Modified RGB values for gray/grey, green, + * generic/tkInt.h: maroon and purple. * generic/tkColor.c 2012-08-17 Jan Nijtmans - * win/nmakehlp.c: Add "-V" option, in order to be able - to detect partial version numbers. + * win/nmakehlp.c: Add "-V" option, in order to be able to detect + partial version numbers. 2012-08-15 Jan Nijtmans - * win/buildall.vc.bat: Only build the threaded builds by default - * win/rules.vc: For msvcrt static builds, allow to link - against libraries where the 'x' is missing (generated by Makefile.in). - * win/makefile.vc: Always compile Tk with -DUSE_TCL_STUBS, formatting. - * library/tk.tcl: [Frq 3555324]: On Windows, re-define Ctrl-A for - Select-All., as most Windows applications do. + * win/buildall.vc.bat: Only build the threaded builds by default + * win/rules.vc: For msvcrt static builds, allow to link + against libraries where the 'x' is missing + (generated by Makefile.in). + * win/makefile.vc: Always compile Tk with -DUSE_TCL_STUBS, + formatting. + * library/tk.tcl: [Frq 3555324]: On Windows, re-define Ctrl-A + for Select-All., as most Windows applications + do. 2012-08-11 Jan Nijtmans * library/*.tcl: [Bug 3555644]: Better use of virtual events. - Pre-define 10 new Virtual events, and correct various - bindings according to the Mac OSX documentation. + Pre-define 10 new Virtual events, and correct various bindings + according to the Mac OSX documentation. * win/rules.vc: Sync with tcl version of rules.vc 2012-08-11 Francois Vogel @@ -33,10 +38,10 @@ 2012-08-09 Stuart Cassoff - * generic/tkEvent.c: Remove useless (void *) casts - * unix/tkUnixEvent.c: introduced in checkin [81e50c85ed]. - * unix/tkUnixKey.c: The warnings were false flags from a - * unix/tkUnixRFont.c: faulty OpenBSD C compiler. + * generic/tkEvent.c: Remove useless (void *) casts introduced in + * unix/tkUnixEvent.c: checkin [81e50c85ed]. The warnings were false + * unix/tkUnixKey.c: flags from a faulty OpenBSD C compiler. + * unix/tkUnixRFont.c: 2012-07-31 Donal K. Fellows @@ -1640,12 +1645,14 @@ 2010-01-19 Pat Thoyts - * library/bgerror.tcl: [TIP 359]: Extended Window Manager Hints - * library/clrpick.tcl: following the freedesktop.org specification - * library/demos/widget: are now supported on X11 using a new - * library/dialog.tcl: wm attribute called '-type' - * library/msgbox.tcl: This feature is now used in the Tk library - * library/tkfbox.tcl: functions where appropriate. + TIP #359 IMPLEMENTATION + + * library/bgerror.tcl: Extended Window Manager Hints following the + * library/clrpick.tcl: freedesktop.org specification are now + * library/demos/widget: supported on X11 using a new [wm attribute] + * library/dialog.tcl: called '-type'. This feature is now used in + * library/msgbox.tcl: the Tk library functions where appropriate. + * library/tkfbox.tcl: * library/ttk/combobox.tcl: * tests/unixWm.test: * tests/wm.test: @@ -1733,12 +1740,14 @@ 2010-01-09 Pat Thoyts - * doc/menu.n: [TIP 360]: Remove special handling of - * library/obsolete.tcl: the .help menu on X11. + TIP #360 IMPLEMENTATION + + * doc/menu.n: Remove special handling of the .help menu on + * library/obsolete.tcl: X11. * unix/tkUnixMenu.c: - * library/menu.tcl: [TIP 360]: Make Tk menu activation - * library/obsolete.tcl: follow mouse movements. + * library/menu.tcl: Make Tk menu activation follow mouse + * library/obsolete.tcl: movements. 2010-01-08 Pat Thoyts -- cgit v0.12 From d64fd8a6701fc866cd2249e8c83684bac05c42ba Mon Sep 17 00:00:00 2001 From: dkf Date: Wed, 22 Aug 2012 23:23:13 +0000 Subject: And *this* time with the right TIP number. :-} --- ChangeLog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index d5d5d6b..9b2442e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,6 @@ 2012-08-22 Jan Nijtmans - TIP #404 IMPLEMENTATION + TIP #403 IMPLEMENTATION * xlib/xcolors.c: Web Colors for Tk. New colors aqua, crimson, * xlib/rgb.txt: fuchsia, indigo, lime, olive, silver and teal. -- cgit v0.12 From e92169181fda82349142bd6fbefd5acbe951dee0 Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Thu, 23 Aug 2012 07:06:07 +0000 Subject: new virtual event <> --- library/tk.tcl | 3 +++ library/ttk/entry.tcl | 2 +- library/ttk/treeview.tcl | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/library/tk.tcl b/library/tk.tcl index 0d8853f..cac9075 100644 --- a/library/tk.tcl +++ b/library/tk.tcl @@ -391,6 +391,7 @@ switch -exact -- [tk windowingsystem] { event add <> event add <> event add <> + event add <> # Some OS's define a goofy (as in, not ) keysym that is # returned when the user presses . In order for tab @@ -439,6 +440,7 @@ switch -exact -- [tk windowingsystem] { event add <> event add <> event add <> + event add <> } "aqua" { event add <> @@ -476,6 +478,7 @@ switch -exact -- [tk windowingsystem] { event add <> event add <> event add <> + event add <> } } diff --git a/library/ttk/entry.tcl b/library/ttk/entry.tcl index 22c4115..f5ba19e 100644 --- a/library/ttk/entry.tcl +++ b/library/ttk/entry.tcl @@ -78,7 +78,7 @@ bind TEntry { ttk::Repeatedly ttk::entry::AutoScroll %W } bind TEntry { ttk::CancelRepeat } bind TEntry { ttk::CancelRepeat } -bind TEntry { +bind TEntry <> { %W instate {!readonly !disabled} { %W icursor @%x ; focus %W } } diff --git a/library/ttk/treeview.tcl b/library/ttk/treeview.tcl index 1160e9b..8772587 100644 --- a/library/ttk/treeview.tcl +++ b/library/ttk/treeview.tcl @@ -43,7 +43,7 @@ bind Treeview { ttk::treeview::ToggleFocus %W } bind Treeview \ { ttk::treeview::Select %W %x %y extend } -bind Treeview \ +bind Treeview <> \ { ttk::treeview::Select %W %x %y toggle } ttk::copyBindings TtkScrollable Treeview -- cgit v0.12 From dceb6487b9e195d99e186db8c19889c67632e7dd Mon Sep 17 00:00:00 2001 From: dgp Date: Thu, 23 Aug 2012 21:40:24 +0000 Subject: 3554026,3561016 Stop crash with tearoff menus. --- ChangeLog | 4 ++++ unix/tkUnixWm.c | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/ChangeLog b/ChangeLog index 52d9739..d540456 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2012-08-23 Don Porter + + * unix/tkUnixWm.c: [Bugs 3554026,3561016] Stop crash with tearoff menus. + 2012-08-17 Jan Nijtmans * win/nmakehlp.c: Add "-V" option, in order to be able diff --git a/unix/tkUnixWm.c b/unix/tkUnixWm.c index cb5b643..fa130a1 100644 --- a/unix/tkUnixWm.c +++ b/unix/tkUnixWm.c @@ -6276,6 +6276,13 @@ TkSetTransientFor(tkwin, parent) while (!Tk_IsTopLevel(parent)) parent = Tk_Parent(tkwin); } + /* + * Prevent crash due to incomplete initialization, or other problems. + * [Bugs 3554026, 3561016] + */ + if (((TkWindow *)parent)->wmInfoPtr->wrapperPtr == NULL) { + return; + } XSetTransientForHint(Tk_Display(tkwin), ((TkWindow *)tkwin)->wmInfoPtr->wrapperPtr->window, ((TkWindow *)parent)->wmInfoPtr->wrapperPtr->window); -- cgit v0.12 From 63131158ec6f20712214c1233541e694443b149d Mon Sep 17 00:00:00 2001 From: dkf Date: Fri, 24 Aug 2012 14:59:46 +0000 Subject: [Bug 3558535]: Factor out the filtered-sorted globbing code into one procedure that knows how to avoid nasty problems when non-list filters are used. --- ChangeLog | 11 +++++- library/tkfbox.tcl | 113 ++++++++++++++++++++++++----------------------------- 2 files changed, 62 insertions(+), 62 deletions(-) diff --git a/ChangeLog b/ChangeLog index e6e153d..71af409 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,15 @@ +2012-08-24 Donal K. Fellows + + * library/tkfbox.tcl (GlobFiltered): [Bug 3558535]: Factor out the + filtered-sorted globbing code into one procedure that knows how to + avoid nasty problems when non-list filters are used. This allows the + rest of the [tk_getOpenFile] implementation to be ignorant of the + considerable complexities of globbing. + 2012-08-23 Don Porter - * unix/tkUnixWm.c: [Bugs 3554026,3561016] Stop crash with tearoff menus. + * unix/tkUnixWm.c: [Bugs 3554026,3561016]: Stop crash with tearoff + menus. 2012-08-17 Jan Nijtmans diff --git a/library/tkfbox.tcl b/library/tkfbox.tcl index bbea5c6..e145805 100644 --- a/library/tkfbox.tcl +++ b/library/tkfbox.tcl @@ -18,7 +18,7 @@ # package require Ttk - + #---------------------------------------------------------------------- # # I C O N L I S T @@ -786,7 +786,7 @@ proc ::tk::IconList_Reset {w} { unset -nocomplain Priv(ILAccel,$w) } - + #---------------------------------------------------------------------- # # F I L E D I A L O G @@ -1326,36 +1326,16 @@ rSASvJTGhnhcV3EJlo3kh53ltF5nAhQAOw==}] set showHidden $::tk::dialog::file::showHiddenVar - # Make the dir list - # Using -directory [pwd] is better in some VFS cases. - set cmd [list glob -tails -directory [pwd] -type d -nocomplain *] - if {$showHidden} { lappend cmd .* } - set dirs [lsort -dictionary -unique [eval $cmd]] - set dirList {} - foreach d $dirs { - if {$d eq "." || $d eq ".."} { - continue - } - lappend dirList $d - } - ::tk::IconList_Add $data(icons) $folder $dirList + # Make the dir list. Note that using an explicit [pwd] (instead of '.') is + # better in some VFS cases. + ::tk::IconList_Add $data(icons) $folder [GlobFiltered [pwd] d 1] if {$class eq "TkFDialog"} { - # Make the file list if this is a File Dialog, selecting all - # but 'd'irectory type files. + # Make the file list if this is a File Dialog, selecting all but + # 'd'irectory type files. # - set cmd [list glob -tails -directory [pwd] \ - -type {f b c l p s} -nocomplain] - if {$data(filter) eq "*"} { - lappend cmd * - if {$showHidden} { - lappend cmd .* - } - } else { - eval [list lappend cmd] $data(filter) - } - set fileList [lsort -dictionary -unique [eval $cmd]] - ::tk::IconList_Add $data(icons) $file $fileList + ::tk::IconList_Add $data(icons) $file \ + [GlobFiltered [pwd] {f b c l p s}] } ::tk::IconList_Arrange $data(icons) @@ -1884,49 +1864,60 @@ proc ::tk::dialog::file::Done {w {selectFilePath ""}} { set Priv(selectFilePath) $selectFilePath } +proc ::tk::dialog::file::GlobFiltered {dir type {overrideFilter 0}} { + # $dir == where to search + # $type == what to look for ('d' or 'f b c l p s') + # $overrideFilter == whether to ignore the filter + + variable showHiddenVar + upvar 1 data(filter) filter + + if {$filter eq "*" || $overrideFilter} { + set patterns [list *] + if {$showHiddenVar} { + lappend patterns .* + } + } elseif {[string is list $filter]} { + set patterns $filter + } else { + # Invalid list; assume we can use non-whitespace sequences as words + set patterns [regexp -inline -all {\S+} $filter] + } + + set opts [list -tails -directory $dir -type $type -nocomplain] + + set result {} + catch { + # We have a catch because we might have a really bad pattern (e.g., + # with an unbalanced brace); even [glob -nocomplain] doesn't like it. + # Using a catch ensures that it just means we match nothing instead of + # throwing a nasty error at the user... + foreach f [glob {*}$opts -- {*}$patterns] { + if {$f eq "." || $f eq ".."} { + continue + } + lappend result $f + } + } + return [lsort -dictionary -unique $result] +} + proc ::tk::dialog::file::CompleteEnt {w} { upvar ::tk::dialog::file::[winfo name $w] data set f [$data(ent) get] if {$data(-multiple)} { - if {[catch {llength $f} len] || $len != 1} { + if {![string is list $f] || [llength $f] != 1} { return -code break } set f [lindex $f 0] } # Get list of matching filenames and dirnames - set globF [list glob -tails -directory $data(selectPath) \ - -type {f b c l p s} -nocomplain] - set globD [list glob -tails -directory $data(selectPath) -type d \ - -nocomplain *] - if {$data(filter) eq "*"} { - lappend globF * - if {$::tk::dialog::file::showHiddenVar} { - lappend globF .* - lappend globD .* - } - if {[winfo class $w] eq "TkFDialog"} { - set files [lsort -dictionary -unique [{*}$globF]] - } else { - set files {} - } - set dirs [lsort -dictionary -unique [{*}$globD]] - } else { - if {$::tk::dialog::file::showHiddenVar} { - lappend globD .* - } - if {[winfo class $w] eq "TkFDialog"} { - set files [lsort -dictionary -unique [{*}$globF {*}$data(filter)]] - } else { - set files {} - } - set dirs [lsort -dictionary -unique [{*}$globD]] - } - # Filter specials - set dirs [lsearch -all -not -exact -inline $dirs .] - set dirs [lsearch -all -not -exact -inline $dirs ..] + set files [if {[winfo class $w] eq "TkFDialog"} { + GlobFiltered $data(selectPath) {f b c l p s} + }] set dirs2 {} - foreach d $dirs {lappend dirs2 $d/} + foreach d [GlobFiltered $data(selectPath) d] {lappend dirs2 $d/} set targets [concat \ [lsearch -glob -all -inline $files $f*] \ -- cgit v0.12 From 34619c3877d67d2c96785efe775096802ef77937 Mon Sep 17 00:00:00 2001 From: dgp Date: Sat, 25 Aug 2012 01:52:21 +0000 Subject: 3554026 3561016 Better fix from Emiliano Gavilan. --- unix/tkUnixWm.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/unix/tkUnixWm.c b/unix/tkUnixWm.c index fa130a1..1fe1174 100644 --- a/unix/tkUnixWm.c +++ b/unix/tkUnixWm.c @@ -6274,14 +6274,14 @@ TkSetTransientFor(tkwin, parent) if (parent == None) { parent = Tk_Parent(tkwin); while (!Tk_IsTopLevel(parent)) - parent = Tk_Parent(tkwin); + parent = Tk_Parent(parent); } /* * Prevent crash due to incomplete initialization, or other problems. * [Bugs 3554026, 3561016] */ if (((TkWindow *)parent)->wmInfoPtr->wrapperPtr == NULL) { - return; + CreateWrapper(((TkWindow *)parent)->wmInfoPtr); } XSetTransientForHint(Tk_Display(tkwin), ((TkWindow *)tkwin)->wmInfoPtr->wrapperPtr->window, -- cgit v0.12