Changes On Branch tcl-integration
Not logged in

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 &quot;bad_command&quot;</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 &quot;bad_command&quot;</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: &quot;2**0&quot;</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  +