Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Changes In Branch tcl-integration Excluding Merge-Ins
This is equivalent to a diff from 98cc520652 to dd275844a5
2011-11-04
| ||
19:46 | Merge the tcl-integration branch into trunk. To make use of big-tcl, recompile using the --with-tcl option to ./configure and either set the global "tcl" setting or set the TH1_ENABLE_TCL environment variable. Big-tcl is turned off by default. check-in: d8ed5a0d05 user: drh tags: trunk | |
19:39 | Patch the auto.def file so that the TCL library is found even if it is named tcl8.6 or tcl8.5 instead of just tcl. Closed-Leaf check-in: dd275844a5 user: drh tags: tcl-integration | |
2011-10-27
| ||
15:00 | Prevent shell argument manipulation performed automatically by the MinGW shell from interfering with the makeheaders tool used by the Makefile. check-in: 827a54fe6c user: mistachkin tags: tcl-integration | |
2011-10-26
| ||
15:41 | Improvements to the User-Agent bot recognizer. Add the test-ishuman command for testing the bot recognizer. check-in: 06e0cb7005 user: drh tags: trunk | |
15:17 | Merge updates from trunk. check-in: 7017c87b40 user: mistachkin tags: tcl-integration | |
14:58 | Add configuration options under /Admin/Access to enable the automatic hyperlink enabling for nobody based on User-Agent. check-in: 98cc520652 user: drh tags: trunk | |
14:00 | Automatically enable hyperlinks for user agents that appear to be human. check-in: e059e5a24d user: drh tags: trunk | |
Changes to Makefile.in.
7 7 #### The toplevel directory of the source tree. Fossil can be built 8 8 # in a directory that is separate from the source tree. Just change 9 9 # the following to point from the build directory to the src/ folder. 10 10 # 11 11 SRCDIR = @srcdir@/src 12 12 13 13 #### The directory into which object code files should be written. 14 +# Having a "./" prefix in the value of this variable breaks our use of the 15 +# "makeheaders" tool when running make on the MinGW platform, apparently 16 +# due to some command line argument manipulation performed automatically 17 +# by the shell. 14 18 # 15 19 # 16 -OBJDIR = ./bld 20 +OBJDIR = bld 17 21 18 22 #### C Compiler and options for use in building executables that 19 23 # will run on the platform that is doing the build. This is used 20 24 # to compile code-generator programs as part of the build process. 21 25 # See TCC below for the C compiler for building the finished binary. 22 26 # 23 27 BCC = @CC_FOR_BUILD@
Changes to auto.def.
2 2 3 3 use cc cc-lib 4 4 5 5 options { 6 6 with-openssl:path|auto|none 7 7 => {Look for openssl in the given path, or auto or none} 8 8 with-zlib:path => {Look for zlib in the given path} 9 + with-tcl:path => {Enable Tcl integration, with Tcl in the specified path} 9 10 internal-sqlite=1 => {Don't use the internal sqlite, use the system one} 10 11 static=0 => {Link a static executable} 11 12 lineedit=1 => {Disable line editing} 12 13 fossil-debug=0 => {Build with fossil debugging enabled} 13 14 } 14 15 15 16 # sqlite wants these types if possible ................................................................................ 76 77 cc-with [list -cflags "-I$zlibpath -L$zlibpath"] 77 78 define-append EXTRA_CFLAGS -I$zlibpath 78 79 define-append EXTRA_LDFLAGS -L$zlibpath 79 80 } 80 81 if {![cc-check-includes zlib.h] || ![cc-check-function-in-lib inflateEnd z]} { 81 82 user-error "zlib not found please install it or specify the location with --with-zlib" 82 83 } 84 + 85 +set tclpath [opt-val with-tcl] 86 +if {$tclpath ne ""} { 87 + if {$tclpath ne "1"} { 88 + cc-with [list -cflags [list -I$tclpath/include -L$tclpath/lib]] 89 + } 90 + if {![cc-check-includes tcl.h]} { 91 + user-error "Cannot find tcl.h" 92 + } 93 + foreach tlib {tcl8.6 tcl8.5 tcl notfound} { 94 + if {$tlib=="notfound"} { 95 + user-error "Cannot find a usable libtcl" 96 + } 97 + if {[cc-check-function-in-lib Tcl_CreateInterp $tlib]} { 98 + define-append LIBS -l$tlib 99 + break 100 + } 101 + } 102 + define FOSSIL_ENABLE_TCL 103 + if {$tclpath ne "1"} { 104 + define-append EXTRA_CFLAGS -I$tclpath/include 105 + define-append EXTRA_LDFLAGS -L$tclpath/lib 106 + } 107 +} 83 108 84 109 # Helper for openssl checking 85 110 proc check-for-openssl {msg {cflags {}}} { 86 111 msg-checking "Checking for $msg..." 87 112 set rc 0 88 113 msg-quiet cc-with [list -cflags $cflags -libs {-lssl -lcrypto}] { 89 114 if {[cc-check-includes openssl/ssl.h] && [cc-check-functions SSL_new]} {
Changes to src/db.c.
1790 1790 { "proxy", 0, 32, 0, "off" }, 1791 1791 { "relative-paths",0, 0, 0, "on" }, 1792 1792 { "repo-cksum", 0, 0, 0, "on" }, 1793 1793 { "self-register", 0, 0, 0, "off" }, 1794 1794 { "ssl-ca-location",0, 40, 0, "" }, 1795 1795 { "ssl-identity", 0, 40, 0, "" }, 1796 1796 { "ssh-command", 0, 32, 0, "" }, 1797 +#ifdef FOSSIL_ENABLE_TCL 1798 + { "tcl", 0, 0, 0, "off" }, 1799 +#endif 1797 1800 { "web-browser", 0, 32, 0, "" }, 1798 1801 { "white-foreground", 0, 0, 0, "off" }, 1799 1802 { 0,0,0,0,0 } 1800 1803 }; 1801 1804 1802 1805 /* 1803 1806 ** COMMAND: settings ................................................................................ 1943 1946 ** the certificate and private key files. 1944 1947 ** This identity will be presented to SSL servers to 1945 1948 ** authenticate this client, in addition to the normal 1946 1949 ** password authentication. 1947 1950 ** 1948 1951 ** ssh-command Command used to talk to a remote machine with 1949 1952 ** the "ssh://" protocol. 1953 +** 1954 +** tcl If enabled, Tcl integration commands will be added to 1955 +** the TH1 interpreter, allowing Tcl expressions and 1956 +** scripts to be evaluated from TH1. Additionally, the 1957 +** Tcl interpreter will be able to evaluate TH1 expressions 1958 +** and scripts. Default: off. 1950 1959 ** 1951 1960 ** web-browser A shell command used to launch your preferred 1952 1961 ** web browser when given a URL as an argument. 1953 1962 ** Defaults to "start" on windows, "open" on Mac, 1954 1963 ** and "firefox" on Unix. 1955 1964 */ 1956 1965 void setting_cmd(void){
Changes to src/main.c.
25 25 #include <fcntl.h> 26 26 #include <sys/types.h> 27 27 #include <sys/stat.h> 28 28 29 29 30 30 #if INTERFACE 31 31 32 +#ifdef FOSSIL_ENABLE_TCL 33 +#include "tcl.h" 34 +#endif 35 + 32 36 /* 33 37 ** Number of elements in an array 34 38 */ 35 39 #define count(X) (sizeof(X)/sizeof(X[0])) 36 40 37 41 /* 38 42 ** Size of a UUID in characters ................................................................................ 67 71 char WrTkt; /* w: make changes to tickets via web */ 68 72 char Attach; /* b: add attachments */ 69 73 char TktFmt; /* t: create new ticket report formats */ 70 74 char RdAddr; /* e: read email addresses or other private data */ 71 75 char Zip; /* z: download zipped artifact via /zip URL */ 72 76 char Private; /* x: can send and receive private content */ 73 77 }; 78 + 79 +#ifdef FOSSIL_ENABLE_TCL 80 +/* 81 +** All Tcl related context information is in this structure. This structure 82 +** definition has been copied from and should be kept in sync with the one in 83 +** "th_tcl.c". 84 +*/ 85 +struct TclContext { 86 + int argc; 87 + char **argv; 88 + Tcl_Interp *interp; 89 +}; 90 +#endif 74 91 75 92 /* 76 93 ** All global variables are in this structure. 77 94 */ 78 95 struct Global { 79 96 int argc; char **argv; /* Command-line arguments to the program */ 80 97 int isConst; /* True if the output is unchanging */ ................................................................................ 143 160 /* Information used to populate the RCVFROM table */ 144 161 int rcvid; /* The rcvid. 0 if not yet defined. */ 145 162 char *zIpAddr; /* The remote IP address */ 146 163 char *zNonce; /* The nonce used for login */ 147 164 148 165 /* permissions used by the server */ 149 166 struct FossilUserPerms perm; 167 + 168 +#ifdef FOSSIL_ENABLE_TCL 169 + /* all Tcl related context necessary for integration */ 170 + struct TclContext tcl; 171 +#endif 150 172 151 173 /* For defense against Cross-site Request Forgery attacks */ 152 174 char zCsrfToken[12]; /* Value of the anti-CSRF token */ 153 175 int okCsrf; /* Anti-CSRF token is present and valid */ 154 176 155 177 int parseCnt[10]; /* Counts of artifacts parsed */ 156 178 FILE *fDebug; /* Write debug information here, if the file exists */ ................................................................................ 311 333 ** This procedure runs first. 312 334 */ 313 335 int main(int argc, char **argv){ 314 336 const char *zCmdName = "unknown"; 315 337 int idx; 316 338 int rc; 317 339 int i; 340 + 341 +#ifdef FOSSIL_ENABLE_TCL 342 + g.tcl.argc = argc; 343 + g.tcl.argv = argv; 344 + g.tcl.interp = 0; 345 +#endif 318 346 319 347 sqlite3_config(SQLITE_CONFIG_LOG, fossil_sqlite_log, 0); 320 348 g.now = time(0); 321 349 g.argc = argc; 322 350 g.argv = argv; 323 351 expand_args_option(); 324 352 argc = g.argc;
Changes to src/main.mk.
299 299 # to 1. If it is set to 1, then there is no need to build or link 300 300 # the sqlite3.o object. Instead, the system sqlite will be linked 301 301 # using -lsqlite3. 302 302 SQLITE3_OBJ.1 = 303 303 SQLITE3_OBJ.0 = $(OBJDIR)/sqlite3.o 304 304 SQLITE3_OBJ. = $(SQLITE3_OBJ.0) 305 305 306 -EXTRAOBJ = $(SQLITE3_OBJ.$(USE_SYSTEM_SQLITE)) $(OBJDIR)/shell.o $(OBJDIR)/th.o $(OBJDIR)/th_lang.o 306 +TCL_OBJ.1 = 307 +TCL_OBJ.0 = $(OBJDIR)/th_tcl.o 308 +TCL_OBJ. = $(TCL_OBJ.0) 309 + 310 +EXTRAOBJ = $(SQLITE3_OBJ.$(USE_SYSTEM_SQLITE)) $(OBJDIR)/shell.o $(OBJDIR)/th.o $(OBJDIR)/th_lang.o $(TCL_OBJ.$(FOSSIL_ENABLE_TCL)) 307 311 308 312 $(APPNAME): $(OBJDIR)/headers $(OBJ) $(EXTRAOBJ) 309 313 $(TCC) -o $(APPNAME) $(OBJ) $(EXTRAOBJ) $(LIB) 310 314 311 315 # This rule prevents make from using its default rules to try build 312 316 # an executable named "manifest" out of the file named "manifest.c" 313 317 # ................................................................................ 907 911 908 912 $(OBJDIR)/th.o: $(SRCDIR)/th.c 909 913 $(XTCC) -I$(SRCDIR) -c $(SRCDIR)/th.c -o $(OBJDIR)/th.o 910 914 911 915 $(OBJDIR)/th_lang.o: $(SRCDIR)/th_lang.c 912 916 $(XTCC) -I$(SRCDIR) -c $(SRCDIR)/th_lang.c -o $(OBJDIR)/th_lang.o 913 917 918 +$(OBJDIR)/th_tcl.o: $(SRCDIR)/th_tcl.c 919 + $(XTCC) -I$(SRCDIR) -c $(SRCDIR)/th_tcl.c -o $(OBJDIR)/th_tcl.o 920 +
Changes to src/makemake.tcl.
196 196 # to 1. If it is set to 1, then there is no need to build or link 197 197 # the sqlite3.o object. Instead, the system sqlite will be linked 198 198 # using -lsqlite3. 199 199 SQLITE3_OBJ.1 = 200 200 SQLITE3_OBJ.0 = $(OBJDIR)/sqlite3.o 201 201 SQLITE3_OBJ. = $(SQLITE3_OBJ.0) 202 202 203 +TCL_OBJ.1 = 204 +TCL_OBJ.0 = $(OBJDIR)/th_tcl.o 205 +TCL_OBJ. = $(TCL_OBJ.0) 206 + 203 207 EXTRAOBJ = \ 204 208 $(SQLITE3_OBJ.$(USE_SYSTEM_SQLITE)) \ 205 209 $(OBJDIR)/shell.o \ 206 210 $(OBJDIR)/th.o \ 207 - $(OBJDIR)/th_lang.o 211 + $(OBJDIR)/th_lang.o \ 212 + $(TCL_OBJ.$(FOSSIL_ENABLE_TCL)) 208 213 209 214 $(APPNAME): $(OBJDIR)/headers $(OBJ) $(EXTRAOBJ) 210 215 $(TCC) -o $(APPNAME) $(OBJ) $(EXTRAOBJ) $(LIB) 211 216 212 217 # This rule prevents make from using its default rules to try build 213 218 # an executable named "manifest" out of the file named "manifest.c" 214 219 # ................................................................................ 263 268 264 269 writeln "\$(OBJDIR)/th.o:\t\$(SRCDIR)/th.c" 265 270 writeln "\t\$(XTCC) -I\$(SRCDIR) -c \$(SRCDIR)/th.c -o \$(OBJDIR)/th.o\n" 266 271 267 272 writeln "\$(OBJDIR)/th_lang.o:\t\$(SRCDIR)/th_lang.c" 268 273 writeln "\t\$(XTCC) -I\$(SRCDIR) -c \$(SRCDIR)/th_lang.c -o \$(OBJDIR)/th_lang.o\n" 269 274 275 +writeln "\$(OBJDIR)/th_tcl.o:\t\$(SRCDIR)/th_tcl.c" 276 +writeln "\t\$(XTCC) -I\$(SRCDIR) -c \$(SRCDIR)/th_tcl.c -o \$(OBJDIR)/th_tcl.o\n" 277 + 270 278 close $output_file 271 279 # 272 280 # End of the main.mk output 273 281 ############################################################################## 274 282 ############################################################################## 275 283 ############################################################################## 276 284 # Begin win/Makefile.mingw
Changes to src/th.h.
152 152 /* 153 153 ** Interfaces to register the language extensions. 154 154 */ 155 155 int th_register_language(Th_Interp *interp); /* th_lang.c */ 156 156 int th_register_sqlite(Th_Interp *interp); /* th_sqlite.c */ 157 157 int th_register_vfs(Th_Interp *interp); /* th_vfs.c */ 158 158 int th_register_testvfs(Th_Interp *interp); /* th_testvfs.c */ 159 +int th_register_tcl(Th_Interp *interp, void *pContext); /* th_tcl.c */ 159 160 160 161 /* 161 162 ** General purpose hash table from th_lang.c. 162 163 */ 163 164 typedef struct Th_Hash Th_Hash; 164 165 typedef struct Th_HashEntry Th_HashEntry; 165 166 struct Th_HashEntry {
Changes to src/th_main.c.
91 91 z = htmlize(z, n); 92 92 n = strlen(z); 93 93 } 94 94 if( g.cgiOutput ){ 95 95 cgi_append_content(z, n); 96 96 }else{ 97 97 fwrite(z, 1, n, stdout); 98 + fflush(stdout); 98 99 } 99 100 if( encode ) free((char*)z); 100 101 } 101 102 } 102 103 103 104 /* 104 105 ** TH command: puts STRING ................................................................................ 332 333 } 333 334 } 334 335 if( n<iMin ) n = iMin; 335 336 if( n>iMax ) n = iMax; 336 337 Th_SetResultInt(interp, n); 337 338 return TH_OK; 338 339 } 340 + 341 +/* 342 +** TH1 command: repository ?BOOLEAN? 343 +** 344 +** Return the fully qualified file name of the open repository or an empty 345 +** string if one is not currently open. Optionally, it will attempt to open 346 +** the repository if the boolean argument is non-zero. 347 +*/ 348 +static int repositoryCmd( 349 + Th_Interp *interp, 350 + void *p, 351 + int argc, 352 + const char **argv, 353 + int *argl 354 +){ 355 + int openRepository; 356 + 357 + if( argc!=1 && argc!=2 ){ 358 + return Th_WrongNumArgs(interp, "repository ?BOOLEAN?"); 359 + } 360 + if( argc==2 ){ 361 + if( Th_ToInt(interp, argv[1], argl[1], &openRepository) ){ 362 + return TH_ERROR; 363 + } 364 + if( openRepository ) db_find_and_open_repository(OPEN_OK_NOT_FOUND, 0); 365 + } 366 + Th_SetResult(interp, g.zRepositoryName, -1); 367 + return TH_OK; 368 +} 339 369 340 370 /* 341 371 ** Make sure the interpreter has been initialized. Initialize it if 342 372 ** it has not been already. 343 373 ** 344 374 ** The interpreter is stored in the g.interp global variable. 345 375 */ ................................................................................ 355 385 {"linecount", linecntCmd, 0}, 356 386 {"hascap", hascapCmd, 0}, 357 387 {"htmlize", htmlizeCmd, 0}, 358 388 {"date", dateCmd, 0}, 359 389 {"html", putsCmd, 0}, 360 390 {"puts", putsCmd, (void*)1}, 361 391 {"wiki", wikiCmd, 0}, 392 + {"repository", repositoryCmd, 0}, 362 393 }; 363 394 if( g.interp==0 ){ 364 395 int i; 365 396 g.interp = Th_CreateInterp(&vtab); 366 397 th_register_language(g.interp); /* Basic scripting commands. */ 398 +#ifdef FOSSIL_ENABLE_TCL 399 + if( getenv("TH1_ENABLE_TCL")!=0 || db_get_boolean("tcl", 0) ){ 400 + th_register_tcl(g.interp, &g.tcl); /* Tcl integration commands. */ 401 + } 402 +#endif 367 403 for(i=0; i<sizeof(aCommand)/sizeof(aCommand[0]); i++){ 368 404 Th_CreateCommand(g.interp, aCommand[i].zName, aCommand[i].xProc, 369 405 aCommand[i].pContext, 0); 370 406 } 371 407 } 372 408 } 373 409 ................................................................................ 527 563 ** COMMAND: test-th-render 528 564 */ 529 565 void test_th_render(void){ 530 566 Blob in; 531 567 if( g.argc<3 ){ 532 568 usage("FILE"); 533 569 } 570 + db_open_config(0); /* Needed for "tcl" setting. */ 534 571 blob_zero(&in); 535 572 blob_read_from_file(&in, g.argv[2]); 536 573 Th_Render(blob_str(&in)); 537 574 }
Added src/th_tcl.c.
1 +/* 2 +** This file contains code used to bridge the TH1 and Tcl scripting languages. 3 +*/ 4 + 5 +#include "config.h" 6 + 7 +#ifdef FOSSIL_ENABLE_TCL 8 + 9 +#include "th.h" 10 +#include "tcl.h" 11 + 12 +/* 13 +** Are we being compiled against Tcl 8.6 or higher? 14 + */ 15 +#if (TCL_MAJOR_VERSION > 8) || \ 16 + ((TCL_MAJOR_VERSION == 8) && (TCL_MINOR_VERSION >= 6)) 17 +/* 18 +** Workaround NRE-specific issue in Tcl_EvalObjCmd (SF bug #3399564) by using 19 +** Tcl_EvalObjv instead of invoking the objProc directly. 20 + */ 21 +#define USE_TCL_EVALOBJV 1 22 +#endif 23 + 24 +/* 25 +** These macros are designed to reduce the redundant code required to marshal 26 +** arguments from TH1 to Tcl. 27 + */ 28 +#define USE_ARGV_TO_OBJV() \ 29 + int objc; \ 30 + Tcl_Obj **objv; \ 31 + int i; 32 + 33 +#define COPY_ARGV_TO_OBJV() \ 34 + objc = argc-1; \ 35 + objv = (Tcl_Obj **)ckalloc((unsigned)(objc * sizeof(Tcl_Obj *))); \ 36 + for(i=1; i<argc; i++){ \ 37 + objv[i-1] = Tcl_NewStringObj(argv[i], argl[i]); \ 38 + Tcl_IncrRefCount(objv[i-1]); \ 39 + } 40 + 41 +#define FREE_ARGV_TO_OBJV() \ 42 + for(i=1; i<argc; i++){ \ 43 + Tcl_DecrRefCount(objv[i-1]); \ 44 + } \ 45 + ckfree((char *)objv); 46 + 47 +/* 48 +** Fetch the Tcl interpreter from the specified void pointer, cast to a Tcl 49 +** context. 50 + */ 51 +#define GET_CTX_TCL_INTERP(ctx) \ 52 + ((struct TclContext *)(ctx))->interp 53 + 54 +/* 55 +** Creates and initializes a Tcl interpreter for use with the specified TH1 56 +** interpreter. Stores the created Tcl interpreter in the Tcl context supplied 57 +** by the caller. This must be declared here because quite a few functions in 58 +** this file need to use it before it can be defined. 59 + */ 60 +static int createTclInterp(Th_Interp *interp, void *pContext); 61 + 62 +/* 63 +** Returns the Tcl interpreter result as a string with the associated length. 64 +** If the Tcl interpreter or the Tcl result are NULL, the length will be 0. 65 +** If the length pointer is NULL, the length will not be stored. 66 + */ 67 +static char *getTclResult( 68 + Tcl_Interp *pInterp, 69 + int *pN 70 +){ 71 + Tcl_Obj *resultPtr; 72 + if( !pInterp ){ /* This should not happen. */ 73 + if( pN ) *pN = 0; 74 + return 0; 75 + } 76 + resultPtr = Tcl_GetObjResult(pInterp); 77 + if( !resultPtr ){ /* This should not happen either? */ 78 + if( pN ) *pN = 0; 79 + return 0; 80 + } 81 + return Tcl_GetStringFromObj(resultPtr, pN); 82 +} 83 + 84 +/* 85 +** Tcl context information used by TH1. This structure definition has been 86 +** copied from and should be kept in sync with the one in "main.c". 87 +*/ 88 +struct TclContext { 89 + int argc; 90 + char **argv; 91 + Tcl_Interp *interp; 92 +}; 93 + 94 +/* 95 +** Syntax: 96 +** 97 +** tclEval arg ?arg ...? 98 +*/ 99 +static int tclEval_command( 100 + Th_Interp *interp, 101 + void *ctx, 102 + int argc, 103 + const char **argv, 104 + int *argl 105 +){ 106 + Tcl_Interp *tclInterp; 107 + Tcl_Obj *objPtr; 108 + int rc; 109 + int nResult; 110 + const char *zResult; 111 + 112 + if ( createTclInterp(interp, ctx)!=TH_OK ){ 113 + return TH_ERROR; 114 + } 115 + if( argc<2 ){ 116 + return Th_WrongNumArgs(interp, "tclEval arg ?arg ...?"); 117 + } 118 + tclInterp = GET_CTX_TCL_INTERP(ctx); 119 + if( !tclInterp || Tcl_InterpDeleted(tclInterp) ){ 120 + Th_ErrorMessage(interp, "invalid Tcl interpreter", (const char *)"", 0); 121 + return TH_ERROR; 122 + } 123 + Tcl_Preserve((ClientData)tclInterp); 124 + if( argc==2 ){ 125 + objPtr = Tcl_NewStringObj(argv[1], argl[1]); 126 + Tcl_IncrRefCount(objPtr); 127 + rc = Tcl_EvalObjEx(tclInterp, objPtr, 0); 128 + Tcl_DecrRefCount(objPtr); 129 + }else{ 130 + USE_ARGV_TO_OBJV(); 131 + COPY_ARGV_TO_OBJV(); 132 + objPtr = Tcl_ConcatObj(objc, objv); 133 + Tcl_IncrRefCount(objPtr); 134 + rc = Tcl_EvalObjEx(tclInterp, objPtr, 0); 135 + Tcl_DecrRefCount(objPtr); 136 + FREE_ARGV_TO_OBJV(); 137 + } 138 + zResult = getTclResult(tclInterp, &nResult); 139 + Th_SetResult(interp, zResult, nResult); 140 + Tcl_Release((ClientData)tclInterp); 141 + return rc; 142 +} 143 + 144 +/* 145 +** Syntax: 146 +** 147 +** tclExpr arg ?arg ...? 148 +*/ 149 +static int tclExpr_command( 150 + Th_Interp *interp, 151 + void *ctx, 152 + int argc, 153 + const char **argv, 154 + int *argl 155 +){ 156 + Tcl_Interp *tclInterp; 157 + Tcl_Obj *objPtr; 158 + Tcl_Obj *resultObjPtr; 159 + int rc; 160 + int nResult; 161 + const char *zResult; 162 + 163 + if ( createTclInterp(interp, ctx)!=TH_OK ){ 164 + return TH_ERROR; 165 + } 166 + if( argc<2 ){ 167 + return Th_WrongNumArgs(interp, "tclExpr arg ?arg ...?"); 168 + } 169 + tclInterp = GET_CTX_TCL_INTERP(ctx); 170 + if( !tclInterp || Tcl_InterpDeleted(tclInterp) ){ 171 + Th_ErrorMessage(interp, "invalid Tcl interpreter", (const char *)"", 0); 172 + return TH_ERROR; 173 + } 174 + Tcl_Preserve((ClientData)tclInterp); 175 + if( argc==2 ){ 176 + objPtr = Tcl_NewStringObj(argv[1], argl[1]); 177 + Tcl_IncrRefCount(objPtr); 178 + rc = Tcl_ExprObj(tclInterp, objPtr, &resultObjPtr); 179 + Tcl_DecrRefCount(objPtr); 180 + }else{ 181 + USE_ARGV_TO_OBJV(); 182 + COPY_ARGV_TO_OBJV(); 183 + objPtr = Tcl_ConcatObj(objc, objv); 184 + Tcl_IncrRefCount(objPtr); 185 + rc = Tcl_ExprObj(tclInterp, objPtr, &resultObjPtr); 186 + Tcl_DecrRefCount(objPtr); 187 + FREE_ARGV_TO_OBJV(); 188 + } 189 + if( rc==TCL_OK ){ 190 + zResult = Tcl_GetStringFromObj(resultObjPtr, &nResult); 191 + }else{ 192 + zResult = getTclResult(tclInterp, &nResult); 193 + } 194 + Th_SetResult(interp, zResult, nResult); 195 + if( rc==TCL_OK ) Tcl_DecrRefCount(resultObjPtr); 196 + Tcl_Release((ClientData)tclInterp); 197 + return rc; 198 +} 199 + 200 +/* 201 +** Syntax: 202 +** 203 +** tclInvoke command ?arg ...? 204 +*/ 205 +static int tclInvoke_command( 206 + Th_Interp *interp, 207 + void *ctx, 208 + int argc, 209 + const char **argv, 210 + int *argl 211 +){ 212 + Tcl_Interp *tclInterp; 213 +#ifndef USE_TCL_EVALOBJV 214 + Tcl_Command command; 215 + Tcl_CmdInfo cmdInfo; 216 +#endif 217 + int rc; 218 + int nResult; 219 + const char *zResult; 220 +#ifndef USE_TCL_EVALOBJV 221 + Tcl_Obj *objPtr; 222 +#endif 223 + USE_ARGV_TO_OBJV(); 224 + 225 + if ( createTclInterp(interp, ctx)!=TH_OK ){ 226 + return TH_ERROR; 227 + } 228 + if( argc<2 ){ 229 + return Th_WrongNumArgs(interp, "tclInvoke command ?arg ...?"); 230 + } 231 + tclInterp = GET_CTX_TCL_INTERP(ctx); 232 + if( !tclInterp || Tcl_InterpDeleted(tclInterp) ){ 233 + Th_ErrorMessage(interp, "invalid Tcl interpreter", (const char *)"", 0); 234 + return TH_ERROR; 235 + } 236 + Tcl_Preserve((ClientData)tclInterp); 237 +#ifndef USE_TCL_EVALOBJV 238 + objPtr = Tcl_NewStringObj(argv[1], argl[1]); 239 + Tcl_IncrRefCount(objPtr); 240 + command = Tcl_GetCommandFromObj(tclInterp, objPtr); 241 + if( !command || Tcl_GetCommandInfoFromToken(command,&cmdInfo)==0 ){ 242 + Th_ErrorMessage(interp, "Tcl command not found:", argv[1], argl[1]); 243 + Tcl_DecrRefCount(objPtr); 244 + Tcl_Release((ClientData)tclInterp); 245 + return TH_ERROR; 246 + } 247 + if( !cmdInfo.objProc ){ 248 + Th_ErrorMessage(interp, "Cannot invoke Tcl command:", argv[1], argl[1]); 249 + Tcl_DecrRefCount(objPtr); 250 + Tcl_Release((ClientData)tclInterp); 251 + return TH_ERROR; 252 + } 253 + Tcl_DecrRefCount(objPtr); 254 +#endif 255 + COPY_ARGV_TO_OBJV(); 256 +#ifdef USE_TCL_EVALOBJV 257 + rc = Tcl_EvalObjv(tclInterp, objc, objv, 0); 258 +#else 259 + Tcl_ResetResult(tclInterp); 260 + rc = cmdInfo.objProc(cmdInfo.objClientData, tclInterp, objc, objv); 261 +#endif 262 + FREE_ARGV_TO_OBJV(); 263 + zResult = getTclResult(tclInterp, &nResult); 264 + Th_SetResult(interp, zResult, nResult); 265 + Tcl_Release((ClientData)tclInterp); 266 + return rc; 267 +} 268 + 269 +/* 270 +** Syntax: 271 +** 272 +** th1Eval arg 273 +*/ 274 +static int Th1EvalObjCmd( 275 + ClientData clientData, 276 + Tcl_Interp *interp, 277 + int objc, 278 + Tcl_Obj *CONST objv[] 279 +){ 280 + Th_Interp *th1Interp; 281 + int nArg; 282 + const char *arg; 283 + int rc; 284 + 285 + if( objc!=2 ){ 286 + Tcl_WrongNumArgs(interp, 1, objv, "arg"); 287 + return TCL_ERROR; 288 + } 289 + th1Interp = (Th_Interp *)clientData; 290 + if( !th1Interp ){ 291 + Tcl_AppendResult(interp, "invalid TH1 interpreter", NULL); 292 + return TCL_ERROR; 293 + } 294 + arg = Tcl_GetStringFromObj(objv[1], &nArg); 295 + rc = Th_Eval(th1Interp, 0, arg, nArg); 296 + arg = Th_GetResult(th1Interp, &nArg); 297 + Tcl_SetObjResult(interp, Tcl_NewStringObj(arg, nArg)); 298 + return rc; 299 +} 300 + 301 +/* 302 +** Syntax: 303 +** 304 +** th1Expr arg 305 +*/ 306 +static int Th1ExprObjCmd( 307 + ClientData clientData, 308 + Tcl_Interp *interp, 309 + int objc, 310 + Tcl_Obj *CONST objv[] 311 +){ 312 + Th_Interp *th1Interp; 313 + int nArg; 314 + const char *arg; 315 + int rc; 316 + 317 + if( objc!=2 ){ 318 + Tcl_WrongNumArgs(interp, 1, objv, "arg"); 319 + return TCL_ERROR; 320 + } 321 + th1Interp = (Th_Interp *)clientData; 322 + if( !th1Interp ){ 323 + Tcl_AppendResult(interp, "invalid TH1 interpreter", NULL); 324 + return TCL_ERROR; 325 + } 326 + arg = Tcl_GetStringFromObj(objv[1], &nArg); 327 + rc = Th_Expr(th1Interp, arg, nArg); 328 + arg = Th_GetResult(th1Interp, &nArg); 329 + Tcl_SetObjResult(interp, Tcl_NewStringObj(arg, nArg)); 330 + return rc; 331 +} 332 + 333 +/* 334 +** Array of Tcl integration commands. Used when adding or removing the Tcl 335 +** integration commands from TH1. 336 +*/ 337 +static struct _Command { 338 + const char *zName; 339 + Th_CommandProc xProc; 340 + void *pContext; 341 +} aCommand[] = { 342 + {"tclEval", tclEval_command, 0}, 343 + {"tclExpr", tclExpr_command, 0}, 344 + {"tclInvoke", tclInvoke_command, 0}, 345 + {0, 0, 0} 346 +}; 347 + 348 +/* 349 +** Called if the Tcl interpreter is deleted. Removes the Tcl integration 350 +** commands from the TH1 interpreter. 351 + */ 352 +static void Th1DeleteProc( 353 + ClientData clientData, 354 + Tcl_Interp *interp 355 +){ 356 + int i; 357 + Th_Interp *th1Interp = (Th_Interp *)clientData; 358 + if( !th1Interp ) return; 359 + /* Remove the Tcl integration commands. */ 360 + for(i=0; i<(sizeof(aCommand)/sizeof(aCommand[0])); i++){ 361 + Th_RenameCommand(th1Interp, aCommand[i].zName, -1, NULL, 0); 362 + } 363 +} 364 + 365 +/* 366 +** Creates and initializes a Tcl interpreter for use with the specified TH1 367 +** interpreter. Stores the created Tcl interpreter in the Tcl context supplied 368 +** by the caller. 369 + */ 370 +static int createTclInterp( 371 + Th_Interp *interp, 372 + void *pContext 373 +){ 374 + struct TclContext *tclContext = (struct TclContext *)pContext; 375 + Tcl_Interp *tclInterp; 376 + 377 + if ( !tclContext ){ 378 + Th_ErrorMessage(interp, 379 + "Invalid Tcl context", (const char *)"", 0); 380 + return TH_ERROR; 381 + } 382 + if ( tclContext->interp ){ 383 + return TH_OK; 384 + } 385 + if ( tclContext->argc>0 && tclContext->argv ) { 386 + Tcl_FindExecutable(tclContext->argv[0]); 387 + } 388 + tclInterp = tclContext->interp = Tcl_CreateInterp(); 389 + if( !tclInterp || Tcl_InterpDeleted(tclInterp) ){ 390 + Th_ErrorMessage(interp, 391 + "Could not create Tcl interpreter", (const char *)"", 0); 392 + return TH_ERROR; 393 + } 394 + if( Tcl_Init(tclInterp)!=TCL_OK ){ 395 + Th_ErrorMessage(interp, 396 + "Tcl initialization error:", Tcl_GetStringResult(tclInterp), -1); 397 + Tcl_DeleteInterp(tclInterp); 398 + tclContext->interp = tclInterp = 0; 399 + return TH_ERROR; 400 + } 401 + /* Add the TH1 integration commands to Tcl. */ 402 + Tcl_CallWhenDeleted(tclInterp, Th1DeleteProc, interp); 403 + Tcl_CreateObjCommand(tclInterp, "th1Eval", Th1EvalObjCmd, interp, NULL); 404 + Tcl_CreateObjCommand(tclInterp, "th1Expr", Th1ExprObjCmd, interp, NULL); 405 + return TH_OK; 406 +} 407 + 408 +/* 409 +** Register the Tcl language commands with interpreter interp. 410 +** Usually this is called soon after interpreter creation. 411 +*/ 412 +int th_register_tcl( 413 + Th_Interp *interp, 414 + void *pContext 415 +){ 416 + int i; 417 + /* Add the Tcl integration commands to TH1. */ 418 + for(i=0; i<(sizeof(aCommand)/sizeof(aCommand[0])); i++){ 419 + void *ctx = aCommand[i].pContext; 420 + /* Use Tcl interpreter for context? */ 421 + if( !ctx ) ctx = pContext; 422 + Th_CreateCommand(interp, aCommand[i].zName, aCommand[i].xProc, ctx, 0); 423 + } 424 + return TH_OK; 425 +} 426 + 427 +#endif /* FOSSIL_ENABLE_TCL */
Added test/th1-tcl.test.
1 +# 2 +# Copyright (c) 2011 D. Richard Hipp 3 +# 4 +# This program is free software; you can redistribute it and/or 5 +# modify it under the terms of the Simplified BSD License (also 6 +# known as the "2-Clause License" or "FreeBSD License".) 7 +# 8 +# This program is distributed in the hope that it will be useful, 9 +# but without any warranty; without even the implied warranty of 10 +# merchantability or fitness for a particular purpose. 11 +# 12 +# Author contact information: 13 +# drh@hwaci.com 14 +# http://www.hwaci.com/drh/ 15 +# 16 +############################################################################ 17 +# 18 +# TH1/Tcl integration 19 +# 20 + 21 +set dir [file dirname [info script]] 22 + 23 +############################################################################### 24 + 25 +set env(TH1_ENABLE_TCL) 1; # Tcl integration must be enabled for this test. 26 + 27 +############################################################################### 28 + 29 +fossil test-th-render [file nativename [file join $dir th1-tcl1.txt]] 30 + 31 +test th1-tcl-1 {[regexp -- {^\d+ 32 +\d+ 33 +\d+ 34 +via Tcl invoke 35 +4 36 +4 37 +two words 38 +one_word 39 +three words now 40 +\d+ 41 +two words 42 +4 43 +\d+ 44 +two words 45 +4 46 +\d+ 47 +one_word 48 +three words now 49 +$} [string map [list \r\n \n] $RESULT]]} 50 + 51 +############################################################################### 52 + 53 +fossil test-th-render [file nativename [file join $dir th1-tcl2.txt]] 54 + 55 +test th1-tcl-2 {[regexp -- {^\d+ 56 +$} [string map [list \r\n \n] $RESULT]]} 57 + 58 +############################################################################### 59 + 60 +fossil test-th-render [file nativename [file join $dir th1-tcl3.txt]] 61 + 62 +test th1-tcl-3 {$RESULT eq {<hr><p class="thmainError">ERROR:\ 63 +invalid command name "bad_command"</p>}} 64 + 65 +############################################################################### 66 + 67 +fossil test-th-render [file nativename [file join $dir th1-tcl4.txt]] 68 + 69 +test th1-tcl-4 {$RESULT eq {<hr><p class="thmainError">ERROR:\ 70 +divide by zero</p>}} 71 + 72 +############################################################################### 73 + 74 +fossil test-th-render [file nativename [file join $dir th1-tcl5.txt]] 75 + 76 +test th1-tcl-5 {$RESULT eq {<hr><p class="thmainError">ERROR:\ 77 +Tcl command not found: bad_command</p>} || $RESULT eq {<hr><p\ 78 +class="thmainError">ERROR: invalid command name "bad_command"</p>}} 79 + 80 +############################################################################### 81 + 82 +fossil test-th-render [file nativename [file join $dir th1-tcl6.txt]] 83 + 84 +test th1-tcl-6 {$RESULT eq {<hr><p class="thmainError">ERROR:\ 85 +no such command: bad_command</p>}} 86 + 87 +############################################################################### 88 + 89 +fossil test-th-render [file nativename [file join $dir th1-tcl7.txt]] 90 + 91 +test th1-tcl-7 {$RESULT eq {<hr><p class="thmainError">ERROR:\ 92 +syntax error in expression: "2**0"</p>}} 93 + 94 +############################################################################### 95 + 96 +fossil test-th-render [file nativename [file join $dir th1-tcl8.txt]] 97 + 98 +test th1-tcl-8 {$RESULT eq {<hr><p class="thmainError">ERROR:\ 99 +Cannot invoke Tcl command: tailcall</p>} || $RESULT eq {<hr><p\ 100 +class="thmainError">ERROR: tailcall can only be called from a proc or\ 101 +lambda</p>}} 102 +
Added test/th1-tcl1.txt.
1 +<th1> 2 + # 3 + # This is a "TH1 fragment" used to test the Tcl integration features of TH1. 4 + # The corresponding test file executes this file using the test-th-render 5 + # Fossil command. 6 + # 7 + set channel stdout; tclInvoke set channel $channel 8 + proc doOut {msg} {puts $msg; puts \n} 9 + doOut [tclEval clock seconds] 10 + doOut [tclEval {set x [clock seconds]}] 11 + tclEval {puts $channel "[clock seconds]"} 12 + tclInvoke puts $channel "via Tcl invoke" 13 + doOut [tclExpr 2+2] 14 + doOut [tclExpr 2 + 2] 15 + doOut [tclInvoke set x "two words"] 16 + doOut [tclInvoke eval set y one_word] 17 + doOut [tclInvoke eval {set z "three words now"}] 18 + doOut [set x [tclEval {set x [clock seconds]}]] 19 + doOut [tclInvoke th1Eval {set y "two words"}] 20 + doOut [set z [tclInvoke th1Expr {2+2}]] 21 + doOut $x 22 + doOut $y 23 + doOut $z 24 + doOut [tclEval set x] 25 + doOut [tclEval set y] 26 + doOut [tclEval set z] 27 +</th1>
Added test/th1-tcl2.txt.
1 +<th1> 2 + # 3 + # This is a "TH1 fragment" used to test the Tcl integration features of TH1. 4 + # The corresponding test file executes this file using the test-th-render 5 + # Fossil command. 6 + # 7 + # NOTE: This test requires that the SQLite package be available for the Tcl 8 + # interpreter that is linked to the Fossil executable. 9 + # 10 + tclInvoke set repository_name [repository 1] 11 + proc doOut {msg} {puts $msg; puts \n} 12 + doOut [tclEval { 13 + package require sqlite3 14 + sqlite3 db $repository_name 15 + set x [db eval {SELECT COUNT(*) FROM user;}] 16 + db close 17 + return $x 18 + }] 19 +</th1>
Added test/th1-tcl3.txt.
1 +<th1> 2 + # 3 + # This is a "TH1 fragment" used to test the Tcl integration features of TH1. 4 + # The corresponding test file executes this file using the test-th-render 5 + # Fossil command. 6 + # 7 + proc doOut {msg} {puts $msg; puts \n} 8 + doOut [tclEval bad_command] 9 +</th1>
Added test/th1-tcl4.txt.
1 +<th1> 2 + # 3 + # This is a "TH1 fragment" used to test the Tcl integration features of TH1. 4 + # The corresponding test file executes this file using the test-th-render 5 + # Fossil command. 6 + # 7 + proc doOut {msg} {puts $msg; puts \n} 8 + doOut [tclExpr 2/0] 9 +</th1>
Added test/th1-tcl5.txt.
1 +<th1> 2 + # 3 + # This is a "TH1 fragment" used to test the Tcl integration features of TH1. 4 + # The corresponding test file executes this file using the test-th-render 5 + # Fossil command. 6 + # 7 + proc doOut {msg} {puts $msg; puts \n} 8 + doOut [tclInvoke bad_command] 9 +</th1>
Added test/th1-tcl6.txt.
1 +<th1> 2 + # 3 + # This is a "TH1 fragment" used to test the Tcl integration features of TH1. 4 + # The corresponding test file executes this file using the test-th-render 5 + # Fossil command. 6 + # 7 + proc doOut {msg} {puts $msg; puts \n} 8 + doOut [tclEval th1Eval bad_command] 9 +</th1>
Added test/th1-tcl7.txt.
1 +<th1> 2 + # 3 + # This is a "TH1 fragment" used to test the Tcl integration features of TH1. 4 + # The corresponding test file executes this file using the test-th-render 5 + # Fossil command. 6 + # 7 + proc doOut {msg} {puts $msg; puts \n} 8 + 9 + # 10 + # BUGBUG: Attempting to divide by zero will crash TH1 with the error: 11 + # "child killed: floating-point exception" 12 + # 13 + # doOut [tclEval th1Expr 2/0] 14 + 15 + # 16 + # NOTE: For now, just cause an expression syntax error. 17 + # 18 + doOut [tclEval th1Expr 2**0] 19 +</th1>
Added test/th1-tcl8.txt.
1 +<th1> 2 + # 3 + # This is a "TH1 fragment" used to test the Tcl integration features of TH1. 4 + # The corresponding test file executes this file using the test-th-render 5 + # Fossil command. 6 + # 7 + proc doOut {msg} {puts $msg; puts \n} 8 + 9 + if {[tclInvoke set tcl_version] >= 8.6} { 10 + doOut [tclInvoke tailcall set x 1] 11 + } else { 12 + doOut "This test requires Tcl 8.6 or higher." 13 + } 14 +</th1>
Added win/Makefile.mingw.mistachkin.
1 +#!/usr/bin/make 2 +# 3 +# This is a makefile for us on windows using mingw. 4 +# 5 +#### The toplevel directory of the source tree. Fossil can be built 6 +# in a directory that is separate from the source tree. Just change 7 +# the following to point from the build directory to the src/ folder. 8 +# 9 +SRCDIR = src 10 + 11 +#### The directory into which object code files should be written. 12 +# 13 +OBJDIR = wbld 14 + 15 +#### C Compiler and options for use in building executables that 16 +# will run on the platform that is doing the build. This is used 17 +# to compile code-generator programs as part of the build process. 18 +# See TCC below for the C compiler for building the finished binary. 19 +# 20 +BCC = gcc 21 + 22 +#### Enable HTTPS support via OpenSSL (links to libssl and libcrypto) 23 +# 24 +FOSSIL_ENABLE_SSL=1 25 + 26 +#### Enable scripting support via Tcl/Tk 27 +# 28 +FOSSIL_ENABLE_TCL=1 29 + 30 +#### Use the Tcl source directory instead of the install directory? 31 +# This is useful when Tcl has been compiled statically with MinGW. 32 +# 33 +FOSSIL_TCL_SOURCE=1 34 + 35 +#### The directory where the zlib library source code is located. 36 +# The recommended usage here is to use the Sysinternals junction tool 37 +# to create a hard link between an "zlib-1.x.y" sub-directory of the 38 +# Fossil source code directory and the target zlib source directory. 39 +# 40 +ZLIBDIR = $(SRCDIR)/../zlib-1.2.5 41 + 42 +#### The directory where the OpenSSL library source code is located. 43 +# The recommended usage here is to use the Sysinternals junction tool 44 +# to create a hard link between an "openssl-1.x" sub-directory of the 45 +# Fossil source code directory and the target OpenSSL source directory. 46 +# 47 +OPENSSLDIR = $(SRCDIR)/../openssl-1.0.0e 48 + 49 +#### Either the directory where the Tcl library is installed or the Tcl 50 +# source code directory resides (depending on the value of the macro 51 +# FOSSIL_TCL_SOURCE). If this points to the Tcl install directory, 52 +# this directory must have "include" and "lib" sub-directories. If 53 +# this points to the Tcl source code directory, this directory must 54 +# have "generic" and "win" sub-directories. The recommended usage 55 +# here is to use the Sysinternals junction tool to create a hard 56 +# link between a "tcl-8.x" sub-directory of the Fossil source code 57 +# directory and the target Tcl directory. This removes the need to 58 +# hard-code the necessary paths in this Makefile. 59 +# 60 +TCLDIR = $(SRCDIR)/../tcl-8.6 61 + 62 +#### C Compile and options for use in building executables that 63 +# will run on the target platform. This is usually the same 64 +# as BCC, unless you are cross-compiling. This C compiler builds 65 +# the finished binary for fossil. The BCC compiler above is used 66 +# for building intermediate code-generator tools. 67 +# 68 +TCC = gcc -Os -Wall -L$(ZLIBDIR) -I$(ZLIBDIR) 69 + 70 +# With HTTPS support 71 +ifdef FOSSIL_ENABLE_SSL 72 +TCC += -L$(OPENSSLDIR) -I$(OPENSSLDIR)/include 73 +endif 74 + 75 +# With Tcl support 76 +ifdef FOSSIL_ENABLE_TCL 77 +ifdef FOSSIL_TCL_SOURCE 78 +TCC += -L$(TCLDIR)/win -I$(TCLDIR)/generic -I$(TCLDIR)/win 79 +else 80 +TCC += -L$(TCLDIR)/lib -I$(TCLDIR)/include 81 +endif 82 +endif 83 + 84 +# With HTTPS support 85 +ifdef FOSSIL_ENABLE_SSL 86 +TCC += -DFOSSIL_ENABLE_SSL=1 87 +endif 88 + 89 +# With Tcl support (statically linked) 90 +ifdef FOSSIL_ENABLE_TCL 91 +TCC += -DFOSSIL_ENABLE_TCL=1 -DSTATIC_BUILD 92 +endif 93 + 94 +#### Extra arguments for linking the finished binary. Fossil needs 95 +# to link against the Z-Lib compression library. There are no 96 +# other mandatory dependencies. We add the -static option here 97 +# so that we can build a static executable that will run in a 98 +# chroot jail. 99 +# 100 +LIB = -static 101 +LIB += -lmingwex -lz 102 + 103 +# OpenSSL: Add the necessary libaries required. 104 +ifdef FOSSIL_ENABLE_SSL 105 +LIB += -lssl -lcrypto -lgdi32 106 +endif 107 + 108 +# Tcl: Which Tcl library do we want to use (8.4, 8.5, 8.6, etc)? 109 +ifdef FOSSIL_ENABLE_TCL 110 +LIB += -ltcl86 111 +endif 112 + 113 +#### These libraries MUST appear in the same order as they do for Tcl 114 +# or linking with it will not work (exact reason unknown). 115 +# 116 +LIB += -lnetapi32 -lkernel32 -luser32 -ladvapi32 -lws2_32 117 + 118 +#### Tcl shell for use in running the fossil testsuite. This is only 119 +# used for testing. If you do not run 120 +# 121 +TCLSH = tclsh 122 + 123 +#### Nullsoft installer makensis location 124 +# 125 +MAKENSIS = "c:\Program Files\NSIS\makensis.exe" 126 + 127 +#### Include a configuration file that can override any one of these settings. 128 +# 129 +-include config.w32 130 + 131 +# STOP HERE 132 +# You should not need to change anything below this line 133 +#-------------------------------------------------------- 134 +XTCC = $(TCC) $(CFLAGS) -I. -I$(SRCDIR) 135 + 136 +SRC = \ 137 + $(SRCDIR)/add.c \ 138 + $(SRCDIR)/allrepo.c \ 139 + $(SRCDIR)/attach.c \ 140 + $(SRCDIR)/bag.c \ 141 + $(SRCDIR)/bisect.c \ 142 + $(SRCDIR)/blob.c \ 143 + $(SRCDIR)/branch.c \ 144 + $(SRCDIR)/browse.c \ 145 + $(SRCDIR)/captcha.c \ 146 + $(SRCDIR)/cgi.c \ 147 + $(SRCDIR)/checkin.c \ 148 + $(SRCDIR)/checkout.c \ 149 + $(SRCDIR)/clearsign.c \ 150 + $(SRCDIR)/clone.c \ 151 + $(SRCDIR)/comformat.c \ 152 + $(SRCDIR)/configure.c \ 153 + $(SRCDIR)/content.c \ 154 + $(SRCDIR)/db.c \ 155 + $(SRCDIR)/delta.c \ 156 + $(SRCDIR)/deltacmd.c \ 157 + $(SRCDIR)/descendants.c \ 158 + $(SRCDIR)/diff.c \ 159 + $(SRCDIR)/diffcmd.c \ 160 + $(SRCDIR)/doc.c \ 161 + $(SRCDIR)/encode.c \ 162 + $(SRCDIR)/event.c \ 163 + $(SRCDIR)/export.c \ 164 + $(SRCDIR)/file.c \ 165 + $(SRCDIR)/finfo.c \ 166 + $(SRCDIR)/glob.c \ 167 + $(SRCDIR)/graph.c \ 168 + $(SRCDIR)/gzip.c \ 169 + $(SRCDIR)/http.c \ 170 + $(SRCDIR)/http_socket.c \ 171 + $(SRCDIR)/http_ssl.c \ 172 + $(SRCDIR)/http_transport.c \ 173 + $(SRCDIR)/import.c \ 174 + $(SRCDIR)/info.c \ 175 + $(SRCDIR)/leaf.c \ 176 + $(SRCDIR)/login.c \ 177 + $(SRCDIR)/main.c \ 178 + $(SRCDIR)/manifest.c \ 179 + $(SRCDIR)/md5.c \ 180 + $(SRCDIR)/merge.c \ 181 + $(SRCDIR)/merge3.c \ 182 + $(SRCDIR)/name.c \ 183 + $(SRCDIR)/path.c \ 184 + $(SRCDIR)/pivot.c \ 185 + $(SRCDIR)/popen.c \ 186 + $(SRCDIR)/pqueue.c \ 187 + $(SRCDIR)/printf.c \ 188 + $(SRCDIR)/rebuild.c \ 189 + $(SRCDIR)/report.c \ 190 + $(SRCDIR)/rss.c \ 191 + $(SRCDIR)/schema.c \ 192 + $(SRCDIR)/search.c \ 193 + $(SRCDIR)/setup.c \ 194 + $(SRCDIR)/sha1.c \ 195 + $(SRCDIR)/shun.c \ 196 + $(SRCDIR)/skins.c \ 197 + $(SRCDIR)/sqlcmd.c \ 198 + $(SRCDIR)/stash.c \ 199 + $(SRCDIR)/stat.c \ 200 + $(SRCDIR)/style.c \ 201 + $(SRCDIR)/sync.c \ 202 + $(SRCDIR)/tag.c \ 203 + $(SRCDIR)/tar.c \ 204 + $(SRCDIR)/th_main.c \ 205 + $(SRCDIR)/timeline.c \ 206 + $(SRCDIR)/tkt.c \ 207 + $(SRCDIR)/tktsetup.c \ 208 + $(SRCDIR)/undo.c \ 209 + $(SRCDIR)/update.c \ 210 + $(SRCDIR)/url.c \ 211 + $(SRCDIR)/user.c \ 212 + $(SRCDIR)/verify.c \ 213 + $(SRCDIR)/vfile.c \ 214 + $(SRCDIR)/wiki.c \ 215 + $(SRCDIR)/wikiformat.c \ 216 + $(SRCDIR)/winhttp.c \ 217 + $(SRCDIR)/xfer.c \ 218 + $(SRCDIR)/zip.c 219 + 220 +TRANS_SRC = \ 221 + $(OBJDIR)/add_.c \ 222 + $(OBJDIR)/allrepo_.c \ 223 + $(OBJDIR)/attach_.c \ 224 + $(OBJDIR)/bag_.c \ 225 + $(OBJDIR)/bisect_.c \ 226 + $(OBJDIR)/blob_.c \ 227 + $(OBJDIR)/branch_.c \ 228 + $(OBJDIR)/browse_.c \ 229 + $(OBJDIR)/captcha_.c \ 230 + $(OBJDIR)/cgi_.c \ 231 + $(OBJDIR)/checkin_.c \ 232 + $(OBJDIR)/checkout_.c \ 233 + $(OBJDIR)/clearsign_.c \ 234 + $(OBJDIR)/clone_.c \ 235 + $(OBJDIR)/comformat_.c \ 236 + $(OBJDIR)/configure_.c \ 237 + $(OBJDIR)/content_.c \ 238 + $(OBJDIR)/db_.c \ 239 + $(OBJDIR)/delta_.c \ 240 + $(OBJDIR)/deltacmd_.c \ 241 + $(OBJDIR)/descendants_.c \ 242 + $(OBJDIR)/diff_.c \ 243 + $(OBJDIR)/diffcmd_.c \ 244 + $(OBJDIR)/doc_.c \ 245 + $(OBJDIR)/encode_.c \ 246 + $(OBJDIR)/event_.c \ 247 + $(OBJDIR)/export_.c \ 248 + $(OBJDIR)/file_.c \ 249 + $(OBJDIR)/finfo_.c \ 250 + $(OBJDIR)/glob_.c \ 251 + $(OBJDIR)/graph_.c \ 252 + $(OBJDIR)/gzip_.c \ 253 + $(OBJDIR)/http_.c \ 254 + $(OBJDIR)/http_socket_.c \ 255 + $(OBJDIR)/http_ssl_.c \ 256 + $(OBJDIR)/http_transport_.c \ 257 + $(OBJDIR)/import_.c \ 258 + $(OBJDIR)/info_.c \ 259 + $(OBJDIR)/leaf_.c \ 260 + $(OBJDIR)/login_.c \ 261 + $(OBJDIR)/main_.c \ 262 + $(OBJDIR)/manifest_.c \ 263 + $(OBJDIR)/md5_.c \ 264 + $(OBJDIR)/merge_.c \ 265 + $(OBJDIR)/merge3_.c \ 266 + $(OBJDIR)/name_.c \ 267 + $(OBJDIR)/path_.c \ 268 + $(OBJDIR)/pivot_.c \ 269 + $(OBJDIR)/popen_.c \ 270 + $(OBJDIR)/pqueue_.c \ 271 + $(OBJDIR)/printf_.c \ 272 + $(OBJDIR)/rebuild_.c \ 273 + $(OBJDIR)/report_.c \ 274 + $(OBJDIR)/rss_.c \ 275 + $(OBJDIR)/schema_.c \ 276 + $(OBJDIR)/search_.c \ 277 + $(OBJDIR)/setup_.c \ 278 + $(OBJDIR)/sha1_.c \ 279 + $(OBJDIR)/shun_.c \ 280 + $(OBJDIR)/skins_.c \ 281 + $(OBJDIR)/sqlcmd_.c \ 282 + $(OBJDIR)/stash_.c \ 283 + $(OBJDIR)/stat_.c \ 284 + $(OBJDIR)/style_.c \ 285 + $(OBJDIR)/sync_.c \ 286 + $(OBJDIR)/tag_.c \ 287 + $(OBJDIR)/tar_.c \ 288 + $(OBJDIR)/th_main_.c \ 289 + $(OBJDIR)/timeline_.c \ 290 + $(OBJDIR)/tkt_.c \ 291 + $(OBJDIR)/tktsetup_.c \ 292 + $(OBJDIR)/undo_.c \ 293 + $(OBJDIR)/update_.c \ 294 + $(OBJDIR)/url_.c \ 295 + $(OBJDIR)/user_.c \ 296 + $(OBJDIR)/verify_.c \ 297 + $(OBJDIR)/vfile_.c \ 298 + $(OBJDIR)/wiki_.c \ 299 + $(OBJDIR)/wikiformat_.c \ 300 + $(OBJDIR)/winhttp_.c \ 301 + $(OBJDIR)/xfer_.c \ 302 + $(OBJDIR)/zip_.c 303 + 304 +OBJ = \ 305 + $(OBJDIR)/add.o \ 306 + $(OBJDIR)/allrepo.o \ 307 + $(OBJDIR)/attach.o \ 308 + $(OBJDIR)/bag.o \ 309 + $(OBJDIR)/bisect.o \ 310 + $(OBJDIR)/blob.o \ 311 + $(OBJDIR)/branch.o \ 312 + $(OBJDIR)/browse.o \ 313 + $(OBJDIR)/captcha.o \ 314 + $(OBJDIR)/cgi.o \ 315 + $(OBJDIR)/checkin.o \ 316 + $(OBJDIR)/checkout.o \ 317 + $(OBJDIR)/clearsign.o \ 318 + $(OBJDIR)/clone.o \ 319 + $(OBJDIR)/comformat.o \ 320 + $(OBJDIR)/configure.o \ 321 + $(OBJDIR)/content.o \ 322 + $(OBJDIR)/db.o \ 323 + $(OBJDIR)/delta.o \ 324 + $(OBJDIR)/deltacmd.o \ 325 + $(OBJDIR)/descendants.o \ 326 + $(OBJDIR)/diff.o \ 327 + $(OBJDIR)/diffcmd.o \ 328 + $(OBJDIR)/doc.o \ 329 + $(OBJDIR)/encode.o \ 330 + $(OBJDIR)/event.o \ 331 + $(OBJDIR)/export.o \ 332 + $(OBJDIR)/file.o \ 333 + $(OBJDIR)/finfo.o \ 334 + $(OBJDIR)/glob.o \ 335 + $(OBJDIR)/graph.o \ 336 + $(OBJDIR)/gzip.o \ 337 + $(OBJDIR)/http.o \ 338 + $(OBJDIR)/http_socket.o \ 339 + $(OBJDIR)/http_ssl.o \ 340 + $(OBJDIR)/http_transport.o \ 341 + $(OBJDIR)/import.o \ 342 + $(OBJDIR)/info.o \ 343 + $(OBJDIR)/leaf.o \ 344 + $(OBJDIR)/login.o \ 345 + $(OBJDIR)/main.o \ 346 + $(OBJDIR)/manifest.o \ 347 + $(OBJDIR)/md5.o \ 348 + $(OBJDIR)/merge.o \ 349 + $(OBJDIR)/merge3.o \ 350 + $(OBJDIR)/name.o \ 351 + $(OBJDIR)/path.o \ 352 + $(OBJDIR)/pivot.o \ 353 + $(OBJDIR)/popen.o \ 354 + $(OBJDIR)/pqueue.o \ 355 + $(OBJDIR)/printf.o \ 356 + $(OBJDIR)/rebuild.o \ 357 + $(OBJDIR)/report.o \ 358 + $(OBJDIR)/rss.o \ 359 + $(OBJDIR)/schema.o \ 360 + $(OBJDIR)/search.o \ 361 + $(OBJDIR)/setup.o \ 362 + $(OBJDIR)/sha1.o \ 363 + $(OBJDIR)/shun.o \ 364 + $(OBJDIR)/skins.o \ 365 + $(OBJDIR)/sqlcmd.o \ 366 + $(OBJDIR)/stash.o \ 367 + $(OBJDIR)/stat.o \ 368 + $(OBJDIR)/style.o \ 369 + $(OBJDIR)/sync.o \ 370 + $(OBJDIR)/tag.o \ 371 + $(OBJDIR)/tar.o \ 372 + $(OBJDIR)/th_main.o \ 373 + $(OBJDIR)/timeline.o \ 374 + $(OBJDIR)/tkt.o \ 375 + $(OBJDIR)/tktsetup.o \ 376 + $(OBJDIR)/undo.o \ 377 + $(OBJDIR)/update.o \ 378 + $(OBJDIR)/url.o \ 379 + $(OBJDIR)/user.o \ 380 + $(OBJDIR)/verify.o \ 381 + $(OBJDIR)/vfile.o \ 382 + $(OBJDIR)/wiki.o \ 383 + $(OBJDIR)/wikiformat.o \ 384 + $(OBJDIR)/winhttp.o \ 385 + $(OBJDIR)/xfer.o \ 386 + $(OBJDIR)/zip.o 387 + 388 +APPNAME = fossil.exe 389 +TRANSLATE = $(subst /,\\,$(OBJDIR)/translate.exe) 390 +MAKEHEADERS = $(subst /,\\,$(OBJDIR)/makeheaders.exe) 391 +MKINDEX = $(subst /,\\,$(OBJDIR)/mkindex.exe) 392 +VERSION = $(subst /,\\,$(OBJDIR)/version.exe) 393 + 394 + 395 +all: $(OBJDIR) $(APPNAME) 396 + 397 +$(OBJDIR)/icon.o: $(SRCDIR)/../win/icon.rc 398 + cp $(SRCDIR)/../win/icon.rc $(OBJDIR) 399 + windres $(OBJDIR)/icon.rc -o $(OBJDIR)/icon.o 400 + 401 +install: $(APPNAME) 402 + mv $(APPNAME) $(INSTALLDIR) 403 + 404 +$(OBJDIR): 405 + mkdir $(OBJDIR) 406 + 407 +$(OBJDIR)/translate: $(SRCDIR)/translate.c 408 + $(BCC) -o $(OBJDIR)/translate $(SRCDIR)/translate.c 409 + 410 +$(OBJDIR)/makeheaders: $(SRCDIR)/makeheaders.c 411 + $(BCC) -o $(OBJDIR)/makeheaders $(SRCDIR)/makeheaders.c 412 + 413 +$(OBJDIR)/mkindex: $(SRCDIR)/mkindex.c 414 + $(BCC) -o $(OBJDIR)/mkindex $(SRCDIR)/mkindex.c 415 + 416 +$(VERSION): $(SRCDIR)/mkversion.c 417 + $(BCC) -o $(OBJDIR)/version $(SRCDIR)/mkversion.c 418 + 419 +# WARNING. DANGER. Running the testsuite modifies the repository the 420 +# build is done from, i.e. the checkout belongs to. Do not sync/push 421 +# the repository after running the tests. 422 +test: $(OBJDIR) $(APPNAME) 423 + $(TCLSH) $(SRCDIR)/../test/tester.tcl $(APPNAME) 424 + 425 +$(OBJDIR)/VERSION.h: $(SRCDIR)/../manifest.uuid $(SRCDIR)/../manifest $(VERSION) 426 + $(VERSION) $(SRCDIR)/../manifest.uuid $(SRCDIR)/../manifest $(SRCDIR)/../VERSION >$(OBJDIR)/VERSION.h 427 + 428 +EXTRAOBJ = $(OBJDIR)/sqlite3.o $(OBJDIR)/shell.o $(OBJDIR)/th.o $(OBJDIR)/th_lang.o 429 + 430 +ifdef FOSSIL_ENABLE_TCL 431 +EXTRAOBJ += $(OBJDIR)/th_tcl.o 432 +endif 433 + 434 +$(APPNAME): $(OBJDIR)/headers $(OBJ) $(EXTRAOBJ) $(OBJDIR)/icon.o 435 + $(TCC) -o $(APPNAME) $(OBJ) $(EXTRAOBJ) $(LIB) $(OBJDIR)/icon.o 436 + 437 +# This rule prevents make from using its default rules to try build 438 +# an executable named "manifest" out of the file named "manifest.c" 439 +# 440 +$(SRCDIR)/../manifest: 441 + # noop 442 + 443 +# Requires msys to be installed in addition to the mingw, for the "rm" 444 +# command. "del" will not work here because it is not a separate command 445 +# but a MSDOS-shell builtin. 446 +# 447 +clean: 448 + rm -rf $(OBJDIR) $(APPNAME) 449 + 450 +setup: $(OBJDIR) $(APPNAME) 451 + $(MAKENSIS) ./fossil.nsi 452 + 453 + 454 +$(OBJDIR)/page_index.h: $(TRANS_SRC) $(OBJDIR)/mkindex 455 + $(MKINDEX) $(TRANS_SRC) >$@ 456 +$(OBJDIR)/headers: $(OBJDIR)/page_index.h $(OBJDIR)/makeheaders $(OBJDIR)/VERSION.h 457 + $(MAKEHEADERS) $(OBJDIR)/add_.c:$(OBJDIR)/add.h $(OBJDIR)/allrepo_.c:$(OBJDIR)/allrepo.h $(OBJDIR)/attach_.c:$(OBJDIR)/attach.h $(OBJDIR)/bag_.c:$(OBJDIR)/bag.h $(OBJDIR)/bisect_.c:$(OBJDIR)/bisect.h $(OBJDIR)/blob_.c:$(OBJDIR)/blob.h $(OBJDIR)/branch_.c:$(OBJDIR)/branch.h $(OBJDIR)/browse_.c:$(OBJDIR)/browse.h $(OBJDIR)/captcha_.c:$(OBJDIR)/captcha.h $(OBJDIR)/cgi_.c:$(OBJDIR)/cgi.h $(OBJDIR)/checkin_.c:$(OBJDIR)/checkin.h $(OBJDIR)/checkout_.c:$(OBJDIR)/checkout.h $(OBJDIR)/clearsign_.c:$(OBJDIR)/clearsign.h $(OBJDIR)/clone_.c:$(OBJDIR)/clone.h $(OBJDIR)/comformat_.c:$(OBJDIR)/comformat.h $(OBJDIR)/configure_.c:$(OBJDIR)/configure.h $(OBJDIR)/content_.c:$(OBJDIR)/content.h $(OBJDIR)/db_.c:$(OBJDIR)/db.h $(OBJDIR)/delta_.c:$(OBJDIR)/delta.h $(OBJDIR)/deltacmd_.c:$(OBJDIR)/deltacmd.h $(OBJDIR)/descendants_.c:$(OBJDIR)/descendants.h $(OBJDIR)/diff_.c:$(OBJDIR)/diff.h $(OBJDIR)/diffcmd_.c:$(OBJDIR)/diffcmd.h $(OBJDIR)/doc_.c:$(OBJDIR)/doc.h $(OBJDIR)/encode_.c:$(OBJDIR)/encode.h $(OBJDIR)/event_.c:$(OBJDIR)/event.h $(OBJDIR)/export_.c:$(OBJDIR)/export.h $(OBJDIR)/file_.c:$(OBJDIR)/file.h $(OBJDIR)/finfo_.c:$(OBJDIR)/finfo.h $(OBJDIR)/glob_.c:$(OBJDIR)/glob.h $(OBJDIR)/graph_.c:$(OBJDIR)/graph.h $(OBJDIR)/gzip_.c:$(OBJDIR)/gzip.h $(OBJDIR)/http_.c:$(OBJDIR)/http.h $(OBJDIR)/http_socket_.c:$(OBJDIR)/http_socket.h $(OBJDIR)/http_ssl_.c:$(OBJDIR)/http_ssl.h $(OBJDIR)/http_transport_.c:$(OBJDIR)/http_transport.h $(OBJDIR)/import_.c:$(OBJDIR)/import.h $(OBJDIR)/info_.c:$(OBJDIR)/info.h $(OBJDIR)/leaf_.c:$(OBJDIR)/leaf.h $(OBJDIR)/login_.c:$(OBJDIR)/login.h $(OBJDIR)/main_.c:$(OBJDIR)/main.h $(OBJDIR)/manifest_.c:$(OBJDIR)/manifest.h $(OBJDIR)/md5_.c:$(OBJDIR)/md5.h $(OBJDIR)/merge_.c:$(OBJDIR)/merge.h $(OBJDIR)/merge3_.c:$(OBJDIR)/merge3.h $(OBJDIR)/name_.c:$(OBJDIR)/name.h $(OBJDIR)/path_.c:$(OBJDIR)/path.h $(OBJDIR)/pivot_.c:$(OBJDIR)/pivot.h $(OBJDIR)/popen_.c:$(OBJDIR)/popen.h $(OBJDIR)/pqueue_.c:$(OBJDIR)/pqueue.h $(OBJDIR)/printf_.c:$(OBJDIR)/printf.h $(OBJDIR)/rebuild_.c:$(OBJDIR)/rebuild.h $(OBJDIR)/report_.c:$(OBJDIR)/report.h $(OBJDIR)/rss_.c:$(OBJDIR)/rss.h $(OBJDIR)/schema_.c:$(OBJDIR)/schema.h $(OBJDIR)/search_.c:$(OBJDIR)/search.h $(OBJDIR)/setup_.c:$(OBJDIR)/setup.h $(OBJDIR)/sha1_.c:$(OBJDIR)/sha1.h $(OBJDIR)/shun_.c:$(OBJDIR)/shun.h $(OBJDIR)/skins_.c:$(OBJDIR)/skins.h $(OBJDIR)/sqlcmd_.c:$(OBJDIR)/sqlcmd.h $(OBJDIR)/stash_.c:$(OBJDIR)/stash.h $(OBJDIR)/stat_.c:$(OBJDIR)/stat.h $(OBJDIR)/style_.c:$(OBJDIR)/style.h $(OBJDIR)/sync_.c:$(OBJDIR)/sync.h $(OBJDIR)/tag_.c:$(OBJDIR)/tag.h $(OBJDIR)/tar_.c:$(OBJDIR)/tar.h $(OBJDIR)/th_main_.c:$(OBJDIR)/th_main.h $(OBJDIR)/timeline_.c:$(OBJDIR)/timeline.h $(OBJDIR)/tkt_.c:$(OBJDIR)/tkt.h $(OBJDIR)/tktsetup_.c:$(OBJDIR)/tktsetup.h $(OBJDIR)/undo_.c:$(OBJDIR)/undo.h $(OBJDIR)/update_.c:$(OBJDIR)/update.h $(OBJDIR)/url_.c:$(OBJDIR)/url.h $(OBJDIR)/user_.c:$(OBJDIR)/user.h $(OBJDIR)/verify_.c:$(OBJDIR)/verify.h $(OBJDIR)/vfile_.c:$(OBJDIR)/vfile.h $(OBJDIR)/wiki_.c:$(OBJDIR)/wiki.h $(OBJDIR)/wikiformat_.c:$(OBJDIR)/wikiformat.h $(OBJDIR)/winhttp_.c:$(OBJDIR)/winhttp.h $(OBJDIR)/xfer_.c:$(OBJDIR)/xfer.h $(OBJDIR)/zip_.c:$(OBJDIR)/zip.h $(SRCDIR)/sqlite3.h $(SRCDIR)/th.h $(OBJDIR)/VERSION.h 458 + echo Done >$(OBJDIR)/headers 459 + 460 +$(OBJDIR)/headers: Makefile 461 +Makefile: 462 +$(OBJDIR)/add_.c: $(SRCDIR)/add.c $(OBJDIR)/translate 463 + $(TRANSLATE) $(SRCDIR)/add.c >$(OBJDIR)/add_.c 464 + 465 +$(OBJDIR)/add.o: $(OBJDIR)/add_.c $(OBJDIR)/add.h $(SRCDIR)/config.h 466 + $(XTCC) -o $(OBJDIR)/add.o -c $(OBJDIR)/add_.c 467 + 468 +add.h: $(OBJDIR)/headers 469 +$(OBJDIR)/allrepo_.c: $(SRCDIR)/allrepo.c $(OBJDIR)/translate 470 + $(TRANSLATE) $(SRCDIR)/allrepo.c >$(OBJDIR)/allrepo_.c 471 + 472 +$(OBJDIR)/allrepo.o: $(OBJDIR)/allrepo_.c $(OBJDIR)/allrepo.h $(SRCDIR)/config.h 473 + $(XTCC) -o $(OBJDIR)/allrepo.o -c $(OBJDIR)/allrepo_.c 474 + 475 +allrepo.h: $(OBJDIR)/headers 476 +$(OBJDIR)/attach_.c: $(SRCDIR)/attach.c $(OBJDIR)/translate 477 + $(TRANSLATE) $(SRCDIR)/attach.c >$(OBJDIR)/attach_.c 478 + 479 +$(OBJDIR)/attach.o: $(OBJDIR)/attach_.c $(OBJDIR)/attach.h $(SRCDIR)/config.h 480 + $(XTCC) -o $(OBJDIR)/attach.o -c $(OBJDIR)/attach_.c 481 + 482 +attach.h: $(OBJDIR)/headers 483 +$(OBJDIR)/bag_.c: $(SRCDIR)/bag.c $(OBJDIR)/translate 484 + $(TRANSLATE) $(SRCDIR)/bag.c >$(OBJDIR)/bag_.c 485 + 486 +$(OBJDIR)/bag.o: $(OBJDIR)/bag_.c $(OBJDIR)/bag.h $(SRCDIR)/config.h 487 + $(XTCC) -o $(OBJDIR)/bag.o -c $(OBJDIR)/bag_.c 488 + 489 +bag.h: $(OBJDIR)/headers 490 +$(OBJDIR)/bisect_.c: $(SRCDIR)/bisect.c $(OBJDIR)/translate 491 + $(TRANSLATE) $(SRCDIR)/bisect.c >$(OBJDIR)/bisect_.c 492 + 493 +$(OBJDIR)/bisect.o: $(OBJDIR)/bisect_.c $(OBJDIR)/bisect.h $(SRCDIR)/config.h 494 + $(XTCC) -o $(OBJDIR)/bisect.o -c $(OBJDIR)/bisect_.c 495 + 496 +bisect.h: $(OBJDIR)/headers 497 +$(OBJDIR)/blob_.c: $(SRCDIR)/blob.c $(OBJDIR)/translate 498 + $(TRANSLATE) $(SRCDIR)/blob.c >$(OBJDIR)/blob_.c 499 + 500 +$(OBJDIR)/blob.o: $(OBJDIR)/blob_.c $(OBJDIR)/blob.h $(SRCDIR)/config.h 501 + $(XTCC) -o $(OBJDIR)/blob.o -c $(OBJDIR)/blob_.c 502 + 503 +blob.h: $(OBJDIR)/headers 504 +$(OBJDIR)/branch_.c: $(SRCDIR)/branch.c $(OBJDIR)/translate 505 + $(TRANSLATE) $(SRCDIR)/branch.c >$(OBJDIR)/branch_.c 506 + 507 +$(OBJDIR)/branch.o: $(OBJDIR)/branch_.c $(OBJDIR)/branch.h $(SRCDIR)/config.h 508 + $(XTCC) -o $(OBJDIR)/branch.o -c $(OBJDIR)/branch_.c 509 + 510 +branch.h: $(OBJDIR)/headers 511 +$(OBJDIR)/browse_.c: $(SRCDIR)/browse.c $(OBJDIR)/translate 512 + $(TRANSLATE) $(SRCDIR)/browse.c >$(OBJDIR)/browse_.c 513 + 514 +$(OBJDIR)/browse.o: $(OBJDIR)/browse_.c $(OBJDIR)/browse.h $(SRCDIR)/config.h 515 + $(XTCC) -o $(OBJDIR)/browse.o -c $(OBJDIR)/browse_.c 516 + 517 +browse.h: $(OBJDIR)/headers 518 +$(OBJDIR)/captcha_.c: $(SRCDIR)/captcha.c $(OBJDIR)/translate 519 + $(TRANSLATE) $(SRCDIR)/captcha.c >$(OBJDIR)/captcha_.c 520 + 521 +$(OBJDIR)/captcha.o: $(OBJDIR)/captcha_.c $(OBJDIR)/captcha.h $(SRCDIR)/config.h 522 + $(XTCC) -o $(OBJDIR)/captcha.o -c $(OBJDIR)/captcha_.c 523 + 524 +captcha.h: $(OBJDIR)/headers 525 +$(OBJDIR)/cgi_.c: $(SRCDIR)/cgi.c $(OBJDIR)/translate 526 + $(TRANSLATE) $(SRCDIR)/cgi.c >$(OBJDIR)/cgi_.c 527 + 528 +$(OBJDIR)/cgi.o: $(OBJDIR)/cgi_.c $(OBJDIR)/cgi.h $(SRCDIR)/config.h 529 + $(XTCC) -o $(OBJDIR)/cgi.o -c $(OBJDIR)/cgi_.c 530 + 531 +cgi.h: $(OBJDIR)/headers 532 +$(OBJDIR)/checkin_.c: $(SRCDIR)/checkin.c $(OBJDIR)/translate 533 + $(TRANSLATE) $(SRCDIR)/checkin.c >$(OBJDIR)/checkin_.c 534 + 535 +$(OBJDIR)/checkin.o: $(OBJDIR)/checkin_.c $(OBJDIR)/checkin.h $(SRCDIR)/config.h 536 + $(XTCC) -o $(OBJDIR)/checkin.o -c $(OBJDIR)/checkin_.c 537 + 538 +checkin.h: $(OBJDIR)/headers 539 +$(OBJDIR)/checkout_.c: $(SRCDIR)/checkout.c $(OBJDIR)/translate 540 + $(TRANSLATE) $(SRCDIR)/checkout.c >$(OBJDIR)/checkout_.c 541 + 542 +$(OBJDIR)/checkout.o: $(OBJDIR)/checkout_.c $(OBJDIR)/checkout.h $(SRCDIR)/config.h 543 + $(XTCC) -o $(OBJDIR)/checkout.o -c $(OBJDIR)/checkout_.c 544 + 545 +checkout.h: $(OBJDIR)/headers 546 +$(OBJDIR)/clearsign_.c: $(SRCDIR)/clearsign.c $(OBJDIR)/translate 547 + $(TRANSLATE) $(SRCDIR)/clearsign.c >$(OBJDIR)/clearsign_.c 548 + 549 +$(OBJDIR)/clearsign.o: $(OBJDIR)/clearsign_.c $(OBJDIR)/clearsign.h $(SRCDIR)/config.h 550 + $(XTCC) -o $(OBJDIR)/clearsign.o -c $(OBJDIR)/clearsign_.c 551 + 552 +clearsign.h: $(OBJDIR)/headers 553 +$(OBJDIR)/clone_.c: $(SRCDIR)/clone.c $(OBJDIR)/translate 554 + $(TRANSLATE) $(SRCDIR)/clone.c >$(OBJDIR)/clone_.c 555 + 556 +$(OBJDIR)/clone.o: $(OBJDIR)/clone_.c $(OBJDIR)/clone.h $(SRCDIR)/config.h 557 + $(XTCC) -o $(OBJDIR)/clone.o -c $(OBJDIR)/clone_.c 558 + 559 +clone.h: $(OBJDIR)/headers 560 +$(OBJDIR)/comformat_.c: $(SRCDIR)/comformat.c $(OBJDIR)/translate 561 + $(TRANSLATE) $(SRCDIR)/comformat.c >$(OBJDIR)/comformat_.c 562 + 563 +$(OBJDIR)/comformat.o: $(OBJDIR)/comformat_.c $(OBJDIR)/comformat.h $(SRCDIR)/config.h 564 + $(XTCC) -o $(OBJDIR)/comformat.o -c $(OBJDIR)/comformat_.c 565 + 566 +comformat.h: $(OBJDIR)/headers 567 +$(OBJDIR)/configure_.c: $(SRCDIR)/configure.c $(OBJDIR)/translate 568 + $(TRANSLATE) $(SRCDIR)/configure.c >$(OBJDIR)/configure_.c 569 + 570 +$(OBJDIR)/configure.o: $(OBJDIR)/configure_.c $(OBJDIR)/configure.h $(SRCDIR)/config.h 571 + $(XTCC) -o $(OBJDIR)/configure.o -c $(OBJDIR)/configure_.c 572 + 573 +configure.h: $(OBJDIR)/headers 574 +$(OBJDIR)/content_.c: $(SRCDIR)/content.c $(OBJDIR)/translate 575 + $(TRANSLATE) $(SRCDIR)/content.c >$(OBJDIR)/content_.c 576 + 577 +$(OBJDIR)/content.o: $(OBJDIR)/content_.c $(OBJDIR)/content.h $(SRCDIR)/config.h 578 + $(XTCC) -o $(OBJDIR)/content.o -c $(OBJDIR)/content_.c 579 + 580 +content.h: $(OBJDIR)/headers 581 +$(OBJDIR)/db_.c: $(SRCDIR)/db.c $(OBJDIR)/translate 582 + $(TRANSLATE) $(SRCDIR)/db.c >$(OBJDIR)/db_.c 583 + 584 +$(OBJDIR)/db.o: $(OBJDIR)/db_.c $(OBJDIR)/db.h $(SRCDIR)/config.h 585 + $(XTCC) -o $(OBJDIR)/db.o -c $(OBJDIR)/db_.c 586 + 587 +db.h: $(OBJDIR)/headers 588 +$(OBJDIR)/delta_.c: $(SRCDIR)/delta.c $(OBJDIR)/translate 589 + $(TRANSLATE) $(SRCDIR)/delta.c >$(OBJDIR)/delta_.c 590 + 591 +$(OBJDIR)/delta.o: $(OBJDIR)/delta_.c $(OBJDIR)/delta.h $(SRCDIR)/config.h 592 + $(XTCC) -o $(OBJDIR)/delta.o -c $(OBJDIR)/delta_.c 593 + 594 +delta.h: $(OBJDIR)/headers 595 +$(OBJDIR)/deltacmd_.c: $(SRCDIR)/deltacmd.c $(OBJDIR)/translate 596 + $(TRANSLATE) $(SRCDIR)/deltacmd.c >$(OBJDIR)/deltacmd_.c 597 + 598 +$(OBJDIR)/deltacmd.o: $(OBJDIR)/deltacmd_.c $(OBJDIR)/deltacmd.h $(SRCDIR)/config.h 599 + $(XTCC) -o $(OBJDIR)/deltacmd.o -c $(OBJDIR)/deltacmd_.c 600 + 601 +deltacmd.h: $(OBJDIR)/headers 602 +$(OBJDIR)/descendants_.c: $(SRCDIR)/descendants.c $(OBJDIR)/translate 603 + $(TRANSLATE) $(SRCDIR)/descendants.c >$(OBJDIR)/descendants_.c 604 + 605 +$(OBJDIR)/descendants.o: $(OBJDIR)/descendants_.c $(OBJDIR)/descendants.h $(SRCDIR)/config.h 606 + $(XTCC) -o $(OBJDIR)/descendants.o -c $(OBJDIR)/descendants_.c 607 + 608 +descendants.h: $(OBJDIR)/headers 609 +$(OBJDIR)/diff_.c: $(SRCDIR)/diff.c $(OBJDIR)/translate 610 + $(TRANSLATE) $(SRCDIR)/diff.c >$(OBJDIR)/diff_.c 611 + 612 +$(OBJDIR)/diff.o: $(OBJDIR)/diff_.c $(OBJDIR)/diff.h $(SRCDIR)/config.h 613 + $(XTCC) -o $(OBJDIR)/diff.o -c $(OBJDIR)/diff_.c 614 + 615 +diff.h: $(OBJDIR)/headers 616 +$(OBJDIR)/diffcmd_.c: $(SRCDIR)/diffcmd.c $(OBJDIR)/translate 617 + $(TRANSLATE) $(SRCDIR)/diffcmd.c >$(OBJDIR)/diffcmd_.c 618 + 619 +$(OBJDIR)/diffcmd.o: $(OBJDIR)/diffcmd_.c $(OBJDIR)/diffcmd.h $(SRCDIR)/config.h 620 + $(XTCC) -o $(OBJDIR)/diffcmd.o -c $(OBJDIR)/diffcmd_.c 621 + 622 +diffcmd.h: $(OBJDIR)/headers 623 +$(OBJDIR)/doc_.c: $(SRCDIR)/doc.c $(OBJDIR)/translate 624 + $(TRANSLATE) $(SRCDIR)/doc.c >$(OBJDIR)/doc_.c 625 + 626 +$(OBJDIR)/doc.o: $(OBJDIR)/doc_.c $(OBJDIR)/doc.h $(SRCDIR)/config.h 627 + $(XTCC) -o $(OBJDIR)/doc.o -c $(OBJDIR)/doc_.c 628 + 629 +doc.h: $(OBJDIR)/headers 630 +$(OBJDIR)/encode_.c: $(SRCDIR)/encode.c $(OBJDIR)/translate 631 + $(TRANSLATE) $(SRCDIR)/encode.c >$(OBJDIR)/encode_.c 632 + 633 +$(OBJDIR)/encode.o: $(OBJDIR)/encode_.c $(OBJDIR)/encode.h $(SRCDIR)/config.h 634 + $(XTCC) -o $(OBJDIR)/encode.o -c $(OBJDIR)/encode_.c 635 + 636 +encode.h: $(OBJDIR)/headers 637 +$(OBJDIR)/event_.c: $(SRCDIR)/event.c $(OBJDIR)/translate 638 + $(TRANSLATE) $(SRCDIR)/event.c >$(OBJDIR)/event_.c 639 + 640 +$(OBJDIR)/event.o: $(OBJDIR)/event_.c $(OBJDIR)/event.h $(SRCDIR)/config.h 641 + $(XTCC) -o $(OBJDIR)/event.o -c $(OBJDIR)/event_.c 642 + 643 +event.h: $(OBJDIR)/headers 644 +$(OBJDIR)/export_.c: $(SRCDIR)/export.c $(OBJDIR)/translate 645 + $(TRANSLATE) $(SRCDIR)/export.c >$(OBJDIR)/export_.c 646 + 647 +$(OBJDIR)/export.o: $(OBJDIR)/export_.c $(OBJDIR)/export.h $(SRCDIR)/config.h 648 + $(XTCC) -o $(OBJDIR)/export.o -c $(OBJDIR)/export_.c 649 + 650 +export.h: $(OBJDIR)/headers 651 +$(OBJDIR)/file_.c: $(SRCDIR)/file.c $(OBJDIR)/translate 652 + $(TRANSLATE) $(SRCDIR)/file.c >$(OBJDIR)/file_.c 653 + 654 +$(OBJDIR)/file.o: $(OBJDIR)/file_.c $(OBJDIR)/file.h $(SRCDIR)/config.h 655 + $(XTCC) -o $(OBJDIR)/file.o -c $(OBJDIR)/file_.c 656 + 657 +file.h: $(OBJDIR)/headers 658 +$(OBJDIR)/finfo_.c: $(SRCDIR)/finfo.c $(OBJDIR)/translate 659 + $(TRANSLATE) $(SRCDIR)/finfo.c >$(OBJDIR)/finfo_.c 660 + 661 +$(OBJDIR)/finfo.o: $(OBJDIR)/finfo_.c $(OBJDIR)/finfo.h $(SRCDIR)/config.h 662 + $(XTCC) -o $(OBJDIR)/finfo.o -c $(OBJDIR)/finfo_.c 663 + 664 +finfo.h: $(OBJDIR)/headers 665 +$(OBJDIR)/glob_.c: $(SRCDIR)/glob.c $(OBJDIR)/translate 666 + $(TRANSLATE) $(SRCDIR)/glob.c >$(OBJDIR)/glob_.c 667 + 668 +$(OBJDIR)/glob.o: $(OBJDIR)/glob_.c $(OBJDIR)/glob.h $(SRCDIR)/config.h 669 + $(XTCC) -o $(OBJDIR)/glob.o -c $(OBJDIR)/glob_.c 670 + 671 +glob.h: $(OBJDIR)/headers 672 +$(OBJDIR)/graph_.c: $(SRCDIR)/graph.c $(OBJDIR)/translate 673 + $(TRANSLATE) $(SRCDIR)/graph.c >$(OBJDIR)/graph_.c 674 + 675 +$(OBJDIR)/graph.o: $(OBJDIR)/graph_.c $(OBJDIR)/graph.h $(SRCDIR)/config.h 676 + $(XTCC) -o $(OBJDIR)/graph.o -c $(OBJDIR)/graph_.c 677 + 678 +graph.h: $(OBJDIR)/headers 679 +$(OBJDIR)/gzip_.c: $(SRCDIR)/gzip.c $(OBJDIR)/translate 680 + $(TRANSLATE) $(SRCDIR)/gzip.c >$(OBJDIR)/gzip_.c 681 + 682 +$(OBJDIR)/gzip.o: $(OBJDIR)/gzip_.c $(OBJDIR)/gzip.h $(SRCDIR)/config.h 683 + $(XTCC) -o $(OBJDIR)/gzip.o -c $(OBJDIR)/gzip_.c 684 + 685 +gzip.h: $(OBJDIR)/headers 686 +$(OBJDIR)/http_.c: $(SRCDIR)/http.c $(OBJDIR)/translate 687 + $(TRANSLATE) $(SRCDIR)/http.c >$(OBJDIR)/http_.c 688 + 689 +$(OBJDIR)/http.o: $(OBJDIR)/http_.c $(OBJDIR)/http.h $(SRCDIR)/config.h 690 + $(XTCC) -o $(OBJDIR)/http.o -c $(OBJDIR)/http_.c 691 + 692 +http.h: $(OBJDIR)/headers 693 +$(OBJDIR)/http_socket_.c: $(SRCDIR)/http_socket.c $(OBJDIR)/translate 694 + $(TRANSLATE) $(SRCDIR)/http_socket.c >$(OBJDIR)/http_socket_.c 695 + 696 +$(OBJDIR)/http_socket.o: $(OBJDIR)/http_socket_.c $(OBJDIR)/http_socket.h $(SRCDIR)/config.h 697 + $(XTCC) -o $(OBJDIR)/http_socket.o -c $(OBJDIR)/http_socket_.c 698 + 699 +http_socket.h: $(OBJDIR)/headers 700 +$(OBJDIR)/http_ssl_.c: $(SRCDIR)/http_ssl.c $(OBJDIR)/translate 701 + $(TRANSLATE) $(SRCDIR)/http_ssl.c >$(OBJDIR)/http_ssl_.c 702 + 703 +$(OBJDIR)/http_ssl.o: $(OBJDIR)/http_ssl_.c $(OBJDIR)/http_ssl.h $(SRCDIR)/config.h 704 + $(XTCC) -o $(OBJDIR)/http_ssl.o -c $(OBJDIR)/http_ssl_.c 705 + 706 +http_ssl.h: $(OBJDIR)/headers 707 +$(OBJDIR)/http_transport_.c: $(SRCDIR)/http_transport.c $(OBJDIR)/translate 708 + $(TRANSLATE) $(SRCDIR)/http_transport.c >$(OBJDIR)/http_transport_.c 709 + 710 +$(OBJDIR)/http_transport.o: $(OBJDIR)/http_transport_.c $(OBJDIR)/http_transport.h $(SRCDIR)/config.h 711 + $(XTCC) -o $(OBJDIR)/http_transport.o -c $(OBJDIR)/http_transport_.c 712 + 713 +http_transport.h: $(OBJDIR)/headers 714 +$(OBJDIR)/import_.c: $(SRCDIR)/import.c $(OBJDIR)/translate 715 + $(TRANSLATE) $(SRCDIR)/import.c >$(OBJDIR)/import_.c 716 + 717 +$(OBJDIR)/import.o: $(OBJDIR)/import_.c $(OBJDIR)/import.h $(SRCDIR)/config.h 718 + $(XTCC) -o $(OBJDIR)/import.o -c $(OBJDIR)/import_.c 719 + 720 +import.h: $(OBJDIR)/headers 721 +$(OBJDIR)/info_.c: $(SRCDIR)/info.c $(OBJDIR)/translate 722 + $(TRANSLATE) $(SRCDIR)/info.c >$(OBJDIR)/info_.c 723 + 724 +$(OBJDIR)/info.o: $(OBJDIR)/info_.c $(OBJDIR)/info.h $(SRCDIR)/config.h 725 + $(XTCC) -o $(OBJDIR)/info.o -c $(OBJDIR)/info_.c 726 + 727 +info.h: $(OBJDIR)/headers 728 +$(OBJDIR)/leaf_.c: $(SRCDIR)/leaf.c $(OBJDIR)/translate 729 + $(TRANSLATE) $(SRCDIR)/leaf.c >$(OBJDIR)/leaf_.c 730 + 731 +$(OBJDIR)/leaf.o: $(OBJDIR)/leaf_.c $(OBJDIR)/leaf.h $(SRCDIR)/config.h 732 + $(XTCC) -o $(OBJDIR)/leaf.o -c $(OBJDIR)/leaf_.c 733 + 734 +leaf.h: $(OBJDIR)/headers 735 +$(OBJDIR)/login_.c: $(SRCDIR)/login.c $(OBJDIR)/translate 736 + $(TRANSLATE) $(SRCDIR)/login.c >$(OBJDIR)/login_.c 737 + 738 +$(OBJDIR)/login.o: $(OBJDIR)/login_.c $(OBJDIR)/login.h $(SRCDIR)/config.h 739 + $(XTCC) -o $(OBJDIR)/login.o -c $(OBJDIR)/login_.c 740 + 741 +login.h: $(OBJDIR)/headers 742 +$(OBJDIR)/main_.c: $(SRCDIR)/main.c $(OBJDIR)/translate 743 + $(TRANSLATE) $(SRCDIR)/main.c >$(OBJDIR)/main_.c 744 + 745 +$(OBJDIR)/main.o: $(OBJDIR)/main_.c $(OBJDIR)/main.h $(OBJDIR)/page_index.h $(SRCDIR)/config.h 746 + $(XTCC) -o $(OBJDIR)/main.o -c $(OBJDIR)/main_.c 747 + 748 +main.h: $(OBJDIR)/headers 749 +$(OBJDIR)/manifest_.c: $(SRCDIR)/manifest.c $(OBJDIR)/translate 750 + $(TRANSLATE) $(SRCDIR)/manifest.c >$(OBJDIR)/manifest_.c 751 + 752 +$(OBJDIR)/manifest.o: $(OBJDIR)/manifest_.c $(OBJDIR)/manifest.h $(SRCDIR)/config.h 753 + $(XTCC) -o $(OBJDIR)/manifest.o -c $(OBJDIR)/manifest_.c 754 + 755 +manifest.h: $(OBJDIR)/headers 756 +$(OBJDIR)/md5_.c: $(SRCDIR)/md5.c $(OBJDIR)/translate 757 + $(TRANSLATE) $(SRCDIR)/md5.c >$(OBJDIR)/md5_.c 758 + 759 +$(OBJDIR)/md5.o: $(OBJDIR)/md5_.c $(OBJDIR)/md5.h $(SRCDIR)/config.h 760 + $(XTCC) -o $(OBJDIR)/md5.o -c $(OBJDIR)/md5_.c 761 + 762 +md5.h: $(OBJDIR)/headers 763 +$(OBJDIR)/merge_.c: $(SRCDIR)/merge.c $(OBJDIR)/translate 764 + $(TRANSLATE) $(SRCDIR)/merge.c >$(OBJDIR)/merge_.c 765 + 766 +$(OBJDIR)/merge.o: $(OBJDIR)/merge_.c $(OBJDIR)/merge.h $(SRCDIR)/config.h 767 + $(XTCC) -o $(OBJDIR)/merge.o -c $(OBJDIR)/merge_.c 768 + 769 +merge.h: $(OBJDIR)/headers 770 +$(OBJDIR)/merge3_.c: $(SRCDIR)/merge3.c $(OBJDIR)/translate 771 + $(TRANSLATE) $(SRCDIR)/merge3.c >$(OBJDIR)/merge3_.c 772 + 773 +$(OBJDIR)/merge3.o: $(OBJDIR)/merge3_.c $(OBJDIR)/merge3.h $(SRCDIR)/config.h 774 + $(XTCC) -o $(OBJDIR)/merge3.o -c $(OBJDIR)/merge3_.c 775 + 776 +merge3.h: $(OBJDIR)/headers 777 +$(OBJDIR)/name_.c: $(SRCDIR)/name.c $(OBJDIR)/translate 778 + $(TRANSLATE) $(SRCDIR)/name.c >$(OBJDIR)/name_.c 779 + 780 +$(OBJDIR)/name.o: $(OBJDIR)/name_.c $(OBJDIR)/name.h $(SRCDIR)/config.h 781 + $(XTCC) -o $(OBJDIR)/name.o -c $(OBJDIR)/name_.c 782 + 783 +name.h: $(OBJDIR)/headers 784 +$(OBJDIR)/path_.c: $(SRCDIR)/path.c $(OBJDIR)/translate 785 + $(TRANSLATE) $(SRCDIR)/path.c >$(OBJDIR)/path_.c 786 + 787 +$(OBJDIR)/path.o: $(OBJDIR)/path_.c $(OBJDIR)/path.h $(SRCDIR)/config.h 788 + $(XTCC) -o $(OBJDIR)/path.o -c $(OBJDIR)/path_.c 789 + 790 +path.h: $(OBJDIR)/headers 791 +$(OBJDIR)/pivot_.c: $(SRCDIR)/pivot.c $(OBJDIR)/translate 792 + $(TRANSLATE) $(SRCDIR)/pivot.c >$(OBJDIR)/pivot_.c 793 + 794 +$(OBJDIR)/pivot.o: $(OBJDIR)/pivot_.c $(OBJDIR)/pivot.h $(SRCDIR)/config.h 795 + $(XTCC) -o $(OBJDIR)/pivot.o -c $(OBJDIR)/pivot_.c 796 + 797 +pivot.h: $(OBJDIR)/headers 798 +$(OBJDIR)/popen_.c: $(SRCDIR)/popen.c $(OBJDIR)/translate 799 + $(TRANSLATE) $(SRCDIR)/popen.c >$(OBJDIR)/popen_.c 800 + 801 +$(OBJDIR)/popen.o: $(OBJDIR)/popen_.c $(OBJDIR)/popen.h $(SRCDIR)/config.h 802 + $(XTCC) -o $(OBJDIR)/popen.o -c $(OBJDIR)/popen_.c 803 + 804 +popen.h: $(OBJDIR)/headers 805 +$(OBJDIR)/pqueue_.c: $(SRCDIR)/pqueue.c $(OBJDIR)/translate 806 + $(TRANSLATE) $(SRCDIR)/pqueue.c >$(OBJDIR)/pqueue_.c 807 + 808 +$(OBJDIR)/pqueue.o: $(OBJDIR)/pqueue_.c $(OBJDIR)/pqueue.h $(SRCDIR)/config.h 809 + $(XTCC) -o $(OBJDIR)/pqueue.o -c $(OBJDIR)/pqueue_.c 810 + 811 +pqueue.h: $(OBJDIR)/headers 812 +$(OBJDIR)/printf_.c: $(SRCDIR)/printf.c $(OBJDIR)/translate 813 + $(TRANSLATE) $(SRCDIR)/printf.c >$(OBJDIR)/printf_.c 814 + 815 +$(OBJDIR)/printf.o: $(OBJDIR)/printf_.c $(OBJDIR)/printf.h $(SRCDIR)/config.h 816 + $(XTCC) -o $(OBJDIR)/printf.o -c $(OBJDIR)/printf_.c 817 + 818 +printf.h: $(OBJDIR)/headers 819 +$(OBJDIR)/rebuild_.c: $(SRCDIR)/rebuild.c $(OBJDIR)/translate 820 + $(TRANSLATE) $(SRCDIR)/rebuild.c >$(OBJDIR)/rebuild_.c 821 + 822 +$(OBJDIR)/rebuild.o: $(OBJDIR)/rebuild_.c $(OBJDIR)/rebuild.h $(SRCDIR)/config.h 823 + $(XTCC) -o $(OBJDIR)/rebuild.o -c $(OBJDIR)/rebuild_.c 824 + 825 +rebuild.h: $(OBJDIR)/headers 826 +$(OBJDIR)/report_.c: $(SRCDIR)/report.c $(OBJDIR)/translate 827 + $(TRANSLATE) $(SRCDIR)/report.c >$(OBJDIR)/report_.c 828 + 829 +$(OBJDIR)/report.o: $(OBJDIR)/report_.c $(OBJDIR)/report.h $(SRCDIR)/config.h 830 + $(XTCC) -o $(OBJDIR)/report.o -c $(OBJDIR)/report_.c 831 + 832 +report.h: $(OBJDIR)/headers 833 +$(OBJDIR)/rss_.c: $(SRCDIR)/rss.c $(OBJDIR)/translate 834 + $(TRANSLATE) $(SRCDIR)/rss.c >$(OBJDIR)/rss_.c 835 + 836 +$(OBJDIR)/rss.o: $(OBJDIR)/rss_.c $(OBJDIR)/rss.h $(SRCDIR)/config.h 837 + $(XTCC) -o $(OBJDIR)/rss.o -c $(OBJDIR)/rss_.c 838 + 839 +rss.h: $(OBJDIR)/headers 840 +$(OBJDIR)/schema_.c: $(SRCDIR)/schema.c $(OBJDIR)/translate 841 + $(TRANSLATE) $(SRCDIR)/schema.c >$(OBJDIR)/schema_.c 842 + 843 +$(OBJDIR)/schema.o: $(OBJDIR)/schema_.c $(OBJDIR)/schema.h $(SRCDIR)/config.h 844 + $(XTCC) -o $(OBJDIR)/schema.o -c $(OBJDIR)/schema_.c 845 + 846 +schema.h: $(OBJDIR)/headers 847 +$(OBJDIR)/search_.c: $(SRCDIR)/search.c $(OBJDIR)/translate 848 + $(TRANSLATE) $(SRCDIR)/search.c >$(OBJDIR)/search_.c 849 + 850 +$(OBJDIR)/search.o: $(OBJDIR)/search_.c $(OBJDIR)/search.h $(SRCDIR)/config.h 851 + $(XTCC) -o $(OBJDIR)/search.o -c $(OBJDIR)/search_.c 852 + 853 +search.h: $(OBJDIR)/headers 854 +$(OBJDIR)/setup_.c: $(SRCDIR)/setup.c $(OBJDIR)/translate 855 + $(TRANSLATE) $(SRCDIR)/setup.c >$(OBJDIR)/setup_.c 856 + 857 +$(OBJDIR)/setup.o: $(OBJDIR)/setup_.c $(OBJDIR)/setup.h $(SRCDIR)/config.h 858 + $(XTCC) -o $(OBJDIR)/setup.o -c $(OBJDIR)/setup_.c 859 + 860 +setup.h: $(OBJDIR)/headers 861 +$(OBJDIR)/sha1_.c: $(SRCDIR)/sha1.c $(OBJDIR)/translate 862 + $(TRANSLATE) $(SRCDIR)/sha1.c >$(OBJDIR)/sha1_.c 863 + 864 +$(OBJDIR)/sha1.o: $(OBJDIR)/sha1_.c $(OBJDIR)/sha1.h $(SRCDIR)/config.h 865 + $(XTCC) -o $(OBJDIR)/sha1.o -c $(OBJDIR)/sha1_.c 866 + 867 +sha1.h: $(OBJDIR)/headers 868 +$(OBJDIR)/shun_.c: $(SRCDIR)/shun.c $(OBJDIR)/translate 869 + $(TRANSLATE) $(SRCDIR)/shun.c >$(OBJDIR)/shun_.c 870 + 871 +$(OBJDIR)/shun.o: $(OBJDIR)/shun_.c $(OBJDIR)/shun.h $(SRCDIR)/config.h 872 + $(XTCC) -o $(OBJDIR)/shun.o -c $(OBJDIR)/shun_.c 873 + 874 +shun.h: $(OBJDIR)/headers 875 +$(OBJDIR)/skins_.c: $(SRCDIR)/skins.c $(OBJDIR)/translate 876 + $(TRANSLATE) $(SRCDIR)/skins.c >$(OBJDIR)/skins_.c 877 + 878 +$(OBJDIR)/skins.o: $(OBJDIR)/skins_.c $(OBJDIR)/skins.h $(SRCDIR)/config.h 879 + $(XTCC) -o $(OBJDIR)/skins.o -c $(OBJDIR)/skins_.c 880 + 881 +skins.h: $(OBJDIR)/headers 882 +$(OBJDIR)/sqlcmd_.c: $(SRCDIR)/sqlcmd.c $(OBJDIR)/translate 883 + $(TRANSLATE) $(SRCDIR)/sqlcmd.c >$(OBJDIR)/sqlcmd_.c 884 + 885 +$(OBJDIR)/sqlcmd.o: $(OBJDIR)/sqlcmd_.c $(OBJDIR)/sqlcmd.h $(SRCDIR)/config.h 886 + $(XTCC) -o $(OBJDIR)/sqlcmd.o -c $(OBJDIR)/sqlcmd_.c 887 + 888 +sqlcmd.h: $(OBJDIR)/headers 889 +$(OBJDIR)/stash_.c: $(SRCDIR)/stash.c $(OBJDIR)/translate 890 + $(TRANSLATE) $(SRCDIR)/stash.c >$(OBJDIR)/stash_.c 891 + 892 +$(OBJDIR)/stash.o: $(OBJDIR)/stash_.c $(OBJDIR)/stash.h $(SRCDIR)/config.h 893 + $(XTCC) -o $(OBJDIR)/stash.o -c $(OBJDIR)/stash_.c 894 + 895 +stash.h: $(OBJDIR)/headers 896 +$(OBJDIR)/stat_.c: $(SRCDIR)/stat.c $(OBJDIR)/translate 897 + $(TRANSLATE) $(SRCDIR)/stat.c >$(OBJDIR)/stat_.c 898 + 899 +$(OBJDIR)/stat.o: $(OBJDIR)/stat_.c $(OBJDIR)/stat.h $(SRCDIR)/config.h 900 + $(XTCC) -o $(OBJDIR)/stat.o -c $(OBJDIR)/stat_.c 901 + 902 +stat.h: $(OBJDIR)/headers 903 +$(OBJDIR)/style_.c: $(SRCDIR)/style.c $(OBJDIR)/translate 904 + $(TRANSLATE) $(SRCDIR)/style.c >$(OBJDIR)/style_.c 905 + 906 +$(OBJDIR)/style.o: $(OBJDIR)/style_.c $(OBJDIR)/style.h $(SRCDIR)/config.h 907 + $(XTCC) -o $(OBJDIR)/style.o -c $(OBJDIR)/style_.c 908 + 909 +style.h: $(OBJDIR)/headers 910 +$(OBJDIR)/sync_.c: $(SRCDIR)/sync.c $(OBJDIR)/translate 911 + $(TRANSLATE) $(SRCDIR)/sync.c >$(OBJDIR)/sync_.c 912 + 913 +$(OBJDIR)/sync.o: $(OBJDIR)/sync_.c $(OBJDIR)/sync.h $(SRCDIR)/config.h 914 + $(XTCC) -o $(OBJDIR)/sync.o -c $(OBJDIR)/sync_.c 915 + 916 +sync.h: $(OBJDIR)/headers 917 +$(OBJDIR)/tag_.c: $(SRCDIR)/tag.c $(OBJDIR)/translate 918 + $(TRANSLATE) $(SRCDIR)/tag.c >$(OBJDIR)/tag_.c 919 + 920 +$(OBJDIR)/tag.o: $(OBJDIR)/tag_.c $(OBJDIR)/tag.h $(SRCDIR)/config.h 921 + $(XTCC) -o $(OBJDIR)/tag.o -c $(OBJDIR)/tag_.c 922 + 923 +tag.h: $(OBJDIR)/headers 924 +$(OBJDIR)/tar_.c: $(SRCDIR)/tar.c $(OBJDIR)/translate 925 + $(TRANSLATE) $(SRCDIR)/tar.c >$(OBJDIR)/tar_.c 926 + 927 +$(OBJDIR)/tar.o: $(OBJDIR)/tar_.c $(OBJDIR)/tar.h $(SRCDIR)/config.h 928 + $(XTCC) -o $(OBJDIR)/tar.o -c $(OBJDIR)/tar_.c 929 + 930 +tar.h: $(OBJDIR)/headers 931 +$(OBJDIR)/th_main_.c: $(SRCDIR)/th_main.c $(OBJDIR)/translate 932 + $(TRANSLATE) $(SRCDIR)/th_main.c >$(OBJDIR)/th_main_.c 933 + 934 +$(OBJDIR)/th_main.o: $(OBJDIR)/th_main_.c $(OBJDIR)/th_main.h $(SRCDIR)/config.h 935 + $(XTCC) -o $(OBJDIR)/th_main.o -c $(OBJDIR)/th_main_.c 936 + 937 +th_main.h: $(OBJDIR)/headers 938 +$(OBJDIR)/timeline_.c: $(SRCDIR)/timeline.c $(OBJDIR)/translate 939 + $(TRANSLATE) $(SRCDIR)/timeline.c >$(OBJDIR)/timeline_.c 940 + 941 +$(OBJDIR)/timeline.o: $(OBJDIR)/timeline_.c $(OBJDIR)/timeline.h $(SRCDIR)/config.h 942 + $(XTCC) -o $(OBJDIR)/timeline.o -c $(OBJDIR)/timeline_.c 943 + 944 +timeline.h: $(OBJDIR)/headers 945 +$(OBJDIR)/tkt_.c: $(SRCDIR)/tkt.c $(OBJDIR)/translate 946 + $(TRANSLATE) $(SRCDIR)/tkt.c >$(OBJDIR)/tkt_.c 947 + 948 +$(OBJDIR)/tkt.o: $(OBJDIR)/tkt_.c $(OBJDIR)/tkt.h $(SRCDIR)/config.h 949 + $(XTCC) -o $(OBJDIR)/tkt.o -c $(OBJDIR)/tkt_.c 950 + 951 +tkt.h: $(OBJDIR)/headers 952 +$(OBJDIR)/tktsetup_.c: $(SRCDIR)/tktsetup.c $(OBJDIR)/translate 953 + $(TRANSLATE) $(SRCDIR)/tktsetup.c >$(OBJDIR)/tktsetup_.c 954 + 955 +$(OBJDIR)/tktsetup.o: $(OBJDIR)/tktsetup_.c $(OBJDIR)/tktsetup.h $(SRCDIR)/config.h 956 + $(XTCC) -o $(OBJDIR)/tktsetup.o -c $(OBJDIR)/tktsetup_.c 957 + 958 +tktsetup.h: $(OBJDIR)/headers 959 +$(OBJDIR)/undo_.c: $(SRCDIR)/undo.c $(OBJDIR)/translate 960 + $(TRANSLATE) $(SRCDIR)/undo.c >$(OBJDIR)/undo_.c 961 + 962 +$(OBJDIR)/undo.o: $(OBJDIR)/undo_.c $(OBJDIR)/undo.h $(SRCDIR)/config.h 963 + $(XTCC) -o $(OBJDIR)/undo.o -c $(OBJDIR)/undo_.c 964 + 965 +undo.h: $(OBJDIR)/headers 966 +$(OBJDIR)/update_.c: $(SRCDIR)/update.c $(OBJDIR)/translate 967 + $(TRANSLATE) $(SRCDIR)/update.c >$(OBJDIR)/update_.c 968 + 969 +$(OBJDIR)/update.o: $(OBJDIR)/update_.c $(OBJDIR)/update.h $(SRCDIR)/config.h 970 + $(XTCC) -o $(OBJDIR)/update.o -c $(OBJDIR)/update_.c 971 + 972 +update.h: $(OBJDIR)/headers 973 +$(OBJDIR)/url_.c: $(SRCDIR)/url.c $(OBJDIR)/translate 974 + $(TRANSLATE) $(SRCDIR)/url.c >$(OBJDIR)/url_.c 975 + 976 +$(OBJDIR)/url.o: $(OBJDIR)/url_.c $(OBJDIR)/url.h $(SRCDIR)/config.h 977 + $(XTCC) -o $(OBJDIR)/url.o -c $(OBJDIR)/url_.c 978 + 979 +url.h: $(OBJDIR)/headers 980 +$(OBJDIR)/user_.c: $(SRCDIR)/user.c $(OBJDIR)/translate 981 + $(TRANSLATE) $(SRCDIR)/user.c >$(OBJDIR)/user_.c 982 + 983 +$(OBJDIR)/user.o: $(OBJDIR)/user_.c $(OBJDIR)/user.h $(SRCDIR)/config.h 984 + $(XTCC) -o $(OBJDIR)/user.o -c $(OBJDIR)/user_.c 985 + 986 +user.h: $(OBJDIR)/headers 987 +$(OBJDIR)/verify_.c: $(SRCDIR)/verify.c $(OBJDIR)/translate 988 + $(TRANSLATE) $(SRCDIR)/verify.c >$(OBJDIR)/verify_.c 989 + 990 +$(OBJDIR)/verify.o: $(OBJDIR)/verify_.c $(OBJDIR)/verify.h $(SRCDIR)/config.h 991 + $(XTCC) -o $(OBJDIR)/verify.o -c $(OBJDIR)/verify_.c 992 + 993 +verify.h: $(OBJDIR)/headers 994 +$(OBJDIR)/vfile_.c: $(SRCDIR)/vfile.c $(OBJDIR)/translate 995 + $(TRANSLATE) $(SRCDIR)/vfile.c >$(OBJDIR)/vfile_.c 996 + 997 +$(OBJDIR)/vfile.o: $(OBJDIR)/vfile_.c $(OBJDIR)/vfile.h $(SRCDIR)/config.h 998 + $(XTCC) -o $(OBJDIR)/vfile.o -c $(OBJDIR)/vfile_.c 999 + 1000 +vfile.h: $(OBJDIR)/headers 1001 +$(OBJDIR)/wiki_.c: $(SRCDIR)/wiki.c $(OBJDIR)/translate 1002 + $(TRANSLATE) $(SRCDIR)/wiki.c >$(OBJDIR)/wiki_.c 1003 + 1004 +$(OBJDIR)/wiki.o: $(OBJDIR)/wiki_.c $(OBJDIR)/wiki.h $(SRCDIR)/config.h 1005 + $(XTCC) -o $(OBJDIR)/wiki.o -c $(OBJDIR)/wiki_.c 1006 + 1007 +wiki.h: $(OBJDIR)/headers 1008 +$(OBJDIR)/wikiformat_.c: $(SRCDIR)/wikiformat.c $(OBJDIR)/translate 1009 + $(TRANSLATE) $(SRCDIR)/wikiformat.c >$(OBJDIR)/wikiformat_.c 1010 + 1011 +$(OBJDIR)/wikiformat.o: $(OBJDIR)/wikiformat_.c $(OBJDIR)/wikiformat.h $(SRCDIR)/config.h 1012 + $(XTCC) -o $(OBJDIR)/wikiformat.o -c $(OBJDIR)/wikiformat_.c 1013 + 1014 +wikiformat.h: $(OBJDIR)/headers 1015 +$(OBJDIR)/winhttp_.c: $(SRCDIR)/winhttp.c $(OBJDIR)/translate 1016 + $(TRANSLATE) $(SRCDIR)/winhttp.c >$(OBJDIR)/winhttp_.c 1017 + 1018 +$(OBJDIR)/winhttp.o: $(OBJDIR)/winhttp_.c $(OBJDIR)/winhttp.h $(SRCDIR)/config.h 1019 + $(XTCC) -o $(OBJDIR)/winhttp.o -c $(OBJDIR)/winhttp_.c 1020 + 1021 +winhttp.h: $(OBJDIR)/headers 1022 +$(OBJDIR)/xfer_.c: $(SRCDIR)/xfer.c $(OBJDIR)/translate 1023 + $(TRANSLATE) $(SRCDIR)/xfer.c >$(OBJDIR)/xfer_.c 1024 + 1025 +$(OBJDIR)/xfer.o: $(OBJDIR)/xfer_.c $(OBJDIR)/xfer.h $(SRCDIR)/config.h 1026 + $(XTCC) -o $(OBJDIR)/xfer.o -c $(OBJDIR)/xfer_.c 1027 + 1028 +xfer.h: $(OBJDIR)/headers 1029 +$(OBJDIR)/zip_.c: $(SRCDIR)/zip.c $(OBJDIR)/translate 1030 + $(TRANSLATE) $(SRCDIR)/zip.c >$(OBJDIR)/zip_.c 1031 + 1032 +$(OBJDIR)/zip.o: $(OBJDIR)/zip_.c $(OBJDIR)/zip.h $(SRCDIR)/config.h 1033 + $(XTCC) -o $(OBJDIR)/zip.o -c $(OBJDIR)/zip_.c 1034 + 1035 +zip.h: $(OBJDIR)/headers 1036 +$(OBJDIR)/sqlite3.o: $(SRCDIR)/sqlite3.c 1037 + $(XTCC) -DSQLITE_OMIT_LOAD_EXTENSION=1 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_STAT2 -Dlocaltime=fossil_localtime -DSQLITE_ENABLE_LOCKING_STYLE=0 -c $(SRCDIR)/sqlite3.c -o $(OBJDIR)/sqlite3.o 1038 + 1039 +$(OBJDIR)/shell.o: $(SRCDIR)/shell.c $(SRCDIR)/sqlite3.h 1040 + $(XTCC) -Dmain=sqlite3_shell -DSQLITE_OMIT_LOAD_EXTENSION=1 -c $(SRCDIR)/shell.c -o $(OBJDIR)/shell.o 1041 + 1042 +$(OBJDIR)/th.o: $(SRCDIR)/th.c 1043 + $(XTCC) -I$(SRCDIR) -c $(SRCDIR)/th.c -o $(OBJDIR)/th.o 1044 + 1045 +$(OBJDIR)/th_lang.o: $(SRCDIR)/th_lang.c 1046 + $(XTCC) -I$(SRCDIR) -c $(SRCDIR)/th_lang.c -o $(OBJDIR)/th_lang.o 1047 + 1048 +ifdef FOSSIL_ENABLE_TCL 1049 +$(OBJDIR)/th_tcl.o: $(SRCDIR)/th_tcl.c 1050 + $(XTCC) -I$(SRCDIR) -c $(SRCDIR)/th_tcl.c -o $(OBJDIR)/th_tcl.o 1051 +endif 1052 +