Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Changes In Branch cmdline-expansion Excluding Merge-Ins
This is equivalent to a diff from d091c609d2 to cc09cda247
2012-12-01
| ||
03:25 | Improvements to command-line argument glob expansion on windows. Globbing now works correctly when compiled with mingw-w64 and with msvc. It is mostly correct when compiled with mingw, but fails for some files with non-ascii names. check-in: 8205c01cd4 user: drh tags: trunk | |
03:18 | Make sure the SQLite memory allocator is initialized before trying to use it to convert MBCS into UTF8. Closed-Leaf check-in: cc09cda247 user: drh tags: cmdline-expansion | |
2012-11-30
| ||
21:03 | Bump the version number to 1.25 and add a change log in preparation for the next release. check-in: ed1e34c760 user: drh tags: trunk | |
16:59 | forgot makemake.tcl and Makefile.mingw.mistachkin changes check-in: 08802c4af4 user: jan.nijtmans tags: cmdline-expansion | |
16:43 | merge trunk. Add fallback mechanism for MinGW check-in: 2459ee7b71 user: jan.nijtmans tags: cmdline-expansion | |
16:09 | CSS changes: set the cursor to "pointer" on ticket reports. check-in: d091c609d2 user: drh tags: trunk | |
15:52 | Allow characters *[]? to appear in filenames. Tickets [46bf4baedce] and [d17d6e5b174bd6] and [10aee063c413c107] check-in: 647bb7b79f user: drh tags: trunk | |
Changes to src/main.c.
342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 ... 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 ... 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 |
memset(&g.json, 0, sizeof(g.json)); #endif free(g.zErrMsg); if(g.db){ db_close(0); } } #if defined(_WIN32) && !defined(__MINGW32__) /* ** Parse the command-line arguments passed to windows. We do this ** ourselves to work around bugs in the command-line parsing of MinGW. ** It is possible (in theory) to only use this routine when compiling ** with MinGW and to use built-in command-line parsing for MSVC and ** MinGW-64. However, the code is here, it is efficient, and works, and ** by using it in all cases we do a better job of testing it. If you suspect ** a bug in this code, test your theory by invoking "fossil test-echo". ** ** This routine is copied from TCL with some reformatting. ** The original comment text follows: ** ** Parse the Windows command line string into argc/argv. Done here ** because we don't trust the builtin argument parser in crt0. Windows ** applications are responsible for breaking their command line into ** arguments. ** ** 2N backslashes + quote -> N backslashes + begin quoted string ** 2N + 1 backslashes + quote -> literal ** N backslashes + non-quote -> literal ** quote + quote in a quoted string -> single quote ** quote + quote not in quoted string -> empty string ** quote -> begin quoted string ** ** Results: ** Fills argcPtr with the number of arguments and argvPtr with the array ** of arguments. */ #define wchar_isspace(X) ((X)==' ' || (X)=='\t') static void parse_windows_command_line( int *argcPtr, /* Filled with number of argument strings. */ void *argvPtr /* Filled with argument strings (malloc'd). */ ){ WCHAR *cmdLine, *p, *arg, *argSpace; WCHAR **argv; int argc, size, inquote, copy, slashes; cmdLine = GetCommandLineW(); /* ** Precompute an overly pessimistic guess at the number of arguments in ** the command line by counting non-space spans. */ size = 2; for(p=cmdLine; *p!='\0'; p++){ if( wchar_isspace(*p) ){ size++; while( wchar_isspace(*p) ){ p++; } if( *p=='\0' ){ break; } } } argSpace = fossil_malloc(size * sizeof(char*) + (wcslen(cmdLine) * sizeof(WCHAR)) + sizeof(WCHAR)); argv = (WCHAR**)argSpace; argSpace += size*(sizeof(char*)/sizeof(WCHAR)); size--; p = cmdLine; for(argc=0; argc<size; argc++){ argv[argc] = arg = argSpace; while( wchar_isspace(*p) ){ p++; } if (*p == '\0') { break; } inquote = 0; slashes = 0; while(1){ copy = 1; while( *p=='\\' ){ slashes++; p++; } if( *p=='"' ){ if( (slashes&1)==0 ){ copy = 0; if( inquote && p[1]=='"' ){ p++; copy = 1; }else{ inquote = !inquote; } } slashes >>= 1; } while( slashes ){ *arg = '\\'; arg++; slashes--; } if( *p=='\0' || (!inquote && wchar_isspace(*p)) ){ break; } if( copy!=0 ){ *arg = *p; arg++; } p++; } *arg = '\0'; argSpace = arg + 1; } argv[argc] = NULL; *argcPtr = argc; *((WCHAR ***)argvPtr) = argv; } #endif /* defined(_WIN32) && !defined(__MINGW32__) */ /* ** Convert all arguments from mbcs (or unicode) to UTF-8. Then ** search g.argv for arguments "--args FILENAME". If found, then ** (1) remove the two arguments from g.argv ** (2) Read the file FILENAME ** (3) Use the contents of FILE to replace the two removed arguments: ................................................................................ unsigned int nLine; /* Number of lines in the file*/ unsigned int i, j, k; /* Loop counters */ int n; /* Number of bytes in one line */ char *z; /* General use string pointer */ char **newArgv; /* New expanded g.argv under construction */ char const * zFileName; /* input file name */ FILE * zInFile; /* input FILE */ #if defined(_WIN32) && !defined(__MINGW32__) WCHAR buf[MAX_PATH]; #endif g.argc = argc; g.argv = argv; #if defined(_WIN32) && !defined(__MINGW32__) parse_windows_command_line(&g.argc, &g.argv); GetModuleFileNameW(NULL, buf, MAX_PATH); g.nameOfExe = fossil_filename_to_utf8(buf); for(i=0; i<g.argc; i++) g.argv[i] = fossil_filename_to_utf8(g.argv[i]); #elif defined(__APPLE__) for(i=0; i<g.argc; i++) g.argv[i] = fossil_filename_to_utf8(g.argv[i]); g.nameOfExe = g.argv[0]; #else g.nameOfExe = g.argv[0]; #endif for(i=1; i<g.argc-1; i++){ z = g.argv[i]; if( z[0]!='-' ) continue; z++; ................................................................................ memset(zNewArgv, 0, sizeof(char*)*(argc+1)); for(i=0; i<argc; i++){ zNewArgv[i] = fossil_strdup(argv[i]); } return zNewArgv; } #endif /* ** This procedure runs first. */ int main(int argc, char **argv) { const char *zCmdName = "unknown"; int idx; int rc; sqlite3_config(SQLITE_CONFIG_LOG, fossil_sqlite_log, 0); memset(&g, 0, sizeof(g)); |
< < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | > | < | | > | > | < > > > > > > |
342 343 344 345 346 347 348 349 350 351 352 353 354 355 ... 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 ... 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 |
memset(&g.json, 0, sizeof(g.json)); #endif free(g.zErrMsg); if(g.db){ db_close(0); } } /* ** Convert all arguments from mbcs (or unicode) to UTF-8. Then ** search g.argv for arguments "--args FILENAME". If found, then ** (1) remove the two arguments from g.argv ** (2) Read the file FILENAME ** (3) Use the contents of FILE to replace the two removed arguments: ................................................................................ unsigned int nLine; /* Number of lines in the file*/ unsigned int i, j, k; /* Loop counters */ int n; /* Number of bytes in one line */ char *z; /* General use string pointer */ char **newArgv; /* New expanded g.argv under construction */ char const * zFileName; /* input file name */ FILE * zInFile; /* input FILE */ #if defined(_WIN32) WCHAR buf[MAX_PATH]; #endif g.argc = argc; g.argv = argv; sqlite3_initialize(); #if defined(_WIN32) && defined(BROKEN_MINGW_CMDLINE) for(i=0; i<g.argc; i++) g.argv[i] = fossil_mbcs_to_utf8(g.argv[i]); #else for(i=0; i<g.argc; i++) g.argv[i] = fossil_filename_to_utf8(g.argv[i]); #endif #if defined(_WIN32) GetModuleFileNameW(NULL, buf, MAX_PATH); g.nameOfExe = fossil_filename_to_utf8(buf); #else g.nameOfExe = g.argv[0]; #endif for(i=1; i<g.argc-1; i++){ z = g.argv[i]; if( z[0]!='-' ) continue; z++; ................................................................................ memset(zNewArgv, 0, sizeof(char*)*(argc+1)); for(i=0; i<argc; i++){ zNewArgv[i] = fossil_strdup(argv[i]); } return zNewArgv; } #endif /* ** This procedure runs first. */ #if defined(_WIN32) && !defined(BROKEN_MINGW_CMDLINE) int _dowildcard = -1; /* This turns on command-line globbing in MinGW-w64 */ int wmain(int argc, wchar_t **argv) #else int main(int argc, char **argv) #endif { const char *zCmdName = "unknown"; int idx; int rc; sqlite3_config(SQLITE_CONFIG_LOG, fossil_sqlite_log, 0); memset(&g, 0, sizeof(g)); |
Changes to src/makemake.tcl.
502
503
504
505
506
507
508
509
510
511
512
513
514
515
...
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
|
RCC += -DFOSSIL_ENABLE_JSON=1
endif
#### We add the -static option here so that we can build a static
# executable that will run in a chroot jail.
#
LIB = -static
# OpenSSL: Add the necessary libraries required, if enabled.
ifdef FOSSIL_ENABLE_SSL
LIB += -lssl -lcrypto -lgdi32
endif
# Tcl: Add the necessary libraries required, if enabled.
................................................................................
zlib:
@echo Building zlib from "$(ZLIBDIR)"...
@pushd "$(ZLIBDIR)" && nmake /f win32\Makefile.msc $(ZLIB) && popd
$(APPNAME) : translate$E mkindex$E headers $(OBJ) $(OX)\linkopts zlib
cd $(OX)
link /NODEFAULTLIB:msvcrt -OUT:$@ $(LIBDIR) @linkopts
$(OX)\linkopts: $B\win\Makefile.msc}
set redir {>}
foreach s [lsort [concat $src {shell sqlite3 th th_lang}]] {
writeln "\techo \$(OX)\\$s.obj $redir \$@"
set redir {>>}
}
|
>
>
>
>
>
>
|
|
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
...
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
|
RCC += -DFOSSIL_ENABLE_JSON=1 endif #### We add the -static option here so that we can build a static # executable that will run in a chroot jail. # LIB = -static ifeq ($(PREFIX),) TCC += -DBROKEN_MINGW_CMDLINE else LIB += -municode endif # OpenSSL: Add the necessary libraries required, if enabled. ifdef FOSSIL_ENABLE_SSL LIB += -lssl -lcrypto -lgdi32 endif # Tcl: Add the necessary libraries required, if enabled. ................................................................................ zlib: @echo Building zlib from "$(ZLIBDIR)"... @pushd "$(ZLIBDIR)" && nmake /f win32\Makefile.msc $(ZLIB) && popd $(APPNAME) : translate$E mkindex$E headers $(OBJ) $(OX)\linkopts zlib cd $(OX) link /NODEFAULTLIB:msvcrt -OUT:$@ $(LIBDIR) Wsetargv.obj @linkopts $(OX)\linkopts: $B\win\Makefile.msc} set redir {>} foreach s [lsort [concat $src {shell sqlite3 th th_lang}]] { writeln "\techo \$(OX)\\$s.obj $redir \$@" set redir {>>} } |
Changes to win/Makefile.mingw.
172 173 174 175 176 177 178 179 180 181 182 183 184 185 |
RCC += -DFOSSIL_ENABLE_JSON=1 endif #### We add the -static option here so that we can build a static # executable that will run in a chroot jail. # LIB = -static # OpenSSL: Add the necessary libraries required, if enabled. ifdef FOSSIL_ENABLE_SSL LIB += -lssl -lcrypto -lgdi32 endif # Tcl: Add the necessary libraries required, if enabled. |
> > > > > > |
172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 |
RCC += -DFOSSIL_ENABLE_JSON=1 endif #### We add the -static option here so that we can build a static # executable that will run in a chroot jail. # LIB = -static ifeq ($(PREFIX),) TCC += -DBROKEN_MINGW_CMDLINE else LIB += -municode endif # OpenSSL: Add the necessary libraries required, if enabled. ifdef FOSSIL_ENABLE_SSL LIB += -lssl -lcrypto -lgdi32 endif # Tcl: Add the necessary libraries required, if enabled. |
Changes to win/Makefile.mingw.mistachkin.
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
...
172
173
174
175
176
177
178
179
180
181
182
183
184
185
|
# This is a makefile for use on Windows/Linux/Darwin/Cygwin using MinGW or # MinGW-w64. # #### Select one of MinGW, MinGW-64 (32-bit) or MinGW-w64 (64-bit) compilers. # By default, this is an empty string (i.e. use the native compiler). # PREFIX = # PREFIX = mingw32- # PREFIX = i686-pc-mingw32- # PREFIX = i686-w64-mingw32- # PREFIX = x86_64-w64-mingw32- #### The toplevel directory of the source tree. Fossil can be built # in a directory that is separate from the source tree. Just change # the following to point from the build directory to the src/ folder. # SRCDIR = src ................................................................................ RCC += -DFOSSIL_ENABLE_JSON=1 endif #### We add the -static option here so that we can build a static # executable that will run in a chroot jail. # LIB = -static # OpenSSL: Add the necessary libraries required, if enabled. ifdef FOSSIL_ENABLE_SSL LIB += -lssl -lcrypto -lgdi32 endif # Tcl: Add the necessary libraries required, if enabled. |
|
|
>
>
>
>
>
>
|
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
...
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
|
# This is a makefile for use on Windows/Linux/Darwin/Cygwin using MinGW or # MinGW-w64. # #### Select one of MinGW, MinGW-64 (32-bit) or MinGW-w64 (64-bit) compilers. # By default, this is an empty string (i.e. use the native compiler). # # PREFIX = # PREFIX = mingw32- # PREFIX = i686-pc-mingw32- PREFIX = i686-w64-mingw32- # PREFIX = x86_64-w64-mingw32- #### The toplevel directory of the source tree. Fossil can be built # in a directory that is separate from the source tree. Just change # the following to point from the build directory to the src/ folder. # SRCDIR = src ................................................................................ RCC += -DFOSSIL_ENABLE_JSON=1 endif #### We add the -static option here so that we can build a static # executable that will run in a chroot jail. # LIB = -static ifeq ($(PREFIX),) TCC += -DBROKEN_MINGW_CMDLINE else LIB += -municode endif # OpenSSL: Add the necessary libraries required, if enabled. ifdef FOSSIL_ENABLE_SSL LIB += -lssl -lcrypto -lgdi32 endif # Tcl: Add the necessary libraries required, if enabled. |
Changes to win/Makefile.msc.
252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 |
zlib: @echo Building zlib from "$(ZLIBDIR)"... @pushd "$(ZLIBDIR)" && nmake /f win32\Makefile.msc $(ZLIB) && popd $(APPNAME) : translate$E mkindex$E headers $(OBJ) $(OX)\linkopts zlib cd $(OX) link /NODEFAULTLIB:msvcrt -OUT:$@ $(LIBDIR) @linkopts $(OX)\linkopts: $B\win\Makefile.msc echo $(OX)\add.obj > $@ echo $(OX)\allrepo.obj >> $@ echo $(OX)\attach.obj >> $@ echo $(OX)\bag.obj >> $@ echo $(OX)\bisect.obj >> $@ |
| |
252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 |
zlib:
@echo Building zlib from "$(ZLIBDIR)"...
@pushd "$(ZLIBDIR)" && nmake /f win32\Makefile.msc $(ZLIB) && popd
$(APPNAME) : translate$E mkindex$E headers $(OBJ) $(OX)\linkopts zlib
cd $(OX)
link /NODEFAULTLIB:msvcrt -OUT:$@ $(LIBDIR) Wsetargv.obj @linkopts
$(OX)\linkopts: $B\win\Makefile.msc
echo $(OX)\add.obj > $@
echo $(OX)\allrepo.obj >> $@
echo $(OX)\attach.obj >> $@
echo $(OX)\bag.obj >> $@
echo $(OX)\bisect.obj >> $@
|