Fossil SCM

Started refactoring specific json command groups into their own files (80kb is getting too big to manage in one file).

stephan 2011-09-27 01:01 UTC json merge
Commit 5d2a516f8a33e6d407713cc6beaa5f6bd1bfa047
+15 -267
--- src/json.c
+++ src/json.c
@@ -36,45 +36,13 @@
3636
#include "json.h"
3737
#include <assert.h>
3838
#include <time.h>
3939
4040
#if INTERFACE
41
-#include "cson_amalgamation.h"
4241
#include "json_detail.h" /* workaround for apparent enum limitation in makeheaders */
4342
#endif
4443
45
-/*
46
-** Signature for JSON page/command callbacks. Each callback is
47
-** responsible for handling one JSON request/command and/or
48
-** dispatching to sub-commands.
49
-**
50
-** By the time the callback is called, json_page_top() (HTTP mode) or
51
-** json_cmd_top() (CLI mode) will have set up the JSON-related
52
-** environment. Implementations may generate a "result payload" of any
53
-** JSON type by returning its value from this function (ownership is
54
-** tranferred to the caller). On error they should set
55
-** g.json.resultCode to one of the FossilJsonCodes values and return
56
-** either their payload object or NULL. Note that NULL is a legal
57
-** success value - it simply means the response will contain no
58
-** payload. If g.json.resultCode is non-zero when this function
59
-** returns then the top-level dispatcher will destroy any payload
60
-** returned by this function and will output a JSON error response
61
-** instead.
62
-**
63
-** All of the setup/response code is handled by the top dispatcher
64
-** functions and the callbacks concern themselves only with generating
65
-** the payload.
66
-**
67
-** It is imperitive that NO callback functions EVER output ANYTHING to
68
-** stdout, as that will effectively corrupt any JSON output, and
69
-** almost certainly will corrupt any HTTP response headers. Output
70
-** sent to stderr ends up in my apache log, so that might be useful
71
-** for debuggering in some cases, but so such code should be left
72
-** enabled for non-debuggering builds.
73
-*/
74
-typedef cson_value * (*fossil_json_f)();
75
-
7644
/*
7745
** Internal helpers to manipulate a byte array as a bitset. The B
7846
** argument must be-a array at least (BIT/8+1) bytes long.
7947
** The BIT argument is the bit number to query/set/clear/toggle.
8048
*/
@@ -92,34 +60,10 @@
9260
static cson_value * json_page_nyi(){
9361
g.json.resultCode = FSL_JSON_E_NYI;
9462
return NULL;
9563
}
9664
97
-/*
98
-** Holds keys used for various JSON API properties.
99
-*/
100
-static const struct FossilJsonKeys_{
101
- /** maintainers: please keep alpha sorted (case-insensitive) */
102
- char const * commandPath;
103
- char const * anonymousSeed;
104
- char const * authToken;
105
- char const * payload;
106
- char const * requestId;
107
- char const * resultCode;
108
- char const * resultText;
109
- char const * timestamp;
110
-} FossilJsonKeys = {
111
- "COMMAND_PATH" /*commandPath*/,
112
- "anonymousSeed" /*anonymousSeed*/,
113
- "authToken" /*authToken*/,
114
- "payload" /* payload */,
115
- "requestId" /*requestId*/,
116
- "resultCode" /*resultCode*/,
117
- "resultText" /*resultText*/,
118
- "timestamp" /*timestamp*/
119
-};
120
-
12165
/*
12266
** Given a FossilJsonCodes value, it returns a string suitable for use
12367
** as a resultText string. Returns some unspecified string if errCode
12468
** is not one of the FossilJsonCodes values.
12569
*/
@@ -160,10 +104,11 @@
160104
#undef C
161105
default:
162106
return "Unknown Error";
163107
}
164108
}
109
+
165110
/*
166111
** Implements the cson_data_dest_f() interface and outputs the data to
167112
** a fossil Blob object. pState must be-a initialized (Blob*), to
168113
** which n bytes of src will be appended.
169114
**/
@@ -206,10 +151,11 @@
206151
cson_value * root = NULL;
207152
blob_rewind( pSrc );
208153
cson_parse( &root, cson_data_src_Blob, pSrc, NULL, pInfo );
209154
return root;
210155
}
156
+
211157
/*
212158
** Implements the cson_data_dest_f() interface and outputs the data to
213159
** cgi_append_content(). pState is ignored.
214160
**/
215161
int cson_data_dest_cgi(void * pState, void const * src, unsigned int n){
@@ -476,11 +422,11 @@
476422
** info in time (and future changes to that state may cause unexpected
477423
** results).
478424
**
479425
** The result of this call are cached for future calls.
480426
*/
481
-static cson_value * json_auth_token(){
427
+cson_value * json_auth_token(){
482428
if( !g.json.authToken ){
483429
/* Try to get an authorization token from GET parameter, POSTed
484430
JSON, or fossil cookie (in that order). */
485431
g.json.authToken = json_getenv(FossilJsonKeys.authToken);
486432
if(g.json.authToken
@@ -859,11 +805,11 @@
859805
**
860806
** In CLI mode the "path" is the list of arguments (skipping argv[0]).
861807
** In server/CGI modes the path is taken from PATH_INFO.
862808
**
863809
*/
864
-static char const * json_command_arg(unsigned char ndx){
810
+char const * json_command_arg(unsigned char ndx){
865811
cson_array * ar = g.json.cmd.a;
866812
assert((NULL!=ar) && "Internal error. Was json_mode_bootstrap() called?");
867813
assert((g.argc>1) && "Internal error - we never should have gotten this far.");
868814
if( g.json.cmd.offset < 0 ){
869815
/* first-time setup. */
@@ -899,11 +845,11 @@
899845
** given property is searched for in the request payload. If found it
900846
** is returned. The returned value is owned by (or shares ownership
901847
** with) g.json, and must NOT be cson_value_free()'d by the
902848
** caller.
903849
*/
904
-static cson_value * json_payload_property( char const * key ){
850
+cson_value * json_payload_property( char const * key ){
905851
return g.json.reqPayload.o ?
906852
cson_object_get( g.json.reqPayload.o, key )
907853
: NULL;
908854
}
909855
@@ -914,49 +860,18 @@
914860
char const * json_auth_token_cstr(){
915861
return cson_value_get_cstr( json_auth_token() );
916862
}
917863
918864
919
-/*
920
-** Holds name-to-function mappings for JSON page/command dispatching.
921
-**
922
-*/
923
-typedef struct JsonPageDef{
924
- /*
925
- ** The commmand/page's name (path, not including leading /json/).
926
- **
927
- ** Reminder to self: we cannot use sub-paths with commands this way
928
- ** without additional string-splitting downstream. e.g. foo/bar.
929
- ** Alternately, we can create different JsonPageDef arrays for each
930
- ** subset.
931
- */
932
- char const * name;
933
- /*
934
- ** Returns a payload object for the response. If it returns a
935
- ** non-NULL value, the caller owns it. To trigger an error this
936
- ** function should set g.json.resultCode to a value from the
937
- ** FossilJsonCodes enum. If it sets an error value and returns
938
- ** a payload, the payload will be destroyed (not sent with the
939
- ** response).
940
- */
941
- fossil_json_f func;
942
- /*
943
- ** Which mode(s) of execution does func() support:
944
- **
945
- ** <0 = CLI only, >0 = HTTP only, 0==both
946
- */
947
- char runMode;
948
-} JsonPageDef;
949
-
950865
/*
951866
** Returns the JsonPageDef with the given name, or NULL if no match is
952867
** found.
953868
**
954869
** head must be a pointer to an array of JsonPageDefs in which the
955870
** last entry has a NULL name.
956871
*/
957
-static JsonPageDef const * json_handler_for_name( char const * name, JsonPageDef const * head ){
872
+JsonPageDef const * json_handler_for_name( char const * name, JsonPageDef const * head ){
958873
JsonPageDef const * pageDef = head;
959874
assert( head != NULL );
960875
if(name && *name) for( ; pageDef->name; ++pageDef ){
961876
if( 0 == strcmp(name, pageDef->name) ){
962877
return pageDef;
@@ -1001,22 +916,23 @@
1001916
static cson_value * json_julian_to_timestamp(double j){
1002917
return cson_value_new_integer((cson_int_t)
1003918
db_int64(0,"SELECT strftime('%%s',%lf)",j)
1004919
);
1005920
}
921
+
1006922
/*
1007923
** Returns a timestamp value.
1008924
*/
1009
-static cson_int_t json_timestamp(){
925
+cson_int_t json_timestamp(){
1010926
return (cson_int_t)time(0);
1011927
}
1012928
/*
1013929
** Returns a new JSON value (owned by the caller) representing
1014930
** a timestamp. If timeVal is < 0 then time(0) is used to fetch
1015931
** the time, else timeVal is used as-is
1016932
*/
1017
-static cson_value * json_new_timestamp(cson_int_t timeVal){
933
+cson_value * json_new_timestamp(cson_int_t timeVal){
1018934
return cson_value_new_integer((timeVal<0) ? (cson_int_t)time(0) : timeVal);
1019935
}
1020936
1021937
/*
1022938
** Creates a new Fossil/JSON response envelope skeleton. It is owned
@@ -1284,184 +1200,10 @@
12841200
ADD(Zip);
12851201
ADD(Private);
12861202
#undef ADD
12871203
return payload;
12881204
}
1289
-
1290
-/*
1291
-** Implementation of the /json/login page.
1292
-**
1293
-*/
1294
-cson_value * json_page_login(){
1295
- static char preciseErrors = /* if true, "complete" JSON error codes are used,
1296
- else they are "dumbed down" to a generic login
1297
- error code.
1298
- */
1299
-#if 0
1300
- g.json.errorDetailParanoia ? 0 : 1
1301
-#else
1302
- 0
1303
-#endif
1304
- ;
1305
- /*
1306
- FIXME: we want to check the GET/POST args in this order:
1307
-
1308
- - GET: name, n, password, p
1309
- - POST: name, password
1310
-
1311
- but a bug in cgi_parameter() is breaking that, causing PD() to
1312
- return the last element of the PATH_INFO instead.
1313
-
1314
- Summary: If we check for P("name") first, then P("n"),
1315
- then ONLY a GET param of "name" will match ("n"
1316
- is not recognized). If we reverse the order of the
1317
- checks then both forms work. Strangely enough, the
1318
- "p"/"password" check is not affected by this.
1319
- */
1320
- char const * name = cson_value_get_cstr(json_payload_property("name"));
1321
- char const * pw = NULL;
1322
- char const * anonSeed = NULL;
1323
- cson_value * payload = NULL;
1324
- int uid = 0;
1325
- if( !name ){
1326
- name = PD("n",NULL);
1327
- if( !name ){
1328
- name = PD("name",NULL);
1329
- if( !name ){
1330
- g.json.resultCode = preciseErrors
1331
- ? FSL_JSON_E_LOGIN_FAILED_NONAME
1332
- : FSL_JSON_E_LOGIN_FAILED;
1333
- return NULL;
1334
- }
1335
- }
1336
- }
1337
-
1338
- pw = cson_value_get_cstr(json_payload_property("password"));
1339
- if( !pw ){
1340
- pw = PD("p",NULL);
1341
- if( !pw ){
1342
- pw = PD("password",NULL);
1343
- }
1344
- }
1345
- if(!pw){
1346
- g.json.resultCode = preciseErrors
1347
- ? FSL_JSON_E_LOGIN_FAILED_NOPW
1348
- : FSL_JSON_E_LOGIN_FAILED;
1349
- return NULL;
1350
- }
1351
-
1352
- if(0 == strcmp("anonymous",name)){
1353
- /* check captcha/seed values... */
1354
- enum { SeedBufLen = 100 /* in some JSON tests i once actually got an
1355
- 80-digit number.
1356
- */
1357
- };
1358
- static char seedBuffer[SeedBufLen];
1359
- cson_value const * jseed = json_getenv(FossilJsonKeys.anonymousSeed);
1360
- seedBuffer[0] = 0;
1361
- if( !jseed ){
1362
- jseed = json_payload_property(FossilJsonKeys.anonymousSeed);
1363
- if( !jseed ){
1364
- jseed = json_getenv("cs") /* name used by HTML interface */;
1365
- }
1366
- }
1367
- if(jseed){
1368
- if( cson_value_is_number(jseed) ){
1369
- sprintf(seedBuffer, "%"CSON_INT_T_PFMT, cson_value_get_integer(jseed));
1370
- anonSeed = seedBuffer;
1371
- }else if( cson_value_is_string(jseed) ){
1372
- anonSeed = cson_string_cstr(cson_value_get_string(jseed));
1373
- }
1374
- }
1375
- if(!anonSeed){
1376
- g.json.resultCode = preciseErrors
1377
- ? FSL_JSON_E_LOGIN_FAILED_NOSEED
1378
- : FSL_JSON_E_LOGIN_FAILED;
1379
- return NULL;
1380
- }
1381
- }
1382
-
1383
-#if 0
1384
- {
1385
- /* only for debugging the PD()-incorrect-result problem */
1386
- cson_object * o = NULL;
1387
- uid = login_search_uid( name, pw );
1388
- payload = cson_value_new_object();
1389
- o = cson_value_get_object(payload);
1390
- cson_object_set( o, "n", cson_value_new_string(name,strlen(name)));
1391
- cson_object_set( o, "p", cson_value_new_string(pw,strlen(pw)));
1392
- return payload;
1393
- }
1394
-#else
1395
- uid = anonSeed
1396
- ? login_is_valid_anonymous(name, pw, anonSeed)
1397
- : login_search_uid(name, pw)
1398
- ;
1399
- if( !uid ){
1400
- g.json.resultCode = preciseErrors
1401
- ? FSL_JSON_E_LOGIN_FAILED_NOTFOUND
1402
- : FSL_JSON_E_LOGIN_FAILED;
1403
- return NULL;
1404
- }else{
1405
- char * cookie = NULL;
1406
- if(anonSeed){
1407
- login_set_anon_cookie(NULL, &cookie);
1408
- }else{
1409
- login_set_user_cookie(name, uid, &cookie);
1410
- }
1411
- payload = cookie
1412
- ? cson_value_new_string( cookie, strlen(cookie) )
1413
- : cson_value_null()/*why null instead of NULL?*/;
1414
- free(cookie);
1415
- return payload;
1416
- }
1417
-#endif
1418
-}
1419
-
1420
-/*
1421
-** Impl of /json/logout.
1422
-**
1423
-*/
1424
-cson_value * json_page_logout(){
1425
- cson_value const *token = g.json.authToken;
1426
- /* Remember that json_mode_bootstrap() replaces the login cookie
1427
- with the JSON auth token if the request contains it. If the
1428
- reqest is missing the auth token then this will fetch fossil's
1429
- original cookie. Either way, it's what we want :).
1430
-
1431
- We require the auth token to avoid someone maliciously
1432
- trying to log someone else out (not 100% sure if that
1433
- would be possible, given fossil's hardened cookie, but
1434
- i'll assume it would be for the time being).
1435
- */
1436
- ;
1437
- if(!token){
1438
- g.json.resultCode = FSL_JSON_E_MISSING_AUTH;
1439
- }else{
1440
- login_clear_login_data();
1441
- g.json.authToken = NULL /* memory is owned elsewhere.*/;
1442
- }
1443
- return NULL;
1444
-}
1445
-
1446
-/*
1447
-** Implementation of the /json/anonymousPassword page.
1448
-*/
1449
-cson_value * json_page_anon_password(){
1450
- cson_value * v = cson_value_new_object();
1451
- cson_object * o = cson_value_get_object(v);
1452
- unsigned const int seed = captcha_seed();
1453
- char const * zCaptcha = captcha_decode(seed);
1454
- cson_object_set(o, "seed",
1455
- cson_value_new_integer( (cson_int_t)seed )
1456
- );
1457
- cson_object_set(o, "password",
1458
- cson_value_new_string( zCaptcha, strlen(zCaptcha) )
1459
- );
1460
- return v;
1461
-}
1462
-
14631205
14641206
/*
14651207
** Implementation of the /json/stat page/command.
14661208
**
14671209
*/
@@ -2540,10 +2282,16 @@
25402282
}
25412283
db_finalize(&q);
25422284
return payV;
25432285
}
25442286
2287
+/* Impl in json_login.c. */
2288
+cson_value * json_page_anon_password();
2289
+/* Impl in json_login.c. */
2290
+cson_value * json_page_login();
2291
+/* Impl in json_login.c. */
2292
+cson_value * json_page_logout();
25452293
25462294
/*
25472295
** Mapping of names to JSON pages/commands. Each name is a subpath of
25482296
** /json (in CGI mode) or a subcommand of the json command in CLI mode
25492297
*/
25502298
--- src/json.c
+++ src/json.c
@@ -36,45 +36,13 @@
36 #include "json.h"
37 #include <assert.h>
38 #include <time.h>
39
40 #if INTERFACE
41 #include "cson_amalgamation.h"
42 #include "json_detail.h" /* workaround for apparent enum limitation in makeheaders */
43 #endif
44
45 /*
46 ** Signature for JSON page/command callbacks. Each callback is
47 ** responsible for handling one JSON request/command and/or
48 ** dispatching to sub-commands.
49 **
50 ** By the time the callback is called, json_page_top() (HTTP mode) or
51 ** json_cmd_top() (CLI mode) will have set up the JSON-related
52 ** environment. Implementations may generate a "result payload" of any
53 ** JSON type by returning its value from this function (ownership is
54 ** tranferred to the caller). On error they should set
55 ** g.json.resultCode to one of the FossilJsonCodes values and return
56 ** either their payload object or NULL. Note that NULL is a legal
57 ** success value - it simply means the response will contain no
58 ** payload. If g.json.resultCode is non-zero when this function
59 ** returns then the top-level dispatcher will destroy any payload
60 ** returned by this function and will output a JSON error response
61 ** instead.
62 **
63 ** All of the setup/response code is handled by the top dispatcher
64 ** functions and the callbacks concern themselves only with generating
65 ** the payload.
66 **
67 ** It is imperitive that NO callback functions EVER output ANYTHING to
68 ** stdout, as that will effectively corrupt any JSON output, and
69 ** almost certainly will corrupt any HTTP response headers. Output
70 ** sent to stderr ends up in my apache log, so that might be useful
71 ** for debuggering in some cases, but so such code should be left
72 ** enabled for non-debuggering builds.
73 */
74 typedef cson_value * (*fossil_json_f)();
75
76 /*
77 ** Internal helpers to manipulate a byte array as a bitset. The B
78 ** argument must be-a array at least (BIT/8+1) bytes long.
79 ** The BIT argument is the bit number to query/set/clear/toggle.
80 */
@@ -92,34 +60,10 @@
92 static cson_value * json_page_nyi(){
93 g.json.resultCode = FSL_JSON_E_NYI;
94 return NULL;
95 }
96
97 /*
98 ** Holds keys used for various JSON API properties.
99 */
100 static const struct FossilJsonKeys_{
101 /** maintainers: please keep alpha sorted (case-insensitive) */
102 char const * commandPath;
103 char const * anonymousSeed;
104 char const * authToken;
105 char const * payload;
106 char const * requestId;
107 char const * resultCode;
108 char const * resultText;
109 char const * timestamp;
110 } FossilJsonKeys = {
111 "COMMAND_PATH" /*commandPath*/,
112 "anonymousSeed" /*anonymousSeed*/,
113 "authToken" /*authToken*/,
114 "payload" /* payload */,
115 "requestId" /*requestId*/,
116 "resultCode" /*resultCode*/,
117 "resultText" /*resultText*/,
118 "timestamp" /*timestamp*/
119 };
120
121 /*
122 ** Given a FossilJsonCodes value, it returns a string suitable for use
123 ** as a resultText string. Returns some unspecified string if errCode
124 ** is not one of the FossilJsonCodes values.
125 */
@@ -160,10 +104,11 @@
160 #undef C
161 default:
162 return "Unknown Error";
163 }
164 }
 
165 /*
166 ** Implements the cson_data_dest_f() interface and outputs the data to
167 ** a fossil Blob object. pState must be-a initialized (Blob*), to
168 ** which n bytes of src will be appended.
169 **/
@@ -206,10 +151,11 @@
206 cson_value * root = NULL;
207 blob_rewind( pSrc );
208 cson_parse( &root, cson_data_src_Blob, pSrc, NULL, pInfo );
209 return root;
210 }
 
211 /*
212 ** Implements the cson_data_dest_f() interface and outputs the data to
213 ** cgi_append_content(). pState is ignored.
214 **/
215 int cson_data_dest_cgi(void * pState, void const * src, unsigned int n){
@@ -476,11 +422,11 @@
476 ** info in time (and future changes to that state may cause unexpected
477 ** results).
478 **
479 ** The result of this call are cached for future calls.
480 */
481 static cson_value * json_auth_token(){
482 if( !g.json.authToken ){
483 /* Try to get an authorization token from GET parameter, POSTed
484 JSON, or fossil cookie (in that order). */
485 g.json.authToken = json_getenv(FossilJsonKeys.authToken);
486 if(g.json.authToken
@@ -859,11 +805,11 @@
859 **
860 ** In CLI mode the "path" is the list of arguments (skipping argv[0]).
861 ** In server/CGI modes the path is taken from PATH_INFO.
862 **
863 */
864 static char const * json_command_arg(unsigned char ndx){
865 cson_array * ar = g.json.cmd.a;
866 assert((NULL!=ar) && "Internal error. Was json_mode_bootstrap() called?");
867 assert((g.argc>1) && "Internal error - we never should have gotten this far.");
868 if( g.json.cmd.offset < 0 ){
869 /* first-time setup. */
@@ -899,11 +845,11 @@
899 ** given property is searched for in the request payload. If found it
900 ** is returned. The returned value is owned by (or shares ownership
901 ** with) g.json, and must NOT be cson_value_free()'d by the
902 ** caller.
903 */
904 static cson_value * json_payload_property( char const * key ){
905 return g.json.reqPayload.o ?
906 cson_object_get( g.json.reqPayload.o, key )
907 : NULL;
908 }
909
@@ -914,49 +860,18 @@
914 char const * json_auth_token_cstr(){
915 return cson_value_get_cstr( json_auth_token() );
916 }
917
918
919 /*
920 ** Holds name-to-function mappings for JSON page/command dispatching.
921 **
922 */
923 typedef struct JsonPageDef{
924 /*
925 ** The commmand/page's name (path, not including leading /json/).
926 **
927 ** Reminder to self: we cannot use sub-paths with commands this way
928 ** without additional string-splitting downstream. e.g. foo/bar.
929 ** Alternately, we can create different JsonPageDef arrays for each
930 ** subset.
931 */
932 char const * name;
933 /*
934 ** Returns a payload object for the response. If it returns a
935 ** non-NULL value, the caller owns it. To trigger an error this
936 ** function should set g.json.resultCode to a value from the
937 ** FossilJsonCodes enum. If it sets an error value and returns
938 ** a payload, the payload will be destroyed (not sent with the
939 ** response).
940 */
941 fossil_json_f func;
942 /*
943 ** Which mode(s) of execution does func() support:
944 **
945 ** <0 = CLI only, >0 = HTTP only, 0==both
946 */
947 char runMode;
948 } JsonPageDef;
949
950 /*
951 ** Returns the JsonPageDef with the given name, or NULL if no match is
952 ** found.
953 **
954 ** head must be a pointer to an array of JsonPageDefs in which the
955 ** last entry has a NULL name.
956 */
957 static JsonPageDef const * json_handler_for_name( char const * name, JsonPageDef const * head ){
958 JsonPageDef const * pageDef = head;
959 assert( head != NULL );
960 if(name && *name) for( ; pageDef->name; ++pageDef ){
961 if( 0 == strcmp(name, pageDef->name) ){
962 return pageDef;
@@ -1001,22 +916,23 @@
1001 static cson_value * json_julian_to_timestamp(double j){
1002 return cson_value_new_integer((cson_int_t)
1003 db_int64(0,"SELECT strftime('%%s',%lf)",j)
1004 );
1005 }
 
1006 /*
1007 ** Returns a timestamp value.
1008 */
1009 static cson_int_t json_timestamp(){
1010 return (cson_int_t)time(0);
1011 }
1012 /*
1013 ** Returns a new JSON value (owned by the caller) representing
1014 ** a timestamp. If timeVal is < 0 then time(0) is used to fetch
1015 ** the time, else timeVal is used as-is
1016 */
1017 static cson_value * json_new_timestamp(cson_int_t timeVal){
1018 return cson_value_new_integer((timeVal<0) ? (cson_int_t)time(0) : timeVal);
1019 }
1020
1021 /*
1022 ** Creates a new Fossil/JSON response envelope skeleton. It is owned
@@ -1284,184 +1200,10 @@
1284 ADD(Zip);
1285 ADD(Private);
1286 #undef ADD
1287 return payload;
1288 }
1289
1290 /*
1291 ** Implementation of the /json/login page.
1292 **
1293 */
1294 cson_value * json_page_login(){
1295 static char preciseErrors = /* if true, "complete" JSON error codes are used,
1296 else they are "dumbed down" to a generic login
1297 error code.
1298 */
1299 #if 0
1300 g.json.errorDetailParanoia ? 0 : 1
1301 #else
1302 0
1303 #endif
1304 ;
1305 /*
1306 FIXME: we want to check the GET/POST args in this order:
1307
1308 - GET: name, n, password, p
1309 - POST: name, password
1310
1311 but a bug in cgi_parameter() is breaking that, causing PD() to
1312 return the last element of the PATH_INFO instead.
1313
1314 Summary: If we check for P("name") first, then P("n"),
1315 then ONLY a GET param of "name" will match ("n"
1316 is not recognized). If we reverse the order of the
1317 checks then both forms work. Strangely enough, the
1318 "p"/"password" check is not affected by this.
1319 */
1320 char const * name = cson_value_get_cstr(json_payload_property("name"));
1321 char const * pw = NULL;
1322 char const * anonSeed = NULL;
1323 cson_value * payload = NULL;
1324 int uid = 0;
1325 if( !name ){
1326 name = PD("n",NULL);
1327 if( !name ){
1328 name = PD("name",NULL);
1329 if( !name ){
1330 g.json.resultCode = preciseErrors
1331 ? FSL_JSON_E_LOGIN_FAILED_NONAME
1332 : FSL_JSON_E_LOGIN_FAILED;
1333 return NULL;
1334 }
1335 }
1336 }
1337
1338 pw = cson_value_get_cstr(json_payload_property("password"));
1339 if( !pw ){
1340 pw = PD("p",NULL);
1341 if( !pw ){
1342 pw = PD("password",NULL);
1343 }
1344 }
1345 if(!pw){
1346 g.json.resultCode = preciseErrors
1347 ? FSL_JSON_E_LOGIN_FAILED_NOPW
1348 : FSL_JSON_E_LOGIN_FAILED;
1349 return NULL;
1350 }
1351
1352 if(0 == strcmp("anonymous",name)){
1353 /* check captcha/seed values... */
1354 enum { SeedBufLen = 100 /* in some JSON tests i once actually got an
1355 80-digit number.
1356 */
1357 };
1358 static char seedBuffer[SeedBufLen];
1359 cson_value const * jseed = json_getenv(FossilJsonKeys.anonymousSeed);
1360 seedBuffer[0] = 0;
1361 if( !jseed ){
1362 jseed = json_payload_property(FossilJsonKeys.anonymousSeed);
1363 if( !jseed ){
1364 jseed = json_getenv("cs") /* name used by HTML interface */;
1365 }
1366 }
1367 if(jseed){
1368 if( cson_value_is_number(jseed) ){
1369 sprintf(seedBuffer, "%"CSON_INT_T_PFMT, cson_value_get_integer(jseed));
1370 anonSeed = seedBuffer;
1371 }else if( cson_value_is_string(jseed) ){
1372 anonSeed = cson_string_cstr(cson_value_get_string(jseed));
1373 }
1374 }
1375 if(!anonSeed){
1376 g.json.resultCode = preciseErrors
1377 ? FSL_JSON_E_LOGIN_FAILED_NOSEED
1378 : FSL_JSON_E_LOGIN_FAILED;
1379 return NULL;
1380 }
1381 }
1382
1383 #if 0
1384 {
1385 /* only for debugging the PD()-incorrect-result problem */
1386 cson_object * o = NULL;
1387 uid = login_search_uid( name, pw );
1388 payload = cson_value_new_object();
1389 o = cson_value_get_object(payload);
1390 cson_object_set( o, "n", cson_value_new_string(name,strlen(name)));
1391 cson_object_set( o, "p", cson_value_new_string(pw,strlen(pw)));
1392 return payload;
1393 }
1394 #else
1395 uid = anonSeed
1396 ? login_is_valid_anonymous(name, pw, anonSeed)
1397 : login_search_uid(name, pw)
1398 ;
1399 if( !uid ){
1400 g.json.resultCode = preciseErrors
1401 ? FSL_JSON_E_LOGIN_FAILED_NOTFOUND
1402 : FSL_JSON_E_LOGIN_FAILED;
1403 return NULL;
1404 }else{
1405 char * cookie = NULL;
1406 if(anonSeed){
1407 login_set_anon_cookie(NULL, &cookie);
1408 }else{
1409 login_set_user_cookie(name, uid, &cookie);
1410 }
1411 payload = cookie
1412 ? cson_value_new_string( cookie, strlen(cookie) )
1413 : cson_value_null()/*why null instead of NULL?*/;
1414 free(cookie);
1415 return payload;
1416 }
1417 #endif
1418 }
1419
1420 /*
1421 ** Impl of /json/logout.
1422 **
1423 */
1424 cson_value * json_page_logout(){
1425 cson_value const *token = g.json.authToken;
1426 /* Remember that json_mode_bootstrap() replaces the login cookie
1427 with the JSON auth token if the request contains it. If the
1428 reqest is missing the auth token then this will fetch fossil's
1429 original cookie. Either way, it's what we want :).
1430
1431 We require the auth token to avoid someone maliciously
1432 trying to log someone else out (not 100% sure if that
1433 would be possible, given fossil's hardened cookie, but
1434 i'll assume it would be for the time being).
1435 */
1436 ;
1437 if(!token){
1438 g.json.resultCode = FSL_JSON_E_MISSING_AUTH;
1439 }else{
1440 login_clear_login_data();
1441 g.json.authToken = NULL /* memory is owned elsewhere.*/;
1442 }
1443 return NULL;
1444 }
1445
1446 /*
1447 ** Implementation of the /json/anonymousPassword page.
1448 */
1449 cson_value * json_page_anon_password(){
1450 cson_value * v = cson_value_new_object();
1451 cson_object * o = cson_value_get_object(v);
1452 unsigned const int seed = captcha_seed();
1453 char const * zCaptcha = captcha_decode(seed);
1454 cson_object_set(o, "seed",
1455 cson_value_new_integer( (cson_int_t)seed )
1456 );
1457 cson_object_set(o, "password",
1458 cson_value_new_string( zCaptcha, strlen(zCaptcha) )
1459 );
1460 return v;
1461 }
1462
1463
1464 /*
1465 ** Implementation of the /json/stat page/command.
1466 **
1467 */
@@ -2540,10 +2282,16 @@
2540 }
2541 db_finalize(&q);
2542 return payV;
2543 }
2544
 
 
 
 
 
 
2545
2546 /*
2547 ** Mapping of names to JSON pages/commands. Each name is a subpath of
2548 ** /json (in CGI mode) or a subcommand of the json command in CLI mode
2549 */
2550
--- src/json.c
+++ src/json.c
@@ -36,45 +36,13 @@
36 #include "json.h"
37 #include <assert.h>
38 #include <time.h>
39
40 #if INTERFACE
 
41 #include "json_detail.h" /* workaround for apparent enum limitation in makeheaders */
42 #endif
43
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
44 /*
45 ** Internal helpers to manipulate a byte array as a bitset. The B
46 ** argument must be-a array at least (BIT/8+1) bytes long.
47 ** The BIT argument is the bit number to query/set/clear/toggle.
48 */
@@ -92,34 +60,10 @@
60 static cson_value * json_page_nyi(){
61 g.json.resultCode = FSL_JSON_E_NYI;
62 return NULL;
63 }
64
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
65 /*
66 ** Given a FossilJsonCodes value, it returns a string suitable for use
67 ** as a resultText string. Returns some unspecified string if errCode
68 ** is not one of the FossilJsonCodes values.
69 */
@@ -160,10 +104,11 @@
104 #undef C
105 default:
106 return "Unknown Error";
107 }
108 }
109
110 /*
111 ** Implements the cson_data_dest_f() interface and outputs the data to
112 ** a fossil Blob object. pState must be-a initialized (Blob*), to
113 ** which n bytes of src will be appended.
114 **/
@@ -206,10 +151,11 @@
151 cson_value * root = NULL;
152 blob_rewind( pSrc );
153 cson_parse( &root, cson_data_src_Blob, pSrc, NULL, pInfo );
154 return root;
155 }
156
157 /*
158 ** Implements the cson_data_dest_f() interface and outputs the data to
159 ** cgi_append_content(). pState is ignored.
160 **/
161 int cson_data_dest_cgi(void * pState, void const * src, unsigned int n){
@@ -476,11 +422,11 @@
422 ** info in time (and future changes to that state may cause unexpected
423 ** results).
424 **
425 ** The result of this call are cached for future calls.
426 */
427 cson_value * json_auth_token(){
428 if( !g.json.authToken ){
429 /* Try to get an authorization token from GET parameter, POSTed
430 JSON, or fossil cookie (in that order). */
431 g.json.authToken = json_getenv(FossilJsonKeys.authToken);
432 if(g.json.authToken
@@ -859,11 +805,11 @@
805 **
806 ** In CLI mode the "path" is the list of arguments (skipping argv[0]).
807 ** In server/CGI modes the path is taken from PATH_INFO.
808 **
809 */
810 char const * json_command_arg(unsigned char ndx){
811 cson_array * ar = g.json.cmd.a;
812 assert((NULL!=ar) && "Internal error. Was json_mode_bootstrap() called?");
813 assert((g.argc>1) && "Internal error - we never should have gotten this far.");
814 if( g.json.cmd.offset < 0 ){
815 /* first-time setup. */
@@ -899,11 +845,11 @@
845 ** given property is searched for in the request payload. If found it
846 ** is returned. The returned value is owned by (or shares ownership
847 ** with) g.json, and must NOT be cson_value_free()'d by the
848 ** caller.
849 */
850 cson_value * json_payload_property( char const * key ){
851 return g.json.reqPayload.o ?
852 cson_object_get( g.json.reqPayload.o, key )
853 : NULL;
854 }
855
@@ -914,49 +860,18 @@
860 char const * json_auth_token_cstr(){
861 return cson_value_get_cstr( json_auth_token() );
862 }
863
864
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
865 /*
866 ** Returns the JsonPageDef with the given name, or NULL if no match is
867 ** found.
868 **
869 ** head must be a pointer to an array of JsonPageDefs in which the
870 ** last entry has a NULL name.
871 */
872 JsonPageDef const * json_handler_for_name( char const * name, JsonPageDef const * head ){
873 JsonPageDef const * pageDef = head;
874 assert( head != NULL );
875 if(name && *name) for( ; pageDef->name; ++pageDef ){
876 if( 0 == strcmp(name, pageDef->name) ){
877 return pageDef;
@@ -1001,22 +916,23 @@
916 static cson_value * json_julian_to_timestamp(double j){
917 return cson_value_new_integer((cson_int_t)
918 db_int64(0,"SELECT strftime('%%s',%lf)",j)
919 );
920 }
921
922 /*
923 ** Returns a timestamp value.
924 */
925 cson_int_t json_timestamp(){
926 return (cson_int_t)time(0);
927 }
928 /*
929 ** Returns a new JSON value (owned by the caller) representing
930 ** a timestamp. If timeVal is < 0 then time(0) is used to fetch
931 ** the time, else timeVal is used as-is
932 */
933 cson_value * json_new_timestamp(cson_int_t timeVal){
934 return cson_value_new_integer((timeVal<0) ? (cson_int_t)time(0) : timeVal);
935 }
936
937 /*
938 ** Creates a new Fossil/JSON response envelope skeleton. It is owned
@@ -1284,184 +1200,10 @@
1200 ADD(Zip);
1201 ADD(Private);
1202 #undef ADD
1203 return payload;
1204 }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1205
1206 /*
1207 ** Implementation of the /json/stat page/command.
1208 **
1209 */
@@ -2540,10 +2282,16 @@
2282 }
2283 db_finalize(&q);
2284 return payV;
2285 }
2286
2287 /* Impl in json_login.c. */
2288 cson_value * json_page_anon_password();
2289 /* Impl in json_login.c. */
2290 cson_value * json_page_login();
2291 /* Impl in json_login.c. */
2292 cson_value * json_page_logout();
2293
2294 /*
2295 ** Mapping of names to JSON pages/commands. Each name is a subpath of
2296 ** /json (in CGI mode) or a subcommand of the json command in CLI mode
2297 */
2298
+15 -267
--- src/json.c
+++ src/json.c
@@ -36,45 +36,13 @@
3636
#include "json.h"
3737
#include <assert.h>
3838
#include <time.h>
3939
4040
#if INTERFACE
41
-#include "cson_amalgamation.h"
4241
#include "json_detail.h" /* workaround for apparent enum limitation in makeheaders */
4342
#endif
4443
45
-/*
46
-** Signature for JSON page/command callbacks. Each callback is
47
-** responsible for handling one JSON request/command and/or
48
-** dispatching to sub-commands.
49
-**
50
-** By the time the callback is called, json_page_top() (HTTP mode) or
51
-** json_cmd_top() (CLI mode) will have set up the JSON-related
52
-** environment. Implementations may generate a "result payload" of any
53
-** JSON type by returning its value from this function (ownership is
54
-** tranferred to the caller). On error they should set
55
-** g.json.resultCode to one of the FossilJsonCodes values and return
56
-** either their payload object or NULL. Note that NULL is a legal
57
-** success value - it simply means the response will contain no
58
-** payload. If g.json.resultCode is non-zero when this function
59
-** returns then the top-level dispatcher will destroy any payload
60
-** returned by this function and will output a JSON error response
61
-** instead.
62
-**
63
-** All of the setup/response code is handled by the top dispatcher
64
-** functions and the callbacks concern themselves only with generating
65
-** the payload.
66
-**
67
-** It is imperitive that NO callback functions EVER output ANYTHING to
68
-** stdout, as that will effectively corrupt any JSON output, and
69
-** almost certainly will corrupt any HTTP response headers. Output
70
-** sent to stderr ends up in my apache log, so that might be useful
71
-** for debuggering in some cases, but so such code should be left
72
-** enabled for non-debuggering builds.
73
-*/
74
-typedef cson_value * (*fossil_json_f)();
75
-
7644
/*
7745
** Internal helpers to manipulate a byte array as a bitset. The B
7846
** argument must be-a array at least (BIT/8+1) bytes long.
7947
** The BIT argument is the bit number to query/set/clear/toggle.
8048
*/
@@ -92,34 +60,10 @@
9260
static cson_value * json_page_nyi(){
9361
g.json.resultCode = FSL_JSON_E_NYI;
9462
return NULL;
9563
}
9664
97
-/*
98
-** Holds keys used for various JSON API properties.
99
-*/
100
-static const struct FossilJsonKeys_{
101
- /** maintainers: please keep alpha sorted (case-insensitive) */
102
- char const * commandPath;
103
- char const * anonymousSeed;
104
- char const * authToken;
105
- char const * payload;
106
- char const * requestId;
107
- char const * resultCode;
108
- char const * resultText;
109
- char const * timestamp;
110
-} FossilJsonKeys = {
111
- "COMMAND_PATH" /*commandPath*/,
112
- "anonymousSeed" /*anonymousSeed*/,
113
- "authToken" /*authToken*/,
114
- "payload" /* payload */,
115
- "requestId" /*requestId*/,
116
- "resultCode" /*resultCode*/,
117
- "resultText" /*resultText*/,
118
- "timestamp" /*timestamp*/
119
-};
120
-
12165
/*
12266
** Given a FossilJsonCodes value, it returns a string suitable for use
12367
** as a resultText string. Returns some unspecified string if errCode
12468
** is not one of the FossilJsonCodes values.
12569
*/
@@ -160,10 +104,11 @@
160104
#undef C
161105
default:
162106
return "Unknown Error";
163107
}
164108
}
109
+
165110
/*
166111
** Implements the cson_data_dest_f() interface and outputs the data to
167112
** a fossil Blob object. pState must be-a initialized (Blob*), to
168113
** which n bytes of src will be appended.
169114
**/
@@ -206,10 +151,11 @@
206151
cson_value * root = NULL;
207152
blob_rewind( pSrc );
208153
cson_parse( &root, cson_data_src_Blob, pSrc, NULL, pInfo );
209154
return root;
210155
}
156
+
211157
/*
212158
** Implements the cson_data_dest_f() interface and outputs the data to
213159
** cgi_append_content(). pState is ignored.
214160
**/
215161
int cson_data_dest_cgi(void * pState, void const * src, unsigned int n){
@@ -476,11 +422,11 @@
476422
** info in time (and future changes to that state may cause unexpected
477423
** results).
478424
**
479425
** The result of this call are cached for future calls.
480426
*/
481
-static cson_value * json_auth_token(){
427
+cson_value * json_auth_token(){
482428
if( !g.json.authToken ){
483429
/* Try to get an authorization token from GET parameter, POSTed
484430
JSON, or fossil cookie (in that order). */
485431
g.json.authToken = json_getenv(FossilJsonKeys.authToken);
486432
if(g.json.authToken
@@ -859,11 +805,11 @@
859805
**
860806
** In CLI mode the "path" is the list of arguments (skipping argv[0]).
861807
** In server/CGI modes the path is taken from PATH_INFO.
862808
**
863809
*/
864
-static char const * json_command_arg(unsigned char ndx){
810
+char const * json_command_arg(unsigned char ndx){
865811
cson_array * ar = g.json.cmd.a;
866812
assert((NULL!=ar) && "Internal error. Was json_mode_bootstrap() called?");
867813
assert((g.argc>1) && "Internal error - we never should have gotten this far.");
868814
if( g.json.cmd.offset < 0 ){
869815
/* first-time setup. */
@@ -899,11 +845,11 @@
899845
** given property is searched for in the request payload. If found it
900846
** is returned. The returned value is owned by (or shares ownership
901847
** with) g.json, and must NOT be cson_value_free()'d by the
902848
** caller.
903849
*/
904
-static cson_value * json_payload_property( char const * key ){
850
+cson_value * json_payload_property( char const * key ){
905851
return g.json.reqPayload.o ?
906852
cson_object_get( g.json.reqPayload.o, key )
907853
: NULL;
908854
}
909855
@@ -914,49 +860,18 @@
914860
char const * json_auth_token_cstr(){
915861
return cson_value_get_cstr( json_auth_token() );
916862
}
917863
918864
919
-/*
920
-** Holds name-to-function mappings for JSON page/command dispatching.
921
-**
922
-*/
923
-typedef struct JsonPageDef{
924
- /*
925
- ** The commmand/page's name (path, not including leading /json/).
926
- **
927
- ** Reminder to self: we cannot use sub-paths with commands this way
928
- ** without additional string-splitting downstream. e.g. foo/bar.
929
- ** Alternately, we can create different JsonPageDef arrays for each
930
- ** subset.
931
- */
932
- char const * name;
933
- /*
934
- ** Returns a payload object for the response. If it returns a
935
- ** non-NULL value, the caller owns it. To trigger an error this
936
- ** function should set g.json.resultCode to a value from the
937
- ** FossilJsonCodes enum. If it sets an error value and returns
938
- ** a payload, the payload will be destroyed (not sent with the
939
- ** response).
940
- */
941
- fossil_json_f func;
942
- /*
943
- ** Which mode(s) of execution does func() support:
944
- **
945
- ** <0 = CLI only, >0 = HTTP only, 0==both
946
- */
947
- char runMode;
948
-} JsonPageDef;
949
-
950865
/*
951866
** Returns the JsonPageDef with the given name, or NULL if no match is
952867
** found.
953868
**
954869
** head must be a pointer to an array of JsonPageDefs in which the
955870
** last entry has a NULL name.
956871
*/
957
-static JsonPageDef const * json_handler_for_name( char const * name, JsonPageDef const * head ){
872
+JsonPageDef const * json_handler_for_name( char const * name, JsonPageDef const * head ){
958873
JsonPageDef const * pageDef = head;
959874
assert( head != NULL );
960875
if(name && *name) for( ; pageDef->name; ++pageDef ){
961876
if( 0 == strcmp(name, pageDef->name) ){
962877
return pageDef;
@@ -1001,22 +916,23 @@
1001916
static cson_value * json_julian_to_timestamp(double j){
1002917
return cson_value_new_integer((cson_int_t)
1003918
db_int64(0,"SELECT strftime('%%s',%lf)",j)
1004919
);
1005920
}
921
+
1006922
/*
1007923
** Returns a timestamp value.
1008924
*/
1009
-static cson_int_t json_timestamp(){
925
+cson_int_t json_timestamp(){
1010926
return (cson_int_t)time(0);
1011927
}
1012928
/*
1013929
** Returns a new JSON value (owned by the caller) representing
1014930
** a timestamp. If timeVal is < 0 then time(0) is used to fetch
1015931
** the time, else timeVal is used as-is
1016932
*/
1017
-static cson_value * json_new_timestamp(cson_int_t timeVal){
933
+cson_value * json_new_timestamp(cson_int_t timeVal){
1018934
return cson_value_new_integer((timeVal<0) ? (cson_int_t)time(0) : timeVal);
1019935
}
1020936
1021937
/*
1022938
** Creates a new Fossil/JSON response envelope skeleton. It is owned
@@ -1284,184 +1200,10 @@
12841200
ADD(Zip);
12851201
ADD(Private);
12861202
#undef ADD
12871203
return payload;
12881204
}
1289
-
1290
-/*
1291
-** Implementation of the /json/login page.
1292
-**
1293
-*/
1294
-cson_value * json_page_login(){
1295
- static char preciseErrors = /* if true, "complete" JSON error codes are used,
1296
- else they are "dumbed down" to a generic login
1297
- error code.
1298
- */
1299
-#if 0
1300
- g.json.errorDetailParanoia ? 0 : 1
1301
-#else
1302
- 0
1303
-#endif
1304
- ;
1305
- /*
1306
- FIXME: we want to check the GET/POST args in this order:
1307
-
1308
- - GET: name, n, password, p
1309
- - POST: name, password
1310
-
1311
- but a bug in cgi_parameter() is breaking that, causing PD() to
1312
- return the last element of the PATH_INFO instead.
1313
-
1314
- Summary: If we check for P("name") first, then P("n"),
1315
- then ONLY a GET param of "name" will match ("n"
1316
- is not recognized). If we reverse the order of the
1317
- checks then both forms work. Strangely enough, the
1318
- "p"/"password" check is not affected by this.
1319
- */
1320
- char const * name = cson_value_get_cstr(json_payload_property("name"));
1321
- char const * pw = NULL;
1322
- char const * anonSeed = NULL;
1323
- cson_value * payload = NULL;
1324
- int uid = 0;
1325
- if( !name ){
1326
- name = PD("n",NULL);
1327
- if( !name ){
1328
- name = PD("name",NULL);
1329
- if( !name ){
1330
- g.json.resultCode = preciseErrors
1331
- ? FSL_JSON_E_LOGIN_FAILED_NONAME
1332
- : FSL_JSON_E_LOGIN_FAILED;
1333
- return NULL;
1334
- }
1335
- }
1336
- }
1337
-
1338
- pw = cson_value_get_cstr(json_payload_property("password"));
1339
- if( !pw ){
1340
- pw = PD("p",NULL);
1341
- if( !pw ){
1342
- pw = PD("password",NULL);
1343
- }
1344
- }
1345
- if(!pw){
1346
- g.json.resultCode = preciseErrors
1347
- ? FSL_JSON_E_LOGIN_FAILED_NOPW
1348
- : FSL_JSON_E_LOGIN_FAILED;
1349
- return NULL;
1350
- }
1351
-
1352
- if(0 == strcmp("anonymous",name)){
1353
- /* check captcha/seed values... */
1354
- enum { SeedBufLen = 100 /* in some JSON tests i once actually got an
1355
- 80-digit number.
1356
- */
1357
- };
1358
- static char seedBuffer[SeedBufLen];
1359
- cson_value const * jseed = json_getenv(FossilJsonKeys.anonymousSeed);
1360
- seedBuffer[0] = 0;
1361
- if( !jseed ){
1362
- jseed = json_payload_property(FossilJsonKeys.anonymousSeed);
1363
- if( !jseed ){
1364
- jseed = json_getenv("cs") /* name used by HTML interface */;
1365
- }
1366
- }
1367
- if(jseed){
1368
- if( cson_value_is_number(jseed) ){
1369
- sprintf(seedBuffer, "%"CSON_INT_T_PFMT, cson_value_get_integer(jseed));
1370
- anonSeed = seedBuffer;
1371
- }else if( cson_value_is_string(jseed) ){
1372
- anonSeed = cson_string_cstr(cson_value_get_string(jseed));
1373
- }
1374
- }
1375
- if(!anonSeed){
1376
- g.json.resultCode = preciseErrors
1377
- ? FSL_JSON_E_LOGIN_FAILED_NOSEED
1378
- : FSL_JSON_E_LOGIN_FAILED;
1379
- return NULL;
1380
- }
1381
- }
1382
-
1383
-#if 0
1384
- {
1385
- /* only for debugging the PD()-incorrect-result problem */
1386
- cson_object * o = NULL;
1387
- uid = login_search_uid( name, pw );
1388
- payload = cson_value_new_object();
1389
- o = cson_value_get_object(payload);
1390
- cson_object_set( o, "n", cson_value_new_string(name,strlen(name)));
1391
- cson_object_set( o, "p", cson_value_new_string(pw,strlen(pw)));
1392
- return payload;
1393
- }
1394
-#else
1395
- uid = anonSeed
1396
- ? login_is_valid_anonymous(name, pw, anonSeed)
1397
- : login_search_uid(name, pw)
1398
- ;
1399
- if( !uid ){
1400
- g.json.resultCode = preciseErrors
1401
- ? FSL_JSON_E_LOGIN_FAILED_NOTFOUND
1402
- : FSL_JSON_E_LOGIN_FAILED;
1403
- return NULL;
1404
- }else{
1405
- char * cookie = NULL;
1406
- if(anonSeed){
1407
- login_set_anon_cookie(NULL, &cookie);
1408
- }else{
1409
- login_set_user_cookie(name, uid, &cookie);
1410
- }
1411
- payload = cookie
1412
- ? cson_value_new_string( cookie, strlen(cookie) )
1413
- : cson_value_null()/*why null instead of NULL?*/;
1414
- free(cookie);
1415
- return payload;
1416
- }
1417
-#endif
1418
-}
1419
-
1420
-/*
1421
-** Impl of /json/logout.
1422
-**
1423
-*/
1424
-cson_value * json_page_logout(){
1425
- cson_value const *token = g.json.authToken;
1426
- /* Remember that json_mode_bootstrap() replaces the login cookie
1427
- with the JSON auth token if the request contains it. If the
1428
- reqest is missing the auth token then this will fetch fossil's
1429
- original cookie. Either way, it's what we want :).
1430
-
1431
- We require the auth token to avoid someone maliciously
1432
- trying to log someone else out (not 100% sure if that
1433
- would be possible, given fossil's hardened cookie, but
1434
- i'll assume it would be for the time being).
1435
- */
1436
- ;
1437
- if(!token){
1438
- g.json.resultCode = FSL_JSON_E_MISSING_AUTH;
1439
- }else{
1440
- login_clear_login_data();
1441
- g.json.authToken = NULL /* memory is owned elsewhere.*/;
1442
- }
1443
- return NULL;
1444
-}
1445
-
1446
-/*
1447
-** Implementation of the /json/anonymousPassword page.
1448
-*/
1449
-cson_value * json_page_anon_password(){
1450
- cson_value * v = cson_value_new_object();
1451
- cson_object * o = cson_value_get_object(v);
1452
- unsigned const int seed = captcha_seed();
1453
- char const * zCaptcha = captcha_decode(seed);
1454
- cson_object_set(o, "seed",
1455
- cson_value_new_integer( (cson_int_t)seed )
1456
- );
1457
- cson_object_set(o, "password",
1458
- cson_value_new_string( zCaptcha, strlen(zCaptcha) )
1459
- );
1460
- return v;
1461
-}
1462
-
14631205
14641206
/*
14651207
** Implementation of the /json/stat page/command.
14661208
**
14671209
*/
@@ -2540,10 +2282,16 @@
25402282
}
25412283
db_finalize(&q);
25422284
return payV;
25432285
}
25442286
2287
+/* Impl in json_login.c. */
2288
+cson_value * json_page_anon_password();
2289
+/* Impl in json_login.c. */
2290
+cson_value * json_page_login();
2291
+/* Impl in json_login.c. */
2292
+cson_value * json_page_logout();
25452293
25462294
/*
25472295
** Mapping of names to JSON pages/commands. Each name is a subpath of
25482296
** /json (in CGI mode) or a subcommand of the json command in CLI mode
25492297
*/
25502298
--- src/json.c
+++ src/json.c
@@ -36,45 +36,13 @@
36 #include "json.h"
37 #include <assert.h>
38 #include <time.h>
39
40 #if INTERFACE
41 #include "cson_amalgamation.h"
42 #include "json_detail.h" /* workaround for apparent enum limitation in makeheaders */
43 #endif
44
45 /*
46 ** Signature for JSON page/command callbacks. Each callback is
47 ** responsible for handling one JSON request/command and/or
48 ** dispatching to sub-commands.
49 **
50 ** By the time the callback is called, json_page_top() (HTTP mode) or
51 ** json_cmd_top() (CLI mode) will have set up the JSON-related
52 ** environment. Implementations may generate a "result payload" of any
53 ** JSON type by returning its value from this function (ownership is
54 ** tranferred to the caller). On error they should set
55 ** g.json.resultCode to one of the FossilJsonCodes values and return
56 ** either their payload object or NULL. Note that NULL is a legal
57 ** success value - it simply means the response will contain no
58 ** payload. If g.json.resultCode is non-zero when this function
59 ** returns then the top-level dispatcher will destroy any payload
60 ** returned by this function and will output a JSON error response
61 ** instead.
62 **
63 ** All of the setup/response code is handled by the top dispatcher
64 ** functions and the callbacks concern themselves only with generating
65 ** the payload.
66 **
67 ** It is imperitive that NO callback functions EVER output ANYTHING to
68 ** stdout, as that will effectively corrupt any JSON output, and
69 ** almost certainly will corrupt any HTTP response headers. Output
70 ** sent to stderr ends up in my apache log, so that might be useful
71 ** for debuggering in some cases, but so such code should be left
72 ** enabled for non-debuggering builds.
73 */
74 typedef cson_value * (*fossil_json_f)();
75
76 /*
77 ** Internal helpers to manipulate a byte array as a bitset. The B
78 ** argument must be-a array at least (BIT/8+1) bytes long.
79 ** The BIT argument is the bit number to query/set/clear/toggle.
80 */
@@ -92,34 +60,10 @@
92 static cson_value * json_page_nyi(){
93 g.json.resultCode = FSL_JSON_E_NYI;
94 return NULL;
95 }
96
97 /*
98 ** Holds keys used for various JSON API properties.
99 */
100 static const struct FossilJsonKeys_{
101 /** maintainers: please keep alpha sorted (case-insensitive) */
102 char const * commandPath;
103 char const * anonymousSeed;
104 char const * authToken;
105 char const * payload;
106 char const * requestId;
107 char const * resultCode;
108 char const * resultText;
109 char const * timestamp;
110 } FossilJsonKeys = {
111 "COMMAND_PATH" /*commandPath*/,
112 "anonymousSeed" /*anonymousSeed*/,
113 "authToken" /*authToken*/,
114 "payload" /* payload */,
115 "requestId" /*requestId*/,
116 "resultCode" /*resultCode*/,
117 "resultText" /*resultText*/,
118 "timestamp" /*timestamp*/
119 };
120
121 /*
122 ** Given a FossilJsonCodes value, it returns a string suitable for use
123 ** as a resultText string. Returns some unspecified string if errCode
124 ** is not one of the FossilJsonCodes values.
125 */
@@ -160,10 +104,11 @@
160 #undef C
161 default:
162 return "Unknown Error";
163 }
164 }
 
165 /*
166 ** Implements the cson_data_dest_f() interface and outputs the data to
167 ** a fossil Blob object. pState must be-a initialized (Blob*), to
168 ** which n bytes of src will be appended.
169 **/
@@ -206,10 +151,11 @@
206 cson_value * root = NULL;
207 blob_rewind( pSrc );
208 cson_parse( &root, cson_data_src_Blob, pSrc, NULL, pInfo );
209 return root;
210 }
 
211 /*
212 ** Implements the cson_data_dest_f() interface and outputs the data to
213 ** cgi_append_content(). pState is ignored.
214 **/
215 int cson_data_dest_cgi(void * pState, void const * src, unsigned int n){
@@ -476,11 +422,11 @@
476 ** info in time (and future changes to that state may cause unexpected
477 ** results).
478 **
479 ** The result of this call are cached for future calls.
480 */
481 static cson_value * json_auth_token(){
482 if( !g.json.authToken ){
483 /* Try to get an authorization token from GET parameter, POSTed
484 JSON, or fossil cookie (in that order). */
485 g.json.authToken = json_getenv(FossilJsonKeys.authToken);
486 if(g.json.authToken
@@ -859,11 +805,11 @@
859 **
860 ** In CLI mode the "path" is the list of arguments (skipping argv[0]).
861 ** In server/CGI modes the path is taken from PATH_INFO.
862 **
863 */
864 static char const * json_command_arg(unsigned char ndx){
865 cson_array * ar = g.json.cmd.a;
866 assert((NULL!=ar) && "Internal error. Was json_mode_bootstrap() called?");
867 assert((g.argc>1) && "Internal error - we never should have gotten this far.");
868 if( g.json.cmd.offset < 0 ){
869 /* first-time setup. */
@@ -899,11 +845,11 @@
899 ** given property is searched for in the request payload. If found it
900 ** is returned. The returned value is owned by (or shares ownership
901 ** with) g.json, and must NOT be cson_value_free()'d by the
902 ** caller.
903 */
904 static cson_value * json_payload_property( char const * key ){
905 return g.json.reqPayload.o ?
906 cson_object_get( g.json.reqPayload.o, key )
907 : NULL;
908 }
909
@@ -914,49 +860,18 @@
914 char const * json_auth_token_cstr(){
915 return cson_value_get_cstr( json_auth_token() );
916 }
917
918
919 /*
920 ** Holds name-to-function mappings for JSON page/command dispatching.
921 **
922 */
923 typedef struct JsonPageDef{
924 /*
925 ** The commmand/page's name (path, not including leading /json/).
926 **
927 ** Reminder to self: we cannot use sub-paths with commands this way
928 ** without additional string-splitting downstream. e.g. foo/bar.
929 ** Alternately, we can create different JsonPageDef arrays for each
930 ** subset.
931 */
932 char const * name;
933 /*
934 ** Returns a payload object for the response. If it returns a
935 ** non-NULL value, the caller owns it. To trigger an error this
936 ** function should set g.json.resultCode to a value from the
937 ** FossilJsonCodes enum. If it sets an error value and returns
938 ** a payload, the payload will be destroyed (not sent with the
939 ** response).
940 */
941 fossil_json_f func;
942 /*
943 ** Which mode(s) of execution does func() support:
944 **
945 ** <0 = CLI only, >0 = HTTP only, 0==both
946 */
947 char runMode;
948 } JsonPageDef;
949
950 /*
951 ** Returns the JsonPageDef with the given name, or NULL if no match is
952 ** found.
953 **
954 ** head must be a pointer to an array of JsonPageDefs in which the
955 ** last entry has a NULL name.
956 */
957 static JsonPageDef const * json_handler_for_name( char const * name, JsonPageDef const * head ){
958 JsonPageDef const * pageDef = head;
959 assert( head != NULL );
960 if(name && *name) for( ; pageDef->name; ++pageDef ){
961 if( 0 == strcmp(name, pageDef->name) ){
962 return pageDef;
@@ -1001,22 +916,23 @@
1001 static cson_value * json_julian_to_timestamp(double j){
1002 return cson_value_new_integer((cson_int_t)
1003 db_int64(0,"SELECT strftime('%%s',%lf)",j)
1004 );
1005 }
 
1006 /*
1007 ** Returns a timestamp value.
1008 */
1009 static cson_int_t json_timestamp(){
1010 return (cson_int_t)time(0);
1011 }
1012 /*
1013 ** Returns a new JSON value (owned by the caller) representing
1014 ** a timestamp. If timeVal is < 0 then time(0) is used to fetch
1015 ** the time, else timeVal is used as-is
1016 */
1017 static cson_value * json_new_timestamp(cson_int_t timeVal){
1018 return cson_value_new_integer((timeVal<0) ? (cson_int_t)time(0) : timeVal);
1019 }
1020
1021 /*
1022 ** Creates a new Fossil/JSON response envelope skeleton. It is owned
@@ -1284,184 +1200,10 @@
1284 ADD(Zip);
1285 ADD(Private);
1286 #undef ADD
1287 return payload;
1288 }
1289
1290 /*
1291 ** Implementation of the /json/login page.
1292 **
1293 */
1294 cson_value * json_page_login(){
1295 static char preciseErrors = /* if true, "complete" JSON error codes are used,
1296 else they are "dumbed down" to a generic login
1297 error code.
1298 */
1299 #if 0
1300 g.json.errorDetailParanoia ? 0 : 1
1301 #else
1302 0
1303 #endif
1304 ;
1305 /*
1306 FIXME: we want to check the GET/POST args in this order:
1307
1308 - GET: name, n, password, p
1309 - POST: name, password
1310
1311 but a bug in cgi_parameter() is breaking that, causing PD() to
1312 return the last element of the PATH_INFO instead.
1313
1314 Summary: If we check for P("name") first, then P("n"),
1315 then ONLY a GET param of "name" will match ("n"
1316 is not recognized). If we reverse the order of the
1317 checks then both forms work. Strangely enough, the
1318 "p"/"password" check is not affected by this.
1319 */
1320 char const * name = cson_value_get_cstr(json_payload_property("name"));
1321 char const * pw = NULL;
1322 char const * anonSeed = NULL;
1323 cson_value * payload = NULL;
1324 int uid = 0;
1325 if( !name ){
1326 name = PD("n",NULL);
1327 if( !name ){
1328 name = PD("name",NULL);
1329 if( !name ){
1330 g.json.resultCode = preciseErrors
1331 ? FSL_JSON_E_LOGIN_FAILED_NONAME
1332 : FSL_JSON_E_LOGIN_FAILED;
1333 return NULL;
1334 }
1335 }
1336 }
1337
1338 pw = cson_value_get_cstr(json_payload_property("password"));
1339 if( !pw ){
1340 pw = PD("p",NULL);
1341 if( !pw ){
1342 pw = PD("password",NULL);
1343 }
1344 }
1345 if(!pw){
1346 g.json.resultCode = preciseErrors
1347 ? FSL_JSON_E_LOGIN_FAILED_NOPW
1348 : FSL_JSON_E_LOGIN_FAILED;
1349 return NULL;
1350 }
1351
1352 if(0 == strcmp("anonymous",name)){
1353 /* check captcha/seed values... */
1354 enum { SeedBufLen = 100 /* in some JSON tests i once actually got an
1355 80-digit number.
1356 */
1357 };
1358 static char seedBuffer[SeedBufLen];
1359 cson_value const * jseed = json_getenv(FossilJsonKeys.anonymousSeed);
1360 seedBuffer[0] = 0;
1361 if( !jseed ){
1362 jseed = json_payload_property(FossilJsonKeys.anonymousSeed);
1363 if( !jseed ){
1364 jseed = json_getenv("cs") /* name used by HTML interface */;
1365 }
1366 }
1367 if(jseed){
1368 if( cson_value_is_number(jseed) ){
1369 sprintf(seedBuffer, "%"CSON_INT_T_PFMT, cson_value_get_integer(jseed));
1370 anonSeed = seedBuffer;
1371 }else if( cson_value_is_string(jseed) ){
1372 anonSeed = cson_string_cstr(cson_value_get_string(jseed));
1373 }
1374 }
1375 if(!anonSeed){
1376 g.json.resultCode = preciseErrors
1377 ? FSL_JSON_E_LOGIN_FAILED_NOSEED
1378 : FSL_JSON_E_LOGIN_FAILED;
1379 return NULL;
1380 }
1381 }
1382
1383 #if 0
1384 {
1385 /* only for debugging the PD()-incorrect-result problem */
1386 cson_object * o = NULL;
1387 uid = login_search_uid( name, pw );
1388 payload = cson_value_new_object();
1389 o = cson_value_get_object(payload);
1390 cson_object_set( o, "n", cson_value_new_string(name,strlen(name)));
1391 cson_object_set( o, "p", cson_value_new_string(pw,strlen(pw)));
1392 return payload;
1393 }
1394 #else
1395 uid = anonSeed
1396 ? login_is_valid_anonymous(name, pw, anonSeed)
1397 : login_search_uid(name, pw)
1398 ;
1399 if( !uid ){
1400 g.json.resultCode = preciseErrors
1401 ? FSL_JSON_E_LOGIN_FAILED_NOTFOUND
1402 : FSL_JSON_E_LOGIN_FAILED;
1403 return NULL;
1404 }else{
1405 char * cookie = NULL;
1406 if(anonSeed){
1407 login_set_anon_cookie(NULL, &cookie);
1408 }else{
1409 login_set_user_cookie(name, uid, &cookie);
1410 }
1411 payload = cookie
1412 ? cson_value_new_string( cookie, strlen(cookie) )
1413 : cson_value_null()/*why null instead of NULL?*/;
1414 free(cookie);
1415 return payload;
1416 }
1417 #endif
1418 }
1419
1420 /*
1421 ** Impl of /json/logout.
1422 **
1423 */
1424 cson_value * json_page_logout(){
1425 cson_value const *token = g.json.authToken;
1426 /* Remember that json_mode_bootstrap() replaces the login cookie
1427 with the JSON auth token if the request contains it. If the
1428 reqest is missing the auth token then this will fetch fossil's
1429 original cookie. Either way, it's what we want :).
1430
1431 We require the auth token to avoid someone maliciously
1432 trying to log someone else out (not 100% sure if that
1433 would be possible, given fossil's hardened cookie, but
1434 i'll assume it would be for the time being).
1435 */
1436 ;
1437 if(!token){
1438 g.json.resultCode = FSL_JSON_E_MISSING_AUTH;
1439 }else{
1440 login_clear_login_data();
1441 g.json.authToken = NULL /* memory is owned elsewhere.*/;
1442 }
1443 return NULL;
1444 }
1445
1446 /*
1447 ** Implementation of the /json/anonymousPassword page.
1448 */
1449 cson_value * json_page_anon_password(){
1450 cson_value * v = cson_value_new_object();
1451 cson_object * o = cson_value_get_object(v);
1452 unsigned const int seed = captcha_seed();
1453 char const * zCaptcha = captcha_decode(seed);
1454 cson_object_set(o, "seed",
1455 cson_value_new_integer( (cson_int_t)seed )
1456 );
1457 cson_object_set(o, "password",
1458 cson_value_new_string( zCaptcha, strlen(zCaptcha) )
1459 );
1460 return v;
1461 }
1462
1463
1464 /*
1465 ** Implementation of the /json/stat page/command.
1466 **
1467 */
@@ -2540,10 +2282,16 @@
2540 }
2541 db_finalize(&q);
2542 return payV;
2543 }
2544
 
 
 
 
 
 
2545
2546 /*
2547 ** Mapping of names to JSON pages/commands. Each name is a subpath of
2548 ** /json (in CGI mode) or a subcommand of the json command in CLI mode
2549 */
2550
--- src/json.c
+++ src/json.c
@@ -36,45 +36,13 @@
36 #include "json.h"
37 #include <assert.h>
38 #include <time.h>
39
40 #if INTERFACE
 
41 #include "json_detail.h" /* workaround for apparent enum limitation in makeheaders */
42 #endif
43
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
44 /*
45 ** Internal helpers to manipulate a byte array as a bitset. The B
46 ** argument must be-a array at least (BIT/8+1) bytes long.
47 ** The BIT argument is the bit number to query/set/clear/toggle.
48 */
@@ -92,34 +60,10 @@
60 static cson_value * json_page_nyi(){
61 g.json.resultCode = FSL_JSON_E_NYI;
62 return NULL;
63 }
64
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
65 /*
66 ** Given a FossilJsonCodes value, it returns a string suitable for use
67 ** as a resultText string. Returns some unspecified string if errCode
68 ** is not one of the FossilJsonCodes values.
69 */
@@ -160,10 +104,11 @@
104 #undef C
105 default:
106 return "Unknown Error";
107 }
108 }
109
110 /*
111 ** Implements the cson_data_dest_f() interface and outputs the data to
112 ** a fossil Blob object. pState must be-a initialized (Blob*), to
113 ** which n bytes of src will be appended.
114 **/
@@ -206,10 +151,11 @@
151 cson_value * root = NULL;
152 blob_rewind( pSrc );
153 cson_parse( &root, cson_data_src_Blob, pSrc, NULL, pInfo );
154 return root;
155 }
156
157 /*
158 ** Implements the cson_data_dest_f() interface and outputs the data to
159 ** cgi_append_content(). pState is ignored.
160 **/
161 int cson_data_dest_cgi(void * pState, void const * src, unsigned int n){
@@ -476,11 +422,11 @@
422 ** info in time (and future changes to that state may cause unexpected
423 ** results).
424 **
425 ** The result of this call are cached for future calls.
426 */
427 cson_value * json_auth_token(){
428 if( !g.json.authToken ){
429 /* Try to get an authorization token from GET parameter, POSTed
430 JSON, or fossil cookie (in that order). */
431 g.json.authToken = json_getenv(FossilJsonKeys.authToken);
432 if(g.json.authToken
@@ -859,11 +805,11 @@
805 **
806 ** In CLI mode the "path" is the list of arguments (skipping argv[0]).
807 ** In server/CGI modes the path is taken from PATH_INFO.
808 **
809 */
810 char const * json_command_arg(unsigned char ndx){
811 cson_array * ar = g.json.cmd.a;
812 assert((NULL!=ar) && "Internal error. Was json_mode_bootstrap() called?");
813 assert((g.argc>1) && "Internal error - we never should have gotten this far.");
814 if( g.json.cmd.offset < 0 ){
815 /* first-time setup. */
@@ -899,11 +845,11 @@
845 ** given property is searched for in the request payload. If found it
846 ** is returned. The returned value is owned by (or shares ownership
847 ** with) g.json, and must NOT be cson_value_free()'d by the
848 ** caller.
849 */
850 cson_value * json_payload_property( char const * key ){
851 return g.json.reqPayload.o ?
852 cson_object_get( g.json.reqPayload.o, key )
853 : NULL;
854 }
855
@@ -914,49 +860,18 @@
860 char const * json_auth_token_cstr(){
861 return cson_value_get_cstr( json_auth_token() );
862 }
863
864
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
865 /*
866 ** Returns the JsonPageDef with the given name, or NULL if no match is
867 ** found.
868 **
869 ** head must be a pointer to an array of JsonPageDefs in which the
870 ** last entry has a NULL name.
871 */
872 JsonPageDef const * json_handler_for_name( char const * name, JsonPageDef const * head ){
873 JsonPageDef const * pageDef = head;
874 assert( head != NULL );
875 if(name && *name) for( ; pageDef->name; ++pageDef ){
876 if( 0 == strcmp(name, pageDef->name) ){
877 return pageDef;
@@ -1001,22 +916,23 @@
916 static cson_value * json_julian_to_timestamp(double j){
917 return cson_value_new_integer((cson_int_t)
918 db_int64(0,"SELECT strftime('%%s',%lf)",j)
919 );
920 }
921
922 /*
923 ** Returns a timestamp value.
924 */
925 cson_int_t json_timestamp(){
926 return (cson_int_t)time(0);
927 }
928 /*
929 ** Returns a new JSON value (owned by the caller) representing
930 ** a timestamp. If timeVal is < 0 then time(0) is used to fetch
931 ** the time, else timeVal is used as-is
932 */
933 cson_value * json_new_timestamp(cson_int_t timeVal){
934 return cson_value_new_integer((timeVal<0) ? (cson_int_t)time(0) : timeVal);
935 }
936
937 /*
938 ** Creates a new Fossil/JSON response envelope skeleton. It is owned
@@ -1284,184 +1200,10 @@
1200 ADD(Zip);
1201 ADD(Private);
1202 #undef ADD
1203 return payload;
1204 }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1205
1206 /*
1207 ** Implementation of the /json/stat page/command.
1208 **
1209 */
@@ -2540,10 +2282,16 @@
2282 }
2283 db_finalize(&q);
2284 return payV;
2285 }
2286
2287 /* Impl in json_login.c. */
2288 cson_value * json_page_anon_password();
2289 /* Impl in json_login.c. */
2290 cson_value * json_page_login();
2291 /* Impl in json_login.c. */
2292 cson_value * json_page_logout();
2293
2294 /*
2295 ** Mapping of names to JSON pages/commands. Each name is a subpath of
2296 ** /json (in CGI mode) or a subcommand of the json command in CLI mode
2297 */
2298
--- src/json_detail.h
+++ src/json_detail.h
@@ -1,5 +1,9 @@
1
+#if !defined(FOSSIL_JSON_DETAIL_H_INCLUDED)
2
+#define FOSSIL_JSON_DETAIL_H_INCLUDED
3
+
4
+#include "cson_amalgamation.h"
15
/*
26
** Impl details for the JSON API which need to be shared
37
** across multiple C files.
48
*/
59
@@ -59,5 +63,93 @@
5963
6064
FSL_JSON_E_DB_NEEDS_REBUILD = FSL_JSON_E_DB + 101
6165
6266
};
6367
68
+
69
+/*
70
+** Signature for JSON page/command callbacks. Each callback is
71
+** responsible for handling one JSON request/command and/or
72
+** dispatching to sub-commands.
73
+**
74
+** By the time the callback is called, json_page_top() (HTTP mode) or
75
+** json_cmd_top() (CLI mode) will have set up the JSON-related
76
+** environment. Implementations may generate a "result payload" of any
77
+** JSON type by returning its value from this function (ownership is
78
+** tranferred to the caller). On error they should set
79
+** g.json.resultCode to one of the FossilJsonCodes values and return
80
+** either their payload object or NULL. Note that NULL is a legal
81
+** success value - it simply means the response will contain no
82
+** payload. If g.json.resultCode is non-zero when this function
83
+** returns then the top-level dispatcher will destroy any payload
84
+** returned by this function and will output a JSON error response
85
+** instead.
86
+**
87
+** All of the setup/response code is handled by the top dispatcher
88
+** functions and the callbacks concern themselves only with generating
89
+** the payload.
90
+**
91
+** It is imperitive that NO callback functions EVER output ANYTHING to
92
+** stdout, as that will effectively corrupt any JSON output, and
93
+** almost certainly will corrupt any HTTP response headers. Output
94
+** sent to stderr ends up in my apache log, so that might be useful
95
+** for debuggering in some cases, but so such code should be left
96
+** enabled for non-debuggering builds.
97
+*/
98
+typedef cson_value * (*fossil_json_f)();
99
+
100
+/*
101
+** Holds name-to-function mappings for JSON page/command dispatching.
102
+**
103
+*/
104
+typedef struct JsonPageDef{
105
+ /*
106
+ ** The commmand/page's name (path, not including leading /json/).
107
+ **
108
+ ** Reminder to self: we cannot use sub-paths with commands this way
109
+ ** without additional string-splitting downstream. e.g. foo/bar.
110
+ ** Alternately, we can create different JsonPageDef arrays for each
111
+ ** subset.
112
+ */
113
+ char const * name;
114
+ /*
115
+ ** Returns a payload object for the response. If it returns a
116
+ ** non-NULL value, the caller owns it. To trigger an error this
117
+ ** function should set g.json.resultCode to a value from the
118
+ ** FossilJsonCodes enum. If it sets an error value and returns
119
+ ** a payload, the payload will be destroyed (not sent with the
120
+ ** response).
121
+ */
122
+ fossil_json_f func;
123
+ /*
124
+ ** Which mode(s) of execution does func() support:
125
+ **
126
+ ** <0 = CLI only, >0 = HTTP only, 0==both
127
+ */
128
+ char runMode;
129
+} JsonPageDef;
130
+
131
+/*
132
+** Holds common keys used for various JSON API properties.
133
+*/
134
+static const struct FossilJsonKeys_{
135
+ /** maintainers: please keep alpha sorted (case-insensitive) */
136
+ char const * anonymousSeed;
137
+ char const * authToken;
138
+ char const * commandPath;
139
+ char const * payload;
140
+ char const * requestId;
141
+ char const * resultCode;
142
+ char const * resultText;
143
+ char const * timestamp;
144
+} FossilJsonKeys = {
145
+ "anonymousSeed" /*anonymousSeed*/,
146
+ "authToken" /*authToken*/,
147
+ "COMMAND_PATH" /*commandPath*/,
148
+ "payload" /* payload */,
149
+ "requestId" /*requestId*/,
150
+ "resultCode" /*resultCode*/,
151
+ "resultText" /*resultText*/,
152
+ "timestamp" /*timestamp*/
153
+};
154
+
155
+#endif/*FOSSIL_JSON_DETAIL_H_INCLUDED*/
64156
65157
ADDED src/json_login.c
--- src/json_detail.h
+++ src/json_detail.h
@@ -1,5 +1,9 @@
 
 
 
 
1 /*
2 ** Impl details for the JSON API which need to be shared
3 ** across multiple C files.
4 */
5
@@ -59,5 +63,93 @@
59
60 FSL_JSON_E_DB_NEEDS_REBUILD = FSL_JSON_E_DB + 101
61
62 };
63
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
64
65 DDED src/json_login.c
--- src/json_detail.h
+++ src/json_detail.h
@@ -1,5 +1,9 @@
1 #if !defined(FOSSIL_JSON_DETAIL_H_INCLUDED)
2 #define FOSSIL_JSON_DETAIL_H_INCLUDED
3
4 #include "cson_amalgamation.h"
5 /*
6 ** Impl details for the JSON API which need to be shared
7 ** across multiple C files.
8 */
9
@@ -59,5 +63,93 @@
63
64 FSL_JSON_E_DB_NEEDS_REBUILD = FSL_JSON_E_DB + 101
65
66 };
67
68
69 /*
70 ** Signature for JSON page/command callbacks. Each callback is
71 ** responsible for handling one JSON request/command and/or
72 ** dispatching to sub-commands.
73 **
74 ** By the time the callback is called, json_page_top() (HTTP mode) or
75 ** json_cmd_top() (CLI mode) will have set up the JSON-related
76 ** environment. Implementations may generate a "result payload" of any
77 ** JSON type by returning its value from this function (ownership is
78 ** tranferred to the caller). On error they should set
79 ** g.json.resultCode to one of the FossilJsonCodes values and return
80 ** either their payload object or NULL. Note that NULL is a legal
81 ** success value - it simply means the response will contain no
82 ** payload. If g.json.resultCode is non-zero when this function
83 ** returns then the top-level dispatcher will destroy any payload
84 ** returned by this function and will output a JSON error response
85 ** instead.
86 **
87 ** All of the setup/response code is handled by the top dispatcher
88 ** functions and the callbacks concern themselves only with generating
89 ** the payload.
90 **
91 ** It is imperitive that NO callback functions EVER output ANYTHING to
92 ** stdout, as that will effectively corrupt any JSON output, and
93 ** almost certainly will corrupt any HTTP response headers. Output
94 ** sent to stderr ends up in my apache log, so that might be useful
95 ** for debuggering in some cases, but so such code should be left
96 ** enabled for non-debuggering builds.
97 */
98 typedef cson_value * (*fossil_json_f)();
99
100 /*
101 ** Holds name-to-function mappings for JSON page/command dispatching.
102 **
103 */
104 typedef struct JsonPageDef{
105 /*
106 ** The commmand/page's name (path, not including leading /json/).
107 **
108 ** Reminder to self: we cannot use sub-paths with commands this way
109 ** without additional string-splitting downstream. e.g. foo/bar.
110 ** Alternately, we can create different JsonPageDef arrays for each
111 ** subset.
112 */
113 char const * name;
114 /*
115 ** Returns a payload object for the response. If it returns a
116 ** non-NULL value, the caller owns it. To trigger an error this
117 ** function should set g.json.resultCode to a value from the
118 ** FossilJsonCodes enum. If it sets an error value and returns
119 ** a payload, the payload will be destroyed (not sent with the
120 ** response).
121 */
122 fossil_json_f func;
123 /*
124 ** Which mode(s) of execution does func() support:
125 **
126 ** <0 = CLI only, >0 = HTTP only, 0==both
127 */
128 char runMode;
129 } JsonPageDef;
130
131 /*
132 ** Holds common keys used for various JSON API properties.
133 */
134 static const struct FossilJsonKeys_{
135 /** maintainers: please keep alpha sorted (case-insensitive) */
136 char const * anonymousSeed;
137 char const * authToken;
138 char const * commandPath;
139 char const * payload;
140 char const * requestId;
141 char const * resultCode;
142 char const * resultText;
143 char const * timestamp;
144 } FossilJsonKeys = {
145 "anonymousSeed" /*anonymousSeed*/,
146 "authToken" /*authToken*/,
147 "COMMAND_PATH" /*commandPath*/,
148 "payload" /* payload */,
149 "requestId" /*requestId*/,
150 "resultCode" /*resultCode*/,
151 "resultText" /*resultText*/,
152 "timestamp" /*timestamp*/
153 };
154
155 #endif/*FOSSIL_JSON_DETAIL_H_INCLUDED*/
156
157 DDED src/json_login.c
--- src/json_detail.h
+++ src/json_detail.h
@@ -1,5 +1,9 @@
1
+#if !defined(FOSSIL_JSON_DETAIL_H_INCLUDED)
2
+#define FOSSIL_JSON_DETAIL_H_INCLUDED
3
+
4
+#include "cson_amalgamation.h"
15
/*
26
** Impl details for the JSON API which need to be shared
37
** across multiple C files.
48
*/
59
@@ -59,5 +63,93 @@
5963
6064
FSL_JSON_E_DB_NEEDS_REBUILD = FSL_JSON_E_DB + 101
6165
6266
};
6367
68
+
69
+/*
70
+** Signature for JSON page/command callbacks. Each callback is
71
+** responsible for handling one JSON request/command and/or
72
+** dispatching to sub-commands.
73
+**
74
+** By the time the callback is called, json_page_top() (HTTP mode) or
75
+** json_cmd_top() (CLI mode) will have set up the JSON-related
76
+** environment. Implementations may generate a "result payload" of any
77
+** JSON type by returning its value from this function (ownership is
78
+** tranferred to the caller). On error they should set
79
+** g.json.resultCode to one of the FossilJsonCodes values and return
80
+** either their payload object or NULL. Note that NULL is a legal
81
+** success value - it simply means the response will contain no
82
+** payload. If g.json.resultCode is non-zero when this function
83
+** returns then the top-level dispatcher will destroy any payload
84
+** returned by this function and will output a JSON error response
85
+** instead.
86
+**
87
+** All of the setup/response code is handled by the top dispatcher
88
+** functions and the callbacks concern themselves only with generating
89
+** the payload.
90
+**
91
+** It is imperitive that NO callback functions EVER output ANYTHING to
92
+** stdout, as that will effectively corrupt any JSON output, and
93
+** almost certainly will corrupt any HTTP response headers. Output
94
+** sent to stderr ends up in my apache log, so that might be useful
95
+** for debuggering in some cases, but so such code should be left
96
+** enabled for non-debuggering builds.
97
+*/
98
+typedef cson_value * (*fossil_json_f)();
99
+
100
+/*
101
+** Holds name-to-function mappings for JSON page/command dispatching.
102
+**
103
+*/
104
+typedef struct JsonPageDef{
105
+ /*
106
+ ** The commmand/page's name (path, not including leading /json/).
107
+ **
108
+ ** Reminder to self: we cannot use sub-paths with commands this way
109
+ ** without additional string-splitting downstream. e.g. foo/bar.
110
+ ** Alternately, we can create different JsonPageDef arrays for each
111
+ ** subset.
112
+ */
113
+ char const * name;
114
+ /*
115
+ ** Returns a payload object for the response. If it returns a
116
+ ** non-NULL value, the caller owns it. To trigger an error this
117
+ ** function should set g.json.resultCode to a value from the
118
+ ** FossilJsonCodes enum. If it sets an error value and returns
119
+ ** a payload, the payload will be destroyed (not sent with the
120
+ ** response).
121
+ */
122
+ fossil_json_f func;
123
+ /*
124
+ ** Which mode(s) of execution does func() support:
125
+ **
126
+ ** <0 = CLI only, >0 = HTTP only, 0==both
127
+ */
128
+ char runMode;
129
+} JsonPageDef;
130
+
131
+/*
132
+** Holds common keys used for various JSON API properties.
133
+*/
134
+static const struct FossilJsonKeys_{
135
+ /** maintainers: please keep alpha sorted (case-insensitive) */
136
+ char const * anonymousSeed;
137
+ char const * authToken;
138
+ char const * commandPath;
139
+ char const * payload;
140
+ char const * requestId;
141
+ char const * resultCode;
142
+ char const * resultText;
143
+ char const * timestamp;
144
+} FossilJsonKeys = {
145
+ "anonymousSeed" /*anonymousSeed*/,
146
+ "authToken" /*authToken*/,
147
+ "COMMAND_PATH" /*commandPath*/,
148
+ "payload" /* payload */,
149
+ "requestId" /*requestId*/,
150
+ "resultCode" /*resultCode*/,
151
+ "resultText" /*resultText*/,
152
+ "timestamp" /*timestamp*/
153
+};
154
+
155
+#endif/*FOSSIL_JSON_DETAIL_H_INCLUDED*/
64156
65157
ADDED src/json_login.c
--- src/json_detail.h
+++ src/json_detail.h
@@ -1,5 +1,9 @@
 
 
 
 
1 /*
2 ** Impl details for the JSON API which need to be shared
3 ** across multiple C files.
4 */
5
@@ -59,5 +63,93 @@
59
60 FSL_JSON_E_DB_NEEDS_REBUILD = FSL_JSON_E_DB + 101
61
62 };
63
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
64
65 DDED src/json_login.c
--- src/json_detail.h
+++ src/json_detail.h
@@ -1,5 +1,9 @@
1 #if !defined(FOSSIL_JSON_DETAIL_H_INCLUDED)
2 #define FOSSIL_JSON_DETAIL_H_INCLUDED
3
4 #include "cson_amalgamation.h"
5 /*
6 ** Impl details for the JSON API which need to be shared
7 ** across multiple C files.
8 */
9
@@ -59,5 +63,93 @@
63
64 FSL_JSON_E_DB_NEEDS_REBUILD = FSL_JSON_E_DB + 101
65
66 };
67
68
69 /*
70 ** Signature for JSON page/command callbacks. Each callback is
71 ** responsible for handling one JSON request/command and/or
72 ** dispatching to sub-commands.
73 **
74 ** By the time the callback is called, json_page_top() (HTTP mode) or
75 ** json_cmd_top() (CLI mode) will have set up the JSON-related
76 ** environment. Implementations may generate a "result payload" of any
77 ** JSON type by returning its value from this function (ownership is
78 ** tranferred to the caller). On error they should set
79 ** g.json.resultCode to one of the FossilJsonCodes values and return
80 ** either their payload object or NULL. Note that NULL is a legal
81 ** success value - it simply means the response will contain no
82 ** payload. If g.json.resultCode is non-zero when this function
83 ** returns then the top-level dispatcher will destroy any payload
84 ** returned by this function and will output a JSON error response
85 ** instead.
86 **
87 ** All of the setup/response code is handled by the top dispatcher
88 ** functions and the callbacks concern themselves only with generating
89 ** the payload.
90 **
91 ** It is imperitive that NO callback functions EVER output ANYTHING to
92 ** stdout, as that will effectively corrupt any JSON output, and
93 ** almost certainly will corrupt any HTTP response headers. Output
94 ** sent to stderr ends up in my apache log, so that might be useful
95 ** for debuggering in some cases, but so such code should be left
96 ** enabled for non-debuggering builds.
97 */
98 typedef cson_value * (*fossil_json_f)();
99
100 /*
101 ** Holds name-to-function mappings for JSON page/command dispatching.
102 **
103 */
104 typedef struct JsonPageDef{
105 /*
106 ** The commmand/page's name (path, not including leading /json/).
107 **
108 ** Reminder to self: we cannot use sub-paths with commands this way
109 ** without additional string-splitting downstream. e.g. foo/bar.
110 ** Alternately, we can create different JsonPageDef arrays for each
111 ** subset.
112 */
113 char const * name;
114 /*
115 ** Returns a payload object for the response. If it returns a
116 ** non-NULL value, the caller owns it. To trigger an error this
117 ** function should set g.json.resultCode to a value from the
118 ** FossilJsonCodes enum. If it sets an error value and returns
119 ** a payload, the payload will be destroyed (not sent with the
120 ** response).
121 */
122 fossil_json_f func;
123 /*
124 ** Which mode(s) of execution does func() support:
125 **
126 ** <0 = CLI only, >0 = HTTP only, 0==both
127 */
128 char runMode;
129 } JsonPageDef;
130
131 /*
132 ** Holds common keys used for various JSON API properties.
133 */
134 static const struct FossilJsonKeys_{
135 /** maintainers: please keep alpha sorted (case-insensitive) */
136 char const * anonymousSeed;
137 char const * authToken;
138 char const * commandPath;
139 char const * payload;
140 char const * requestId;
141 char const * resultCode;
142 char const * resultText;
143 char const * timestamp;
144 } FossilJsonKeys = {
145 "anonymousSeed" /*anonymousSeed*/,
146 "authToken" /*authToken*/,
147 "COMMAND_PATH" /*commandPath*/,
148 "payload" /* payload */,
149 "requestId" /*requestId*/,
150 "resultCode" /*resultCode*/,
151 "resultText" /*resultText*/,
152 "timestamp" /*timestamp*/
153 };
154
155 #endif/*FOSSIL_JSON_DETAIL_H_INCLUDED*/
156
157 DDED src/json_login.c
--- a/src/json_login.c
+++ b/src/json_login.c
@@ -0,0 +1,3 @@
1
+ static */
2
+#if 0 VERSION
3
+#if 0
--- a/src/json_login.c
+++ b/src/json_login.c
@@ -0,0 +1,3 @@
 
 
 
--- a/src/json_login.c
+++ b/src/json_login.c
@@ -0,0 +1,3 @@
1 static */
2 #if 0 VERSION
3 #if 0
--- a/src/json_login.c
+++ b/src/json_login.c
@@ -0,0 +1,3 @@
1
+ static */
2
+#if 0 VERSION
3
+#if 0
--- a/src/json_login.c
+++ b/src/json_login.c
@@ -0,0 +1,3 @@
 
 
 
--- a/src/json_login.c
+++ b/src/json_login.c
@@ -0,0 +1,3 @@
1 static */
2 #if 0 VERSION
3 #if 0
+15
--- src/main.c
+++ src/main.c
@@ -765,10 +765,25 @@
765765
aCmd[nCmd++] = aCommand[i].zName;
766766
}
767767
multi_column_list(aCmd, nCmd);
768768
}
769769
770
+
771
+/*
772
+** COMMAND: test-list-webpage
773
+**
774
+** List all web pages
775
+*/
776
+void cmd_test_webpage_list(void){
777
+ int i, nCmd;
778
+ const char *aCmd[count(aWebpage)];
779
+ for(i=nCmd=0; i<count(aWebpage); i++){
780
+ aCmd[nCmd++] = aWebpage[i].zName;
781
+ }
782
+ multi_column_list(aCmd, nCmd);
783
+}
784
+
770785
771786
/*
772787
** COMMAND: version
773788
**
774789
** Usage: %fossil version
775790
--- src/main.c
+++ src/main.c
@@ -765,10 +765,25 @@
765 aCmd[nCmd++] = aCommand[i].zName;
766 }
767 multi_column_list(aCmd, nCmd);
768 }
769
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
770
771 /*
772 ** COMMAND: version
773 **
774 ** Usage: %fossil version
775
--- src/main.c
+++ src/main.c
@@ -765,10 +765,25 @@
765 aCmd[nCmd++] = aCommand[i].zName;
766 }
767 multi_column_list(aCmd, nCmd);
768 }
769
770
771 /*
772 ** COMMAND: test-list-webpage
773 **
774 ** List all web pages
775 */
776 void cmd_test_webpage_list(void){
777 int i, nCmd;
778 const char *aCmd[count(aWebpage)];
779 for(i=nCmd=0; i<count(aWebpage); i++){
780 aCmd[nCmd++] = aWebpage[i].zName;
781 }
782 multi_column_list(aCmd, nCmd);
783 }
784
785
786 /*
787 ** COMMAND: version
788 **
789 ** Usage: %fossil version
790
+15
--- src/main.c
+++ src/main.c
@@ -765,10 +765,25 @@
765765
aCmd[nCmd++] = aCommand[i].zName;
766766
}
767767
multi_column_list(aCmd, nCmd);
768768
}
769769
770
+
771
+/*
772
+** COMMAND: test-list-webpage
773
+**
774
+** List all web pages
775
+*/
776
+void cmd_test_webpage_list(void){
777
+ int i, nCmd;
778
+ const char *aCmd[count(aWebpage)];
779
+ for(i=nCmd=0; i<count(aWebpage); i++){
780
+ aCmd[nCmd++] = aWebpage[i].zName;
781
+ }
782
+ multi_column_list(aCmd, nCmd);
783
+}
784
+
770785
771786
/*
772787
** COMMAND: version
773788
**
774789
** Usage: %fossil version
775790
--- src/main.c
+++ src/main.c
@@ -765,10 +765,25 @@
765 aCmd[nCmd++] = aCommand[i].zName;
766 }
767 multi_column_list(aCmd, nCmd);
768 }
769
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
770
771 /*
772 ** COMMAND: version
773 **
774 ** Usage: %fossil version
775
--- src/main.c
+++ src/main.c
@@ -765,10 +765,25 @@
765 aCmd[nCmd++] = aCommand[i].zName;
766 }
767 multi_column_list(aCmd, nCmd);
768 }
769
770
771 /*
772 ** COMMAND: test-list-webpage
773 **
774 ** List all web pages
775 */
776 void cmd_test_webpage_list(void){
777 int i, nCmd;
778 const char *aCmd[count(aWebpage)];
779 for(i=nCmd=0; i<count(aWebpage); i++){
780 aCmd[nCmd++] = aWebpage[i].zName;
781 }
782 multi_column_list(aCmd, nCmd);
783 }
784
785
786 /*
787 ** COMMAND: version
788 **
789 ** Usage: %fossil version
790
+12 -1
--- src/main.mk
+++ src/main.mk
@@ -48,10 +48,11 @@
4848
$(SRCDIR)/http_ssl.c \
4949
$(SRCDIR)/http_transport.c \
5050
$(SRCDIR)/import.c \
5151
$(SRCDIR)/info.c \
5252
$(SRCDIR)/json.c \
53
+ $(SRCDIR)/json_login.c \
5354
$(SRCDIR)/leaf.c \
5455
$(SRCDIR)/login.c \
5556
$(SRCDIR)/main.c \
5657
$(SRCDIR)/manifest.c \
5758
$(SRCDIR)/md5.c \
@@ -133,10 +134,11 @@
133134
$(OBJDIR)/http_ssl_.c \
134135
$(OBJDIR)/http_transport_.c \
135136
$(OBJDIR)/import_.c \
136137
$(OBJDIR)/info_.c \
137138
$(OBJDIR)/json_.c \
139
+ $(OBJDIR)/json_login_.c \
138140
$(OBJDIR)/leaf_.c \
139141
$(OBJDIR)/login_.c \
140142
$(OBJDIR)/main_.c \
141143
$(OBJDIR)/manifest_.c \
142144
$(OBJDIR)/md5_.c \
@@ -218,10 +220,11 @@
218220
$(OBJDIR)/http_ssl.o \
219221
$(OBJDIR)/http_transport.o \
220222
$(OBJDIR)/import.o \
221223
$(OBJDIR)/info.o \
222224
$(OBJDIR)/json.o \
225
+ $(OBJDIR)/json_login.o \
223226
$(OBJDIR)/leaf.o \
224227
$(OBJDIR)/login.o \
225228
$(OBJDIR)/main.o \
226229
$(OBJDIR)/manifest.o \
227230
$(OBJDIR)/md5.o \
@@ -322,13 +325,14 @@
322325
323326
324327
$(OBJDIR)/page_index.h: $(TRANS_SRC) $(OBJDIR)/mkindex
325328
$(OBJDIR)/mkindex $(TRANS_SRC) >$@
326329
$(OBJDIR)/headers: $(OBJDIR)/page_index.h $(OBJDIR)/makeheaders $(OBJDIR)/VERSION.h
327
- $(OBJDIR)/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)/json_.c:$(OBJDIR)/json.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
330
+ $(OBJDIR)/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)/json_.c:$(OBJDIR)/json.h $(OBJDIR)/json_login_.c:$(OBJDIR)/json_login.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
328331
touch $(OBJDIR)/headers
329332
$(OBJDIR)/headers: Makefile
333
+$(OBJDIR)/json.o $(OBJDIR)/json_login.o : $(SRCDIR)/json_detail.h
330334
Makefile:
331335
$(OBJDIR)/add_.c: $(SRCDIR)/add.c $(OBJDIR)/translate
332336
$(OBJDIR)/translate $(SRCDIR)/add.c >$(OBJDIR)/add_.c
333337
334338
$(OBJDIR)/add.o: $(OBJDIR)/add_.c $(OBJDIR)/add.h $(SRCDIR)/config.h
@@ -599,10 +603,17 @@
599603
600604
$(OBJDIR)/json.o: $(OBJDIR)/json_.c $(OBJDIR)/json.h $(SRCDIR)/config.h
601605
$(XTCC) -o $(OBJDIR)/json.o -c $(OBJDIR)/json_.c
602606
603607
$(OBJDIR)/json.h: $(OBJDIR)/headers
608
+$(OBJDIR)/json_login_.c: $(SRCDIR)/json_login.c $(OBJDIR)/translate
609
+ $(OBJDIR)/translate $(SRCDIR)/json_login.c >$(OBJDIR)/json_login_.c
610
+
611
+$(OBJDIR)/json_login.o: $(OBJDIR)/json_login_.c $(OBJDIR)/json_login.h $(SRCDIR)/config.h
612
+ $(XTCC) -o $(OBJDIR)/json_login.o -c $(OBJDIR)/json_login_.c
613
+
614
+$(OBJDIR)/json_login.h: $(OBJDIR)/headers
604615
$(OBJDIR)/leaf_.c: $(SRCDIR)/leaf.c $(OBJDIR)/translate
605616
$(OBJDIR)/translate $(SRCDIR)/leaf.c >$(OBJDIR)/leaf_.c
606617
607618
$(OBJDIR)/leaf.o: $(OBJDIR)/leaf_.c $(OBJDIR)/leaf.h $(SRCDIR)/config.h
608619
$(XTCC) -o $(OBJDIR)/leaf.o -c $(OBJDIR)/leaf_.c
609620
--- src/main.mk
+++ src/main.mk
@@ -48,10 +48,11 @@
48 $(SRCDIR)/http_ssl.c \
49 $(SRCDIR)/http_transport.c \
50 $(SRCDIR)/import.c \
51 $(SRCDIR)/info.c \
52 $(SRCDIR)/json.c \
 
53 $(SRCDIR)/leaf.c \
54 $(SRCDIR)/login.c \
55 $(SRCDIR)/main.c \
56 $(SRCDIR)/manifest.c \
57 $(SRCDIR)/md5.c \
@@ -133,10 +134,11 @@
133 $(OBJDIR)/http_ssl_.c \
134 $(OBJDIR)/http_transport_.c \
135 $(OBJDIR)/import_.c \
136 $(OBJDIR)/info_.c \
137 $(OBJDIR)/json_.c \
 
138 $(OBJDIR)/leaf_.c \
139 $(OBJDIR)/login_.c \
140 $(OBJDIR)/main_.c \
141 $(OBJDIR)/manifest_.c \
142 $(OBJDIR)/md5_.c \
@@ -218,10 +220,11 @@
218 $(OBJDIR)/http_ssl.o \
219 $(OBJDIR)/http_transport.o \
220 $(OBJDIR)/import.o \
221 $(OBJDIR)/info.o \
222 $(OBJDIR)/json.o \
 
223 $(OBJDIR)/leaf.o \
224 $(OBJDIR)/login.o \
225 $(OBJDIR)/main.o \
226 $(OBJDIR)/manifest.o \
227 $(OBJDIR)/md5.o \
@@ -322,13 +325,14 @@
322
323
324 $(OBJDIR)/page_index.h: $(TRANS_SRC) $(OBJDIR)/mkindex
325 $(OBJDIR)/mkindex $(TRANS_SRC) >$@
326 $(OBJDIR)/headers: $(OBJDIR)/page_index.h $(OBJDIR)/makeheaders $(OBJDIR)/VERSION.h
327 $(OBJDIR)/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)/json_.c:$(OBJDIR)/json.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
328 touch $(OBJDIR)/headers
329 $(OBJDIR)/headers: Makefile
 
330 Makefile:
331 $(OBJDIR)/add_.c: $(SRCDIR)/add.c $(OBJDIR)/translate
332 $(OBJDIR)/translate $(SRCDIR)/add.c >$(OBJDIR)/add_.c
333
334 $(OBJDIR)/add.o: $(OBJDIR)/add_.c $(OBJDIR)/add.h $(SRCDIR)/config.h
@@ -599,10 +603,17 @@
599
600 $(OBJDIR)/json.o: $(OBJDIR)/json_.c $(OBJDIR)/json.h $(SRCDIR)/config.h
601 $(XTCC) -o $(OBJDIR)/json.o -c $(OBJDIR)/json_.c
602
603 $(OBJDIR)/json.h: $(OBJDIR)/headers
 
 
 
 
 
 
 
604 $(OBJDIR)/leaf_.c: $(SRCDIR)/leaf.c $(OBJDIR)/translate
605 $(OBJDIR)/translate $(SRCDIR)/leaf.c >$(OBJDIR)/leaf_.c
606
607 $(OBJDIR)/leaf.o: $(OBJDIR)/leaf_.c $(OBJDIR)/leaf.h $(SRCDIR)/config.h
608 $(XTCC) -o $(OBJDIR)/leaf.o -c $(OBJDIR)/leaf_.c
609
--- src/main.mk
+++ src/main.mk
@@ -48,10 +48,11 @@
48 $(SRCDIR)/http_ssl.c \
49 $(SRCDIR)/http_transport.c \
50 $(SRCDIR)/import.c \
51 $(SRCDIR)/info.c \
52 $(SRCDIR)/json.c \
53 $(SRCDIR)/json_login.c \
54 $(SRCDIR)/leaf.c \
55 $(SRCDIR)/login.c \
56 $(SRCDIR)/main.c \
57 $(SRCDIR)/manifest.c \
58 $(SRCDIR)/md5.c \
@@ -133,10 +134,11 @@
134 $(OBJDIR)/http_ssl_.c \
135 $(OBJDIR)/http_transport_.c \
136 $(OBJDIR)/import_.c \
137 $(OBJDIR)/info_.c \
138 $(OBJDIR)/json_.c \
139 $(OBJDIR)/json_login_.c \
140 $(OBJDIR)/leaf_.c \
141 $(OBJDIR)/login_.c \
142 $(OBJDIR)/main_.c \
143 $(OBJDIR)/manifest_.c \
144 $(OBJDIR)/md5_.c \
@@ -218,10 +220,11 @@
220 $(OBJDIR)/http_ssl.o \
221 $(OBJDIR)/http_transport.o \
222 $(OBJDIR)/import.o \
223 $(OBJDIR)/info.o \
224 $(OBJDIR)/json.o \
225 $(OBJDIR)/json_login.o \
226 $(OBJDIR)/leaf.o \
227 $(OBJDIR)/login.o \
228 $(OBJDIR)/main.o \
229 $(OBJDIR)/manifest.o \
230 $(OBJDIR)/md5.o \
@@ -322,13 +325,14 @@
325
326
327 $(OBJDIR)/page_index.h: $(TRANS_SRC) $(OBJDIR)/mkindex
328 $(OBJDIR)/mkindex $(TRANS_SRC) >$@
329 $(OBJDIR)/headers: $(OBJDIR)/page_index.h $(OBJDIR)/makeheaders $(OBJDIR)/VERSION.h
330 $(OBJDIR)/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)/json_.c:$(OBJDIR)/json.h $(OBJDIR)/json_login_.c:$(OBJDIR)/json_login.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
331 touch $(OBJDIR)/headers
332 $(OBJDIR)/headers: Makefile
333 $(OBJDIR)/json.o $(OBJDIR)/json_login.o : $(SRCDIR)/json_detail.h
334 Makefile:
335 $(OBJDIR)/add_.c: $(SRCDIR)/add.c $(OBJDIR)/translate
336 $(OBJDIR)/translate $(SRCDIR)/add.c >$(OBJDIR)/add_.c
337
338 $(OBJDIR)/add.o: $(OBJDIR)/add_.c $(OBJDIR)/add.h $(SRCDIR)/config.h
@@ -599,10 +603,17 @@
603
604 $(OBJDIR)/json.o: $(OBJDIR)/json_.c $(OBJDIR)/json.h $(SRCDIR)/config.h
605 $(XTCC) -o $(OBJDIR)/json.o -c $(OBJDIR)/json_.c
606
607 $(OBJDIR)/json.h: $(OBJDIR)/headers
608 $(OBJDIR)/json_login_.c: $(SRCDIR)/json_login.c $(OBJDIR)/translate
609 $(OBJDIR)/translate $(SRCDIR)/json_login.c >$(OBJDIR)/json_login_.c
610
611 $(OBJDIR)/json_login.o: $(OBJDIR)/json_login_.c $(OBJDIR)/json_login.h $(SRCDIR)/config.h
612 $(XTCC) -o $(OBJDIR)/json_login.o -c $(OBJDIR)/json_login_.c
613
614 $(OBJDIR)/json_login.h: $(OBJDIR)/headers
615 $(OBJDIR)/leaf_.c: $(SRCDIR)/leaf.c $(OBJDIR)/translate
616 $(OBJDIR)/translate $(SRCDIR)/leaf.c >$(OBJDIR)/leaf_.c
617
618 $(OBJDIR)/leaf.o: $(OBJDIR)/leaf_.c $(OBJDIR)/leaf.h $(SRCDIR)/config.h
619 $(XTCC) -o $(OBJDIR)/leaf.o -c $(OBJDIR)/leaf_.c
620
+12 -1
--- src/main.mk
+++ src/main.mk
@@ -48,10 +48,11 @@
4848
$(SRCDIR)/http_ssl.c \
4949
$(SRCDIR)/http_transport.c \
5050
$(SRCDIR)/import.c \
5151
$(SRCDIR)/info.c \
5252
$(SRCDIR)/json.c \
53
+ $(SRCDIR)/json_login.c \
5354
$(SRCDIR)/leaf.c \
5455
$(SRCDIR)/login.c \
5556
$(SRCDIR)/main.c \
5657
$(SRCDIR)/manifest.c \
5758
$(SRCDIR)/md5.c \
@@ -133,10 +134,11 @@
133134
$(OBJDIR)/http_ssl_.c \
134135
$(OBJDIR)/http_transport_.c \
135136
$(OBJDIR)/import_.c \
136137
$(OBJDIR)/info_.c \
137138
$(OBJDIR)/json_.c \
139
+ $(OBJDIR)/json_login_.c \
138140
$(OBJDIR)/leaf_.c \
139141
$(OBJDIR)/login_.c \
140142
$(OBJDIR)/main_.c \
141143
$(OBJDIR)/manifest_.c \
142144
$(OBJDIR)/md5_.c \
@@ -218,10 +220,11 @@
218220
$(OBJDIR)/http_ssl.o \
219221
$(OBJDIR)/http_transport.o \
220222
$(OBJDIR)/import.o \
221223
$(OBJDIR)/info.o \
222224
$(OBJDIR)/json.o \
225
+ $(OBJDIR)/json_login.o \
223226
$(OBJDIR)/leaf.o \
224227
$(OBJDIR)/login.o \
225228
$(OBJDIR)/main.o \
226229
$(OBJDIR)/manifest.o \
227230
$(OBJDIR)/md5.o \
@@ -322,13 +325,14 @@
322325
323326
324327
$(OBJDIR)/page_index.h: $(TRANS_SRC) $(OBJDIR)/mkindex
325328
$(OBJDIR)/mkindex $(TRANS_SRC) >$@
326329
$(OBJDIR)/headers: $(OBJDIR)/page_index.h $(OBJDIR)/makeheaders $(OBJDIR)/VERSION.h
327
- $(OBJDIR)/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)/json_.c:$(OBJDIR)/json.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
330
+ $(OBJDIR)/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)/json_.c:$(OBJDIR)/json.h $(OBJDIR)/json_login_.c:$(OBJDIR)/json_login.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
328331
touch $(OBJDIR)/headers
329332
$(OBJDIR)/headers: Makefile
333
+$(OBJDIR)/json.o $(OBJDIR)/json_login.o : $(SRCDIR)/json_detail.h
330334
Makefile:
331335
$(OBJDIR)/add_.c: $(SRCDIR)/add.c $(OBJDIR)/translate
332336
$(OBJDIR)/translate $(SRCDIR)/add.c >$(OBJDIR)/add_.c
333337
334338
$(OBJDIR)/add.o: $(OBJDIR)/add_.c $(OBJDIR)/add.h $(SRCDIR)/config.h
@@ -599,10 +603,17 @@
599603
600604
$(OBJDIR)/json.o: $(OBJDIR)/json_.c $(OBJDIR)/json.h $(SRCDIR)/config.h
601605
$(XTCC) -o $(OBJDIR)/json.o -c $(OBJDIR)/json_.c
602606
603607
$(OBJDIR)/json.h: $(OBJDIR)/headers
608
+$(OBJDIR)/json_login_.c: $(SRCDIR)/json_login.c $(OBJDIR)/translate
609
+ $(OBJDIR)/translate $(SRCDIR)/json_login.c >$(OBJDIR)/json_login_.c
610
+
611
+$(OBJDIR)/json_login.o: $(OBJDIR)/json_login_.c $(OBJDIR)/json_login.h $(SRCDIR)/config.h
612
+ $(XTCC) -o $(OBJDIR)/json_login.o -c $(OBJDIR)/json_login_.c
613
+
614
+$(OBJDIR)/json_login.h: $(OBJDIR)/headers
604615
$(OBJDIR)/leaf_.c: $(SRCDIR)/leaf.c $(OBJDIR)/translate
605616
$(OBJDIR)/translate $(SRCDIR)/leaf.c >$(OBJDIR)/leaf_.c
606617
607618
$(OBJDIR)/leaf.o: $(OBJDIR)/leaf_.c $(OBJDIR)/leaf.h $(SRCDIR)/config.h
608619
$(XTCC) -o $(OBJDIR)/leaf.o -c $(OBJDIR)/leaf_.c
609620
--- src/main.mk
+++ src/main.mk
@@ -48,10 +48,11 @@
48 $(SRCDIR)/http_ssl.c \
49 $(SRCDIR)/http_transport.c \
50 $(SRCDIR)/import.c \
51 $(SRCDIR)/info.c \
52 $(SRCDIR)/json.c \
 
53 $(SRCDIR)/leaf.c \
54 $(SRCDIR)/login.c \
55 $(SRCDIR)/main.c \
56 $(SRCDIR)/manifest.c \
57 $(SRCDIR)/md5.c \
@@ -133,10 +134,11 @@
133 $(OBJDIR)/http_ssl_.c \
134 $(OBJDIR)/http_transport_.c \
135 $(OBJDIR)/import_.c \
136 $(OBJDIR)/info_.c \
137 $(OBJDIR)/json_.c \
 
138 $(OBJDIR)/leaf_.c \
139 $(OBJDIR)/login_.c \
140 $(OBJDIR)/main_.c \
141 $(OBJDIR)/manifest_.c \
142 $(OBJDIR)/md5_.c \
@@ -218,10 +220,11 @@
218 $(OBJDIR)/http_ssl.o \
219 $(OBJDIR)/http_transport.o \
220 $(OBJDIR)/import.o \
221 $(OBJDIR)/info.o \
222 $(OBJDIR)/json.o \
 
223 $(OBJDIR)/leaf.o \
224 $(OBJDIR)/login.o \
225 $(OBJDIR)/main.o \
226 $(OBJDIR)/manifest.o \
227 $(OBJDIR)/md5.o \
@@ -322,13 +325,14 @@
322
323
324 $(OBJDIR)/page_index.h: $(TRANS_SRC) $(OBJDIR)/mkindex
325 $(OBJDIR)/mkindex $(TRANS_SRC) >$@
326 $(OBJDIR)/headers: $(OBJDIR)/page_index.h $(OBJDIR)/makeheaders $(OBJDIR)/VERSION.h
327 $(OBJDIR)/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)/json_.c:$(OBJDIR)/json.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
328 touch $(OBJDIR)/headers
329 $(OBJDIR)/headers: Makefile
 
330 Makefile:
331 $(OBJDIR)/add_.c: $(SRCDIR)/add.c $(OBJDIR)/translate
332 $(OBJDIR)/translate $(SRCDIR)/add.c >$(OBJDIR)/add_.c
333
334 $(OBJDIR)/add.o: $(OBJDIR)/add_.c $(OBJDIR)/add.h $(SRCDIR)/config.h
@@ -599,10 +603,17 @@
599
600 $(OBJDIR)/json.o: $(OBJDIR)/json_.c $(OBJDIR)/json.h $(SRCDIR)/config.h
601 $(XTCC) -o $(OBJDIR)/json.o -c $(OBJDIR)/json_.c
602
603 $(OBJDIR)/json.h: $(OBJDIR)/headers
 
 
 
 
 
 
 
604 $(OBJDIR)/leaf_.c: $(SRCDIR)/leaf.c $(OBJDIR)/translate
605 $(OBJDIR)/translate $(SRCDIR)/leaf.c >$(OBJDIR)/leaf_.c
606
607 $(OBJDIR)/leaf.o: $(OBJDIR)/leaf_.c $(OBJDIR)/leaf.h $(SRCDIR)/config.h
608 $(XTCC) -o $(OBJDIR)/leaf.o -c $(OBJDIR)/leaf_.c
609
--- src/main.mk
+++ src/main.mk
@@ -48,10 +48,11 @@
48 $(SRCDIR)/http_ssl.c \
49 $(SRCDIR)/http_transport.c \
50 $(SRCDIR)/import.c \
51 $(SRCDIR)/info.c \
52 $(SRCDIR)/json.c \
53 $(SRCDIR)/json_login.c \
54 $(SRCDIR)/leaf.c \
55 $(SRCDIR)/login.c \
56 $(SRCDIR)/main.c \
57 $(SRCDIR)/manifest.c \
58 $(SRCDIR)/md5.c \
@@ -133,10 +134,11 @@
134 $(OBJDIR)/http_ssl_.c \
135 $(OBJDIR)/http_transport_.c \
136 $(OBJDIR)/import_.c \
137 $(OBJDIR)/info_.c \
138 $(OBJDIR)/json_.c \
139 $(OBJDIR)/json_login_.c \
140 $(OBJDIR)/leaf_.c \
141 $(OBJDIR)/login_.c \
142 $(OBJDIR)/main_.c \
143 $(OBJDIR)/manifest_.c \
144 $(OBJDIR)/md5_.c \
@@ -218,10 +220,11 @@
220 $(OBJDIR)/http_ssl.o \
221 $(OBJDIR)/http_transport.o \
222 $(OBJDIR)/import.o \
223 $(OBJDIR)/info.o \
224 $(OBJDIR)/json.o \
225 $(OBJDIR)/json_login.o \
226 $(OBJDIR)/leaf.o \
227 $(OBJDIR)/login.o \
228 $(OBJDIR)/main.o \
229 $(OBJDIR)/manifest.o \
230 $(OBJDIR)/md5.o \
@@ -322,13 +325,14 @@
325
326
327 $(OBJDIR)/page_index.h: $(TRANS_SRC) $(OBJDIR)/mkindex
328 $(OBJDIR)/mkindex $(TRANS_SRC) >$@
329 $(OBJDIR)/headers: $(OBJDIR)/page_index.h $(OBJDIR)/makeheaders $(OBJDIR)/VERSION.h
330 $(OBJDIR)/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)/json_.c:$(OBJDIR)/json.h $(OBJDIR)/json_login_.c:$(OBJDIR)/json_login.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
331 touch $(OBJDIR)/headers
332 $(OBJDIR)/headers: Makefile
333 $(OBJDIR)/json.o $(OBJDIR)/json_login.o : $(SRCDIR)/json_detail.h
334 Makefile:
335 $(OBJDIR)/add_.c: $(SRCDIR)/add.c $(OBJDIR)/translate
336 $(OBJDIR)/translate $(SRCDIR)/add.c >$(OBJDIR)/add_.c
337
338 $(OBJDIR)/add.o: $(OBJDIR)/add_.c $(OBJDIR)/add.h $(SRCDIR)/config.h
@@ -599,10 +603,17 @@
603
604 $(OBJDIR)/json.o: $(OBJDIR)/json_.c $(OBJDIR)/json.h $(SRCDIR)/config.h
605 $(XTCC) -o $(OBJDIR)/json.o -c $(OBJDIR)/json_.c
606
607 $(OBJDIR)/json.h: $(OBJDIR)/headers
608 $(OBJDIR)/json_login_.c: $(SRCDIR)/json_login.c $(OBJDIR)/translate
609 $(OBJDIR)/translate $(SRCDIR)/json_login.c >$(OBJDIR)/json_login_.c
610
611 $(OBJDIR)/json_login.o: $(OBJDIR)/json_login_.c $(OBJDIR)/json_login.h $(SRCDIR)/config.h
612 $(XTCC) -o $(OBJDIR)/json_login.o -c $(OBJDIR)/json_login_.c
613
614 $(OBJDIR)/json_login.h: $(OBJDIR)/headers
615 $(OBJDIR)/leaf_.c: $(SRCDIR)/leaf.c $(OBJDIR)/translate
616 $(OBJDIR)/translate $(SRCDIR)/leaf.c >$(OBJDIR)/leaf_.c
617
618 $(OBJDIR)/leaf.o: $(OBJDIR)/leaf_.c $(OBJDIR)/leaf.h $(SRCDIR)/config.h
619 $(XTCC) -o $(OBJDIR)/leaf.o -c $(OBJDIR)/leaf_.c
620
--- src/makemake.tcl
+++ src/makemake.tcl
@@ -54,10 +54,11 @@
5454
http_socket
5555
http_transport
5656
import
5757
info
5858
json
59
+ json_login
5960
leaf
6061
login
6162
main
6263
manifest
6364
md5
@@ -235,10 +236,11 @@
235236
writeln "\t\$(OBJDIR)/mkindex \$(TRANS_SRC) >$@"
236237
writeln "\$(OBJDIR)/headers:\t\$(OBJDIR)/page_index.h \$(OBJDIR)/makeheaders \$(OBJDIR)/VERSION.h"
237238
writeln "\t\$(OBJDIR)/makeheaders $mhargs"
238239
writeln "\ttouch \$(OBJDIR)/headers"
239240
writeln "\$(OBJDIR)/headers: Makefile"
241
+writeln "\$(OBJDIR)/json.o \$(OBJDIR)/json_login.o : \$(SRCDIR)/json_detail.h"
240242
writeln "Makefile:"
241243
set extra_h(main) \$(OBJDIR)/page_index.h
242244
243245
foreach s [lsort $src] {
244246
writeln "\$(OBJDIR)/${s}_.c:\t\$(SRCDIR)/$s.c \$(OBJDIR)/translate"
@@ -478,10 +480,11 @@
478480
writeln "\t\$(XTCC) $opt -c \$(SRCDIR)/sqlite3.c -o \$(OBJDIR)/sqlite3.o\n"
479481
480482
set opt {}
481483
writeln "\$(OBJDIR)/cson_amalgamation.o:\t\$(SRCDIR)/cson_amalgamation.c"
482484
writeln "\t\$(XTCC) $opt -c \$(SRCDIR)/cson_amalgamation.c -o \$(OBJDIR)/cson_amalgamation.o\n"
485
+writeln "\$(OBJDIR)/json.o \$(OBJDIR)/json_login.o : \$(SRCDIR)/json_detail.h"
483486
484487
writeln "\$(OBJDIR)/shell.o:\t\$(SRCDIR)/shell.c \$(SRCDIR)/sqlite3.h"
485488
set opt {-Dmain=sqlite3_shell}
486489
append opt " -DSQLITE_OMIT_LOAD_EXTENSION=1"
487490
writeln "\t\$(XTCC) $opt -c \$(SRCDIR)/shell.c -o \$(OBJDIR)/shell.o\n"
@@ -607,10 +610,13 @@
607610
-del *.obj *_.c *.h *.map
608611
609612
realclean:
610613
-del $(APPNAME) translate$E mkindex$E makeheaders$E mkversion$E
611614
615
+$(OBJDIR)\json$O : $(SRCDIR)\json_detail.h
616
+$(OBJDIR)\json_login$O : $(SRCDIR)\json_detail.h
617
+
612618
}
613619
foreach s [lsort $src] {
614620
writeln "\$(OBJDIR)\\$s\$O : ${s}_.c ${s}.h"
615621
writeln "\t\$(TCC) -o\$@ -c ${s}_.c\n"
616622
writeln "${s}_.c : \$(SRCDIR)\\$s.c"
@@ -747,10 +753,13 @@
747753
-del headers linkopts
748754
749755
realclean:
750756
-del $(APPNAME) translate$E mkindex$E makeheaders$E mkversion$E
751757
758
+$(OBJDIR)\json$O : $(SRCDIR)\json_detail.h
759
+$(OBJDIR)\json_login$O : $(SRCDIR)\json_detail.h
760
+
752761
}
753762
foreach s [lsort $src] {
754763
writeln "\$(OX)\\$s\$O : ${s}_.c ${s}.h"
755764
writeln "\t\$(TCC) /Fo\$@ -c ${s}_.c\n"
756765
writeln "${s}_.c : \$(SRCDIR)\\$s.c"
757766
--- src/makemake.tcl
+++ src/makemake.tcl
@@ -54,10 +54,11 @@
54 http_socket
55 http_transport
56 import
57 info
58 json
 
59 leaf
60 login
61 main
62 manifest
63 md5
@@ -235,10 +236,11 @@
235 writeln "\t\$(OBJDIR)/mkindex \$(TRANS_SRC) >$@"
236 writeln "\$(OBJDIR)/headers:\t\$(OBJDIR)/page_index.h \$(OBJDIR)/makeheaders \$(OBJDIR)/VERSION.h"
237 writeln "\t\$(OBJDIR)/makeheaders $mhargs"
238 writeln "\ttouch \$(OBJDIR)/headers"
239 writeln "\$(OBJDIR)/headers: Makefile"
 
240 writeln "Makefile:"
241 set extra_h(main) \$(OBJDIR)/page_index.h
242
243 foreach s [lsort $src] {
244 writeln "\$(OBJDIR)/${s}_.c:\t\$(SRCDIR)/$s.c \$(OBJDIR)/translate"
@@ -478,10 +480,11 @@
478 writeln "\t\$(XTCC) $opt -c \$(SRCDIR)/sqlite3.c -o \$(OBJDIR)/sqlite3.o\n"
479
480 set opt {}
481 writeln "\$(OBJDIR)/cson_amalgamation.o:\t\$(SRCDIR)/cson_amalgamation.c"
482 writeln "\t\$(XTCC) $opt -c \$(SRCDIR)/cson_amalgamation.c -o \$(OBJDIR)/cson_amalgamation.o\n"
 
483
484 writeln "\$(OBJDIR)/shell.o:\t\$(SRCDIR)/shell.c \$(SRCDIR)/sqlite3.h"
485 set opt {-Dmain=sqlite3_shell}
486 append opt " -DSQLITE_OMIT_LOAD_EXTENSION=1"
487 writeln "\t\$(XTCC) $opt -c \$(SRCDIR)/shell.c -o \$(OBJDIR)/shell.o\n"
@@ -607,10 +610,13 @@
607 -del *.obj *_.c *.h *.map
608
609 realclean:
610 -del $(APPNAME) translate$E mkindex$E makeheaders$E mkversion$E
611
 
 
 
612 }
613 foreach s [lsort $src] {
614 writeln "\$(OBJDIR)\\$s\$O : ${s}_.c ${s}.h"
615 writeln "\t\$(TCC) -o\$@ -c ${s}_.c\n"
616 writeln "${s}_.c : \$(SRCDIR)\\$s.c"
@@ -747,10 +753,13 @@
747 -del headers linkopts
748
749 realclean:
750 -del $(APPNAME) translate$E mkindex$E makeheaders$E mkversion$E
751
 
 
 
752 }
753 foreach s [lsort $src] {
754 writeln "\$(OX)\\$s\$O : ${s}_.c ${s}.h"
755 writeln "\t\$(TCC) /Fo\$@ -c ${s}_.c\n"
756 writeln "${s}_.c : \$(SRCDIR)\\$s.c"
757
--- src/makemake.tcl
+++ src/makemake.tcl
@@ -54,10 +54,11 @@
54 http_socket
55 http_transport
56 import
57 info
58 json
59 json_login
60 leaf
61 login
62 main
63 manifest
64 md5
@@ -235,10 +236,11 @@
236 writeln "\t\$(OBJDIR)/mkindex \$(TRANS_SRC) >$@"
237 writeln "\$(OBJDIR)/headers:\t\$(OBJDIR)/page_index.h \$(OBJDIR)/makeheaders \$(OBJDIR)/VERSION.h"
238 writeln "\t\$(OBJDIR)/makeheaders $mhargs"
239 writeln "\ttouch \$(OBJDIR)/headers"
240 writeln "\$(OBJDIR)/headers: Makefile"
241 writeln "\$(OBJDIR)/json.o \$(OBJDIR)/json_login.o : \$(SRCDIR)/json_detail.h"
242 writeln "Makefile:"
243 set extra_h(main) \$(OBJDIR)/page_index.h
244
245 foreach s [lsort $src] {
246 writeln "\$(OBJDIR)/${s}_.c:\t\$(SRCDIR)/$s.c \$(OBJDIR)/translate"
@@ -478,10 +480,11 @@
480 writeln "\t\$(XTCC) $opt -c \$(SRCDIR)/sqlite3.c -o \$(OBJDIR)/sqlite3.o\n"
481
482 set opt {}
483 writeln "\$(OBJDIR)/cson_amalgamation.o:\t\$(SRCDIR)/cson_amalgamation.c"
484 writeln "\t\$(XTCC) $opt -c \$(SRCDIR)/cson_amalgamation.c -o \$(OBJDIR)/cson_amalgamation.o\n"
485 writeln "\$(OBJDIR)/json.o \$(OBJDIR)/json_login.o : \$(SRCDIR)/json_detail.h"
486
487 writeln "\$(OBJDIR)/shell.o:\t\$(SRCDIR)/shell.c \$(SRCDIR)/sqlite3.h"
488 set opt {-Dmain=sqlite3_shell}
489 append opt " -DSQLITE_OMIT_LOAD_EXTENSION=1"
490 writeln "\t\$(XTCC) $opt -c \$(SRCDIR)/shell.c -o \$(OBJDIR)/shell.o\n"
@@ -607,10 +610,13 @@
610 -del *.obj *_.c *.h *.map
611
612 realclean:
613 -del $(APPNAME) translate$E mkindex$E makeheaders$E mkversion$E
614
615 $(OBJDIR)\json$O : $(SRCDIR)\json_detail.h
616 $(OBJDIR)\json_login$O : $(SRCDIR)\json_detail.h
617
618 }
619 foreach s [lsort $src] {
620 writeln "\$(OBJDIR)\\$s\$O : ${s}_.c ${s}.h"
621 writeln "\t\$(TCC) -o\$@ -c ${s}_.c\n"
622 writeln "${s}_.c : \$(SRCDIR)\\$s.c"
@@ -747,10 +753,13 @@
753 -del headers linkopts
754
755 realclean:
756 -del $(APPNAME) translate$E mkindex$E makeheaders$E mkversion$E
757
758 $(OBJDIR)\json$O : $(SRCDIR)\json_detail.h
759 $(OBJDIR)\json_login$O : $(SRCDIR)\json_detail.h
760
761 }
762 foreach s [lsort $src] {
763 writeln "\$(OX)\\$s\$O : ${s}_.c ${s}.h"
764 writeln "\t\$(TCC) /Fo\$@ -c ${s}_.c\n"
765 writeln "${s}_.c : \$(SRCDIR)\\$s.c"
766
--- src/makemake.tcl
+++ src/makemake.tcl
@@ -54,10 +54,11 @@
5454
http_socket
5555
http_transport
5656
import
5757
info
5858
json
59
+ json_login
5960
leaf
6061
login
6162
main
6263
manifest
6364
md5
@@ -235,10 +236,11 @@
235236
writeln "\t\$(OBJDIR)/mkindex \$(TRANS_SRC) >$@"
236237
writeln "\$(OBJDIR)/headers:\t\$(OBJDIR)/page_index.h \$(OBJDIR)/makeheaders \$(OBJDIR)/VERSION.h"
237238
writeln "\t\$(OBJDIR)/makeheaders $mhargs"
238239
writeln "\ttouch \$(OBJDIR)/headers"
239240
writeln "\$(OBJDIR)/headers: Makefile"
241
+writeln "\$(OBJDIR)/json.o \$(OBJDIR)/json_login.o : \$(SRCDIR)/json_detail.h"
240242
writeln "Makefile:"
241243
set extra_h(main) \$(OBJDIR)/page_index.h
242244
243245
foreach s [lsort $src] {
244246
writeln "\$(OBJDIR)/${s}_.c:\t\$(SRCDIR)/$s.c \$(OBJDIR)/translate"
@@ -478,10 +480,11 @@
478480
writeln "\t\$(XTCC) $opt -c \$(SRCDIR)/sqlite3.c -o \$(OBJDIR)/sqlite3.o\n"
479481
480482
set opt {}
481483
writeln "\$(OBJDIR)/cson_amalgamation.o:\t\$(SRCDIR)/cson_amalgamation.c"
482484
writeln "\t\$(XTCC) $opt -c \$(SRCDIR)/cson_amalgamation.c -o \$(OBJDIR)/cson_amalgamation.o\n"
485
+writeln "\$(OBJDIR)/json.o \$(OBJDIR)/json_login.o : \$(SRCDIR)/json_detail.h"
483486
484487
writeln "\$(OBJDIR)/shell.o:\t\$(SRCDIR)/shell.c \$(SRCDIR)/sqlite3.h"
485488
set opt {-Dmain=sqlite3_shell}
486489
append opt " -DSQLITE_OMIT_LOAD_EXTENSION=1"
487490
writeln "\t\$(XTCC) $opt -c \$(SRCDIR)/shell.c -o \$(OBJDIR)/shell.o\n"
@@ -607,10 +610,13 @@
607610
-del *.obj *_.c *.h *.map
608611
609612
realclean:
610613
-del $(APPNAME) translate$E mkindex$E makeheaders$E mkversion$E
611614
615
+$(OBJDIR)\json$O : $(SRCDIR)\json_detail.h
616
+$(OBJDIR)\json_login$O : $(SRCDIR)\json_detail.h
617
+
612618
}
613619
foreach s [lsort $src] {
614620
writeln "\$(OBJDIR)\\$s\$O : ${s}_.c ${s}.h"
615621
writeln "\t\$(TCC) -o\$@ -c ${s}_.c\n"
616622
writeln "${s}_.c : \$(SRCDIR)\\$s.c"
@@ -747,10 +753,13 @@
747753
-del headers linkopts
748754
749755
realclean:
750756
-del $(APPNAME) translate$E mkindex$E makeheaders$E mkversion$E
751757
758
+$(OBJDIR)\json$O : $(SRCDIR)\json_detail.h
759
+$(OBJDIR)\json_login$O : $(SRCDIR)\json_detail.h
760
+
752761
}
753762
foreach s [lsort $src] {
754763
writeln "\$(OX)\\$s\$O : ${s}_.c ${s}.h"
755764
writeln "\t\$(TCC) /Fo\$@ -c ${s}_.c\n"
756765
writeln "${s}_.c : \$(SRCDIR)\\$s.c"
757766
--- src/makemake.tcl
+++ src/makemake.tcl
@@ -54,10 +54,11 @@
54 http_socket
55 http_transport
56 import
57 info
58 json
 
59 leaf
60 login
61 main
62 manifest
63 md5
@@ -235,10 +236,11 @@
235 writeln "\t\$(OBJDIR)/mkindex \$(TRANS_SRC) >$@"
236 writeln "\$(OBJDIR)/headers:\t\$(OBJDIR)/page_index.h \$(OBJDIR)/makeheaders \$(OBJDIR)/VERSION.h"
237 writeln "\t\$(OBJDIR)/makeheaders $mhargs"
238 writeln "\ttouch \$(OBJDIR)/headers"
239 writeln "\$(OBJDIR)/headers: Makefile"
 
240 writeln "Makefile:"
241 set extra_h(main) \$(OBJDIR)/page_index.h
242
243 foreach s [lsort $src] {
244 writeln "\$(OBJDIR)/${s}_.c:\t\$(SRCDIR)/$s.c \$(OBJDIR)/translate"
@@ -478,10 +480,11 @@
478 writeln "\t\$(XTCC) $opt -c \$(SRCDIR)/sqlite3.c -o \$(OBJDIR)/sqlite3.o\n"
479
480 set opt {}
481 writeln "\$(OBJDIR)/cson_amalgamation.o:\t\$(SRCDIR)/cson_amalgamation.c"
482 writeln "\t\$(XTCC) $opt -c \$(SRCDIR)/cson_amalgamation.c -o \$(OBJDIR)/cson_amalgamation.o\n"
 
483
484 writeln "\$(OBJDIR)/shell.o:\t\$(SRCDIR)/shell.c \$(SRCDIR)/sqlite3.h"
485 set opt {-Dmain=sqlite3_shell}
486 append opt " -DSQLITE_OMIT_LOAD_EXTENSION=1"
487 writeln "\t\$(XTCC) $opt -c \$(SRCDIR)/shell.c -o \$(OBJDIR)/shell.o\n"
@@ -607,10 +610,13 @@
607 -del *.obj *_.c *.h *.map
608
609 realclean:
610 -del $(APPNAME) translate$E mkindex$E makeheaders$E mkversion$E
611
 
 
 
612 }
613 foreach s [lsort $src] {
614 writeln "\$(OBJDIR)\\$s\$O : ${s}_.c ${s}.h"
615 writeln "\t\$(TCC) -o\$@ -c ${s}_.c\n"
616 writeln "${s}_.c : \$(SRCDIR)\\$s.c"
@@ -747,10 +753,13 @@
747 -del headers linkopts
748
749 realclean:
750 -del $(APPNAME) translate$E mkindex$E makeheaders$E mkversion$E
751
 
 
 
752 }
753 foreach s [lsort $src] {
754 writeln "\$(OX)\\$s\$O : ${s}_.c ${s}.h"
755 writeln "\t\$(TCC) /Fo\$@ -c ${s}_.c\n"
756 writeln "${s}_.c : \$(SRCDIR)\\$s.c"
757
--- src/makemake.tcl
+++ src/makemake.tcl
@@ -54,10 +54,11 @@
54 http_socket
55 http_transport
56 import
57 info
58 json
59 json_login
60 leaf
61 login
62 main
63 manifest
64 md5
@@ -235,10 +236,11 @@
236 writeln "\t\$(OBJDIR)/mkindex \$(TRANS_SRC) >$@"
237 writeln "\$(OBJDIR)/headers:\t\$(OBJDIR)/page_index.h \$(OBJDIR)/makeheaders \$(OBJDIR)/VERSION.h"
238 writeln "\t\$(OBJDIR)/makeheaders $mhargs"
239 writeln "\ttouch \$(OBJDIR)/headers"
240 writeln "\$(OBJDIR)/headers: Makefile"
241 writeln "\$(OBJDIR)/json.o \$(OBJDIR)/json_login.o : \$(SRCDIR)/json_detail.h"
242 writeln "Makefile:"
243 set extra_h(main) \$(OBJDIR)/page_index.h
244
245 foreach s [lsort $src] {
246 writeln "\$(OBJDIR)/${s}_.c:\t\$(SRCDIR)/$s.c \$(OBJDIR)/translate"
@@ -478,10 +480,11 @@
480 writeln "\t\$(XTCC) $opt -c \$(SRCDIR)/sqlite3.c -o \$(OBJDIR)/sqlite3.o\n"
481
482 set opt {}
483 writeln "\$(OBJDIR)/cson_amalgamation.o:\t\$(SRCDIR)/cson_amalgamation.c"
484 writeln "\t\$(XTCC) $opt -c \$(SRCDIR)/cson_amalgamation.c -o \$(OBJDIR)/cson_amalgamation.o\n"
485 writeln "\$(OBJDIR)/json.o \$(OBJDIR)/json_login.o : \$(SRCDIR)/json_detail.h"
486
487 writeln "\$(OBJDIR)/shell.o:\t\$(SRCDIR)/shell.c \$(SRCDIR)/sqlite3.h"
488 set opt {-Dmain=sqlite3_shell}
489 append opt " -DSQLITE_OMIT_LOAD_EXTENSION=1"
490 writeln "\t\$(XTCC) $opt -c \$(SRCDIR)/shell.c -o \$(OBJDIR)/shell.o\n"
@@ -607,10 +610,13 @@
610 -del *.obj *_.c *.h *.map
611
612 realclean:
613 -del $(APPNAME) translate$E mkindex$E makeheaders$E mkversion$E
614
615 $(OBJDIR)\json$O : $(SRCDIR)\json_detail.h
616 $(OBJDIR)\json_login$O : $(SRCDIR)\json_detail.h
617
618 }
619 foreach s [lsort $src] {
620 writeln "\$(OBJDIR)\\$s\$O : ${s}_.c ${s}.h"
621 writeln "\t\$(TCC) -o\$@ -c ${s}_.c\n"
622 writeln "${s}_.c : \$(SRCDIR)\\$s.c"
@@ -747,10 +753,13 @@
753 -del headers linkopts
754
755 realclean:
756 -del $(APPNAME) translate$E mkindex$E makeheaders$E mkversion$E
757
758 $(OBJDIR)\json$O : $(SRCDIR)\json_detail.h
759 $(OBJDIR)\json_login$O : $(SRCDIR)\json_detail.h
760
761 }
762 foreach s [lsort $src] {
763 writeln "\$(OX)\\$s\$O : ${s}_.c ${s}.h"
764 writeln "\t\$(TCC) /Fo\$@ -c ${s}_.c\n"
765 writeln "${s}_.c : \$(SRCDIR)\\$s.c"
766
+13 -4
--- win/Makefile.dmc
+++ win/Makefile.dmc
@@ -22,13 +22,13 @@
2222
TCC = $(DMDIR)\bin\dmc $(CFLAGS) $(DMCDEF) $(SSL) $(INCL)
2323
LIBS = $(DMDIR)\extra\lib\ zlib wsock32
2424
2525
SQLITE_OPTIONS = -DSQLITE_OMIT_LOAD_EXTENSION=1 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_STAT3 -Dlocaltime=fossil_localtime -DSQLITE_ENABLE_LOCKING_STYLE=0
2626
27
-SRC = add_.c allrepo_.c attach_.c bag_.c bisect_.c blob_.c branch_.c browse_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c db_.c delta_.c deltacmd_.c descendants_.c diff_.c diffcmd_.c doc_.c encode_.c event_.c export_.c file_.c finfo_.c glob_.c graph_.c gzip_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c json_.c leaf_.c login_.c main_.c manifest_.c md5_.c merge_.c merge3_.c name_.c path_.c pivot_.c popen_.c pqueue_.c printf_.c rebuild_.c report_.c rss_.c schema_.c search_.c setup_.c sha1_.c shun_.c skins_.c sqlcmd_.c stash_.c stat_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c update_.c url_.c user_.c verify_.c vfile_.c wiki_.c wikiformat_.c winhttp_.c xfer_.c zip_.c
27
+SRC = add_.c allrepo_.c attach_.c bag_.c bisect_.c blob_.c branch_.c browse_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c db_.c delta_.c deltacmd_.c descendants_.c diff_.c diffcmd_.c doc_.c encode_.c event_.c export_.c file_.c finfo_.c glob_.c graph_.c gzip_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c json_.c json_login_.c leaf_.c login_.c main_.c manifest_.c md5_.c merge_.c merge3_.c name_.c path_.c pivot_.c popen_.c pqueue_.c printf_.c rebuild_.c report_.c rss_.c schema_.c search_.c setup_.c sha1_.c shun_.c skins_.c sqlcmd_.c stash_.c stat_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c update_.c url_.c user_.c verify_.c vfile_.c wiki_.c wikiformat_.c winhttp_.c xfer_.c zip_.c
2828
29
-OBJ = $(OBJDIR)\add$O $(OBJDIR)\allrepo$O $(OBJDIR)\attach$O $(OBJDIR)\bag$O $(OBJDIR)\bisect$O $(OBJDIR)\blob$O $(OBJDIR)\branch$O $(OBJDIR)\browse$O $(OBJDIR)\captcha$O $(OBJDIR)\cgi$O $(OBJDIR)\checkin$O $(OBJDIR)\checkout$O $(OBJDIR)\clearsign$O $(OBJDIR)\clone$O $(OBJDIR)\comformat$O $(OBJDIR)\configure$O $(OBJDIR)\content$O $(OBJDIR)\db$O $(OBJDIR)\delta$O $(OBJDIR)\deltacmd$O $(OBJDIR)\descendants$O $(OBJDIR)\diff$O $(OBJDIR)\diffcmd$O $(OBJDIR)\doc$O $(OBJDIR)\encode$O $(OBJDIR)\event$O $(OBJDIR)\export$O $(OBJDIR)\file$O $(OBJDIR)\finfo$O $(OBJDIR)\glob$O $(OBJDIR)\graph$O $(OBJDIR)\gzip$O $(OBJDIR)\http$O $(OBJDIR)\http_socket$O $(OBJDIR)\http_ssl$O $(OBJDIR)\http_transport$O $(OBJDIR)\import$O $(OBJDIR)\info$O $(OBJDIR)\json$O $(OBJDIR)\leaf$O $(OBJDIR)\login$O $(OBJDIR)\main$O $(OBJDIR)\manifest$O $(OBJDIR)\md5$O $(OBJDIR)\merge$O $(OBJDIR)\merge3$O $(OBJDIR)\name$O $(OBJDIR)\path$O $(OBJDIR)\pivot$O $(OBJDIR)\popen$O $(OBJDIR)\pqueue$O $(OBJDIR)\printf$O $(OBJDIR)\rebuild$O $(OBJDIR)\report$O $(OBJDIR)\rss$O $(OBJDIR)\schema$O $(OBJDIR)\search$O $(OBJDIR)\setup$O $(OBJDIR)\sha1$O $(OBJDIR)\shun$O $(OBJDIR)\skins$O $(OBJDIR)\sqlcmd$O $(OBJDIR)\stash$O $(OBJDIR)\stat$O $(OBJDIR)\style$O $(OBJDIR)\sync$O $(OBJDIR)\tag$O $(OBJDIR)\tar$O $(OBJDIR)\th_main$O $(OBJDIR)\timeline$O $(OBJDIR)\tkt$O $(OBJDIR)\tktsetup$O $(OBJDIR)\undo$O $(OBJDIR)\update$O $(OBJDIR)\url$O $(OBJDIR)\user$O $(OBJDIR)\verify$O $(OBJDIR)\vfile$O $(OBJDIR)\wiki$O $(OBJDIR)\wikiformat$O $(OBJDIR)\winhttp$O $(OBJDIR)\xfer$O $(OBJDIR)\zip$O $(OBJDIR)\shell$O $(OBJDIR)\sqlite3$O $(OBJDIR)\th$O $(OBJDIR)\th_lang$O
29
+OBJ = $(OBJDIR)\add$O $(OBJDIR)\allrepo$O $(OBJDIR)\attach$O $(OBJDIR)\bag$O $(OBJDIR)\bisect$O $(OBJDIR)\blob$O $(OBJDIR)\branch$O $(OBJDIR)\browse$O $(OBJDIR)\captcha$O $(OBJDIR)\cgi$O $(OBJDIR)\checkin$O $(OBJDIR)\checkout$O $(OBJDIR)\clearsign$O $(OBJDIR)\clone$O $(OBJDIR)\comformat$O $(OBJDIR)\configure$O $(OBJDIR)\content$O $(OBJDIR)\db$O $(OBJDIR)\delta$O $(OBJDIR)\deltacmd$O $(OBJDIR)\descendants$O $(OBJDIR)\diff$O $(OBJDIR)\diffcmd$O $(OBJDIR)\doc$O $(OBJDIR)\encode$O $(OBJDIR)\event$O $(OBJDIR)\export$O $(OBJDIR)\file$O $(OBJDIR)\finfo$O $(OBJDIR)\glob$O $(OBJDIR)\graph$O $(OBJDIR)\gzip$O $(OBJDIR)\http$O $(OBJDIR)\http_socket$O $(OBJDIR)\http_ssl$O $(OBJDIR)\http_transport$O $(OBJDIR)\import$O $(OBJDIR)\info$O $(OBJDIR)\json$O $(OBJDIR)\json_login$O $(OBJDIR)\leaf$O $(OBJDIR)\login$O $(OBJDIR)\main$O $(OBJDIR)\manifest$O $(OBJDIR)\md5$O $(OBJDIR)\merge$O $(OBJDIR)\merge3$O $(OBJDIR)\name$O $(OBJDIR)\path$O $(OBJDIR)\pivot$O $(OBJDIR)\popen$O $(OBJDIR)\pqueue$O $(OBJDIR)\printf$O $(OBJDIR)\rebuild$O $(OBJDIR)\report$O $(OBJDIR)\rss$O $(OBJDIR)\schema$O $(OBJDIR)\search$O $(OBJDIR)\setup$O $(OBJDIR)\sha1$O $(OBJDIR)\shun$O $(OBJDIR)\skins$O $(OBJDIR)\sqlcmd$O $(OBJDIR)\stash$O $(OBJDIR)\stat$O $(OBJDIR)\style$O $(OBJDIR)\sync$O $(OBJDIR)\tag$O $(OBJDIR)\tar$O $(OBJDIR)\th_main$O $(OBJDIR)\timeline$O $(OBJDIR)\tkt$O $(OBJDIR)\tktsetup$O $(OBJDIR)\undo$O $(OBJDIR)\update$O $(OBJDIR)\url$O $(OBJDIR)\user$O $(OBJDIR)\verify$O $(OBJDIR)\vfile$O $(OBJDIR)\wiki$O $(OBJDIR)\wikiformat$O $(OBJDIR)\winhttp$O $(OBJDIR)\xfer$O $(OBJDIR)\zip$O $(OBJDIR)\shell$O $(OBJDIR)\sqlite3$O $(OBJDIR)\th$O $(OBJDIR)\th_lang$O
3030
3131
3232
RC=$(DMDIR)\bin\rcc
3333
RCFLAGS=-32 -w1 -I$(SRCDIR) /D__DMC__
3434
@@ -42,11 +42,11 @@
4242
4343
$(OBJDIR)\fossil.res: $B\win\fossil.rc
4444
$(RC) $(RCFLAGS) -o$@ $**
4545
4646
$(OBJDIR)\link: $B\win\Makefile.dmc $(OBJDIR)\fossil.res
47
- +echo add allrepo attach bag bisect blob branch browse captcha cgi checkin checkout clearsign clone comformat configure content db delta deltacmd descendants diff diffcmd doc encode event export file finfo glob graph gzip http http_socket http_ssl http_transport import info json leaf login main manifest md5 merge merge3 name path pivot popen pqueue printf rebuild report rss schema search setup sha1 shun skins sqlcmd stash stat style sync tag tar th_main timeline tkt tktsetup undo update url user verify vfile wiki wikiformat winhttp xfer zip shell sqlite3 th th_lang > $@
47
+ +echo add allrepo attach bag bisect blob branch browse captcha cgi checkin checkout clearsign clone comformat configure content db delta deltacmd descendants diff diffcmd doc encode event export file finfo glob graph gzip http http_socket http_ssl http_transport import info json json_login leaf login main manifest md5 merge merge3 name path pivot popen pqueue printf rebuild report rss schema search setup sha1 shun skins sqlcmd stash stat style sync tag tar th_main timeline tkt tktsetup undo update url user verify vfile wiki wikiformat winhttp xfer zip shell sqlite3 th th_lang > $@
4848
+echo fossil >> $@
4949
+echo fossil >> $@
5050
+echo $(LIBS) >> $@
5151
+echo. >> $@
5252
+echo fossil >> $@
@@ -89,10 +89,13 @@
8989
-del *.obj *_.c *.h *.map
9090
9191
realclean:
9292
-del $(APPNAME) translate$E mkindex$E makeheaders$E mkversion$E
9393
94
+$(OBJDIR)\json$O : $(SRCDIR)\json_detail.h
95
+$(OBJDIR)\json_login$O : $(SRCDIR)\json_detail.h
96
+
9497
9598
$(OBJDIR)\add$O : add_.c add.h
9699
$(TCC) -o$@ -c add_.c
97100
98101
add_.c : $(SRCDIR)\add.c
@@ -323,10 +326,16 @@
323326
$(OBJDIR)\json$O : json_.c json.h
324327
$(TCC) -o$@ -c json_.c
325328
326329
json_.c : $(SRCDIR)\json.c
327330
+translate$E $** > $@
331
+
332
+$(OBJDIR)\json_login$O : json_login_.c json_login.h
333
+ $(TCC) -o$@ -c json_login_.c
334
+
335
+json_login_.c : $(SRCDIR)\json_login.c
336
+ +translate$E $** > $@
328337
329338
$(OBJDIR)\leaf$O : leaf_.c leaf.h
330339
$(TCC) -o$@ -c leaf_.c
331340
332341
leaf_.c : $(SRCDIR)\leaf.c
@@ -589,7 +598,7 @@
589598
590599
zip_.c : $(SRCDIR)\zip.c
591600
+translate$E $** > $@
592601
593602
headers: makeheaders$E page_index.h VERSION.h
594
- +makeheaders$E add_.c:add.h allrepo_.c:allrepo.h attach_.c:attach.h bag_.c:bag.h bisect_.c:bisect.h blob_.c:blob.h branch_.c:branch.h browse_.c:browse.h captcha_.c:captcha.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h configure_.c:configure.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendants_.c:descendants.h diff_.c:diff.h diffcmd_.c:diffcmd.h doc_.c:doc.h encode_.c:encode.h event_.c:event.h export_.c:export.h file_.c:file.h finfo_.c:finfo.h glob_.c:glob.h graph_.c:graph.h gzip_.c:gzip.h http_.c:http.h http_socket_.c:http_socket.h http_ssl_.c:http_ssl.h http_transport_.c:http_transport.h import_.c:import.h info_.c:info.h json_.c:json.h leaf_.c:leaf.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h path_.c:path.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h setup_.c:setup.h sha1_.c:sha1.h shun_.c:shun.h skins_.c:skins.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h style_.c:style.h sync_.c:sync.h tag_.c:tag.h tar_.c:tar.h th_main_.c:th_main.h timeline_.c:timeline.h tkt_.c:tkt.h tktsetup_.c:tktsetup.h undo_.c:undo.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h winhttp_.c:winhttp.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)\sqlite3.h $(SRCDIR)\th.h VERSION.h $(SRCDIR)\cson_amalgamation.h
603
+ +makeheaders$E add_.c:add.h allrepo_.c:allrepo.h attach_.c:attach.h bag_.c:bag.h bisect_.c:bisect.h blob_.c:blob.h branch_.c:branch.h browse_.c:browse.h captcha_.c:captcha.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h configure_.c:configure.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendants_.c:descendants.h diff_.c:diff.h diffcmd_.c:diffcmd.h doc_.c:doc.h encode_.c:encode.h event_.c:event.h export_.c:export.h file_.c:file.h finfo_.c:finfo.h glob_.c:glob.h graph_.c:graph.h gzip_.c:gzip.h http_.c:http.h http_socket_.c:http_socket.h http_ssl_.c:http_ssl.h http_transport_.c:http_transport.h import_.c:import.h info_.c:info.h json_.c:json.h json_login_.c:json_login.h leaf_.c:leaf.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h path_.c:path.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h setup_.c:setup.h sha1_.c:sha1.h shun_.c:shun.h skins_.c:skins.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h style_.c:style.h sync_.c:sync.h tag_.c:tag.h tar_.c:tar.h th_main_.c:th_main.h timeline_.c:timeline.h tkt_.c:tkt.h tktsetup_.c:tktsetup.h undo_.c:undo.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h winhttp_.c:winhttp.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)\sqlite3.h $(SRCDIR)\th.h VERSION.h $(SRCDIR)\cson_amalgamation.h
595604
@copy /Y nul: headers
596605
--- win/Makefile.dmc
+++ win/Makefile.dmc
@@ -22,13 +22,13 @@
22 TCC = $(DMDIR)\bin\dmc $(CFLAGS) $(DMCDEF) $(SSL) $(INCL)
23 LIBS = $(DMDIR)\extra\lib\ zlib wsock32
24
25 SQLITE_OPTIONS = -DSQLITE_OMIT_LOAD_EXTENSION=1 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_STAT3 -Dlocaltime=fossil_localtime -DSQLITE_ENABLE_LOCKING_STYLE=0
26
27 SRC = add_.c allrepo_.c attach_.c bag_.c bisect_.c blob_.c branch_.c browse_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c db_.c delta_.c deltacmd_.c descendants_.c diff_.c diffcmd_.c doc_.c encode_.c event_.c export_.c file_.c finfo_.c glob_.c graph_.c gzip_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c json_.c leaf_.c login_.c main_.c manifest_.c md5_.c merge_.c merge3_.c name_.c path_.c pivot_.c popen_.c pqueue_.c printf_.c rebuild_.c report_.c rss_.c schema_.c search_.c setup_.c sha1_.c shun_.c skins_.c sqlcmd_.c stash_.c stat_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c update_.c url_.c user_.c verify_.c vfile_.c wiki_.c wikiformat_.c winhttp_.c xfer_.c zip_.c
28
29 OBJ = $(OBJDIR)\add$O $(OBJDIR)\allrepo$O $(OBJDIR)\attach$O $(OBJDIR)\bag$O $(OBJDIR)\bisect$O $(OBJDIR)\blob$O $(OBJDIR)\branch$O $(OBJDIR)\browse$O $(OBJDIR)\captcha$O $(OBJDIR)\cgi$O $(OBJDIR)\checkin$O $(OBJDIR)\checkout$O $(OBJDIR)\clearsign$O $(OBJDIR)\clone$O $(OBJDIR)\comformat$O $(OBJDIR)\configure$O $(OBJDIR)\content$O $(OBJDIR)\db$O $(OBJDIR)\delta$O $(OBJDIR)\deltacmd$O $(OBJDIR)\descendants$O $(OBJDIR)\diff$O $(OBJDIR)\diffcmd$O $(OBJDIR)\doc$O $(OBJDIR)\encode$O $(OBJDIR)\event$O $(OBJDIR)\export$O $(OBJDIR)\file$O $(OBJDIR)\finfo$O $(OBJDIR)\glob$O $(OBJDIR)\graph$O $(OBJDIR)\gzip$O $(OBJDIR)\http$O $(OBJDIR)\http_socket$O $(OBJDIR)\http_ssl$O $(OBJDIR)\http_transport$O $(OBJDIR)\import$O $(OBJDIR)\info$O $(OBJDIR)\json$O $(OBJDIR)\leaf$O $(OBJDIR)\login$O $(OBJDIR)\main$O $(OBJDIR)\manifest$O $(OBJDIR)\md5$O $(OBJDIR)\merge$O $(OBJDIR)\merge3$O $(OBJDIR)\name$O $(OBJDIR)\path$O $(OBJDIR)\pivot$O $(OBJDIR)\popen$O $(OBJDIR)\pqueue$O $(OBJDIR)\printf$O $(OBJDIR)\rebuild$O $(OBJDIR)\report$O $(OBJDIR)\rss$O $(OBJDIR)\schema$O $(OBJDIR)\search$O $(OBJDIR)\setup$O $(OBJDIR)\sha1$O $(OBJDIR)\shun$O $(OBJDIR)\skins$O $(OBJDIR)\sqlcmd$O $(OBJDIR)\stash$O $(OBJDIR)\stat$O $(OBJDIR)\style$O $(OBJDIR)\sync$O $(OBJDIR)\tag$O $(OBJDIR)\tar$O $(OBJDIR)\th_main$O $(OBJDIR)\timeline$O $(OBJDIR)\tkt$O $(OBJDIR)\tktsetup$O $(OBJDIR)\undo$O $(OBJDIR)\update$O $(OBJDIR)\url$O $(OBJDIR)\user$O $(OBJDIR)\verify$O $(OBJDIR)\vfile$O $(OBJDIR)\wiki$O $(OBJDIR)\wikiformat$O $(OBJDIR)\winhttp$O $(OBJDIR)\xfer$O $(OBJDIR)\zip$O $(OBJDIR)\shell$O $(OBJDIR)\sqlite3$O $(OBJDIR)\th$O $(OBJDIR)\th_lang$O
30
31
32 RC=$(DMDIR)\bin\rcc
33 RCFLAGS=-32 -w1 -I$(SRCDIR) /D__DMC__
34
@@ -42,11 +42,11 @@
42
43 $(OBJDIR)\fossil.res: $B\win\fossil.rc
44 $(RC) $(RCFLAGS) -o$@ $**
45
46 $(OBJDIR)\link: $B\win\Makefile.dmc $(OBJDIR)\fossil.res
47 +echo add allrepo attach bag bisect blob branch browse captcha cgi checkin checkout clearsign clone comformat configure content db delta deltacmd descendants diff diffcmd doc encode event export file finfo glob graph gzip http http_socket http_ssl http_transport import info json leaf login main manifest md5 merge merge3 name path pivot popen pqueue printf rebuild report rss schema search setup sha1 shun skins sqlcmd stash stat style sync tag tar th_main timeline tkt tktsetup undo update url user verify vfile wiki wikiformat winhttp xfer zip shell sqlite3 th th_lang > $@
48 +echo fossil >> $@
49 +echo fossil >> $@
50 +echo $(LIBS) >> $@
51 +echo. >> $@
52 +echo fossil >> $@
@@ -89,10 +89,13 @@
89 -del *.obj *_.c *.h *.map
90
91 realclean:
92 -del $(APPNAME) translate$E mkindex$E makeheaders$E mkversion$E
93
 
 
 
94
95 $(OBJDIR)\add$O : add_.c add.h
96 $(TCC) -o$@ -c add_.c
97
98 add_.c : $(SRCDIR)\add.c
@@ -323,10 +326,16 @@
323 $(OBJDIR)\json$O : json_.c json.h
324 $(TCC) -o$@ -c json_.c
325
326 json_.c : $(SRCDIR)\json.c
327 +translate$E $** > $@
 
 
 
 
 
 
328
329 $(OBJDIR)\leaf$O : leaf_.c leaf.h
330 $(TCC) -o$@ -c leaf_.c
331
332 leaf_.c : $(SRCDIR)\leaf.c
@@ -589,7 +598,7 @@
589
590 zip_.c : $(SRCDIR)\zip.c
591 +translate$E $** > $@
592
593 headers: makeheaders$E page_index.h VERSION.h
594 +makeheaders$E add_.c:add.h allrepo_.c:allrepo.h attach_.c:attach.h bag_.c:bag.h bisect_.c:bisect.h blob_.c:blob.h branch_.c:branch.h browse_.c:browse.h captcha_.c:captcha.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h configure_.c:configure.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendants_.c:descendants.h diff_.c:diff.h diffcmd_.c:diffcmd.h doc_.c:doc.h encode_.c:encode.h event_.c:event.h export_.c:export.h file_.c:file.h finfo_.c:finfo.h glob_.c:glob.h graph_.c:graph.h gzip_.c:gzip.h http_.c:http.h http_socket_.c:http_socket.h http_ssl_.c:http_ssl.h http_transport_.c:http_transport.h import_.c:import.h info_.c:info.h json_.c:json.h leaf_.c:leaf.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h path_.c:path.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h setup_.c:setup.h sha1_.c:sha1.h shun_.c:shun.h skins_.c:skins.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h style_.c:style.h sync_.c:sync.h tag_.c:tag.h tar_.c:tar.h th_main_.c:th_main.h timeline_.c:timeline.h tkt_.c:tkt.h tktsetup_.c:tktsetup.h undo_.c:undo.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h winhttp_.c:winhttp.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)\sqlite3.h $(SRCDIR)\th.h VERSION.h $(SRCDIR)\cson_amalgamation.h
595 @copy /Y nul: headers
596
--- win/Makefile.dmc
+++ win/Makefile.dmc
@@ -22,13 +22,13 @@
22 TCC = $(DMDIR)\bin\dmc $(CFLAGS) $(DMCDEF) $(SSL) $(INCL)
23 LIBS = $(DMDIR)\extra\lib\ zlib wsock32
24
25 SQLITE_OPTIONS = -DSQLITE_OMIT_LOAD_EXTENSION=1 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_STAT3 -Dlocaltime=fossil_localtime -DSQLITE_ENABLE_LOCKING_STYLE=0
26
27 SRC = add_.c allrepo_.c attach_.c bag_.c bisect_.c blob_.c branch_.c browse_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c db_.c delta_.c deltacmd_.c descendants_.c diff_.c diffcmd_.c doc_.c encode_.c event_.c export_.c file_.c finfo_.c glob_.c graph_.c gzip_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c json_.c json_login_.c leaf_.c login_.c main_.c manifest_.c md5_.c merge_.c merge3_.c name_.c path_.c pivot_.c popen_.c pqueue_.c printf_.c rebuild_.c report_.c rss_.c schema_.c search_.c setup_.c sha1_.c shun_.c skins_.c sqlcmd_.c stash_.c stat_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c update_.c url_.c user_.c verify_.c vfile_.c wiki_.c wikiformat_.c winhttp_.c xfer_.c zip_.c
28
29 OBJ = $(OBJDIR)\add$O $(OBJDIR)\allrepo$O $(OBJDIR)\attach$O $(OBJDIR)\bag$O $(OBJDIR)\bisect$O $(OBJDIR)\blob$O $(OBJDIR)\branch$O $(OBJDIR)\browse$O $(OBJDIR)\captcha$O $(OBJDIR)\cgi$O $(OBJDIR)\checkin$O $(OBJDIR)\checkout$O $(OBJDIR)\clearsign$O $(OBJDIR)\clone$O $(OBJDIR)\comformat$O $(OBJDIR)\configure$O $(OBJDIR)\content$O $(OBJDIR)\db$O $(OBJDIR)\delta$O $(OBJDIR)\deltacmd$O $(OBJDIR)\descendants$O $(OBJDIR)\diff$O $(OBJDIR)\diffcmd$O $(OBJDIR)\doc$O $(OBJDIR)\encode$O $(OBJDIR)\event$O $(OBJDIR)\export$O $(OBJDIR)\file$O $(OBJDIR)\finfo$O $(OBJDIR)\glob$O $(OBJDIR)\graph$O $(OBJDIR)\gzip$O $(OBJDIR)\http$O $(OBJDIR)\http_socket$O $(OBJDIR)\http_ssl$O $(OBJDIR)\http_transport$O $(OBJDIR)\import$O $(OBJDIR)\info$O $(OBJDIR)\json$O $(OBJDIR)\json_login$O $(OBJDIR)\leaf$O $(OBJDIR)\login$O $(OBJDIR)\main$O $(OBJDIR)\manifest$O $(OBJDIR)\md5$O $(OBJDIR)\merge$O $(OBJDIR)\merge3$O $(OBJDIR)\name$O $(OBJDIR)\path$O $(OBJDIR)\pivot$O $(OBJDIR)\popen$O $(OBJDIR)\pqueue$O $(OBJDIR)\printf$O $(OBJDIR)\rebuild$O $(OBJDIR)\report$O $(OBJDIR)\rss$O $(OBJDIR)\schema$O $(OBJDIR)\search$O $(OBJDIR)\setup$O $(OBJDIR)\sha1$O $(OBJDIR)\shun$O $(OBJDIR)\skins$O $(OBJDIR)\sqlcmd$O $(OBJDIR)\stash$O $(OBJDIR)\stat$O $(OBJDIR)\style$O $(OBJDIR)\sync$O $(OBJDIR)\tag$O $(OBJDIR)\tar$O $(OBJDIR)\th_main$O $(OBJDIR)\timeline$O $(OBJDIR)\tkt$O $(OBJDIR)\tktsetup$O $(OBJDIR)\undo$O $(OBJDIR)\update$O $(OBJDIR)\url$O $(OBJDIR)\user$O $(OBJDIR)\verify$O $(OBJDIR)\vfile$O $(OBJDIR)\wiki$O $(OBJDIR)\wikiformat$O $(OBJDIR)\winhttp$O $(OBJDIR)\xfer$O $(OBJDIR)\zip$O $(OBJDIR)\shell$O $(OBJDIR)\sqlite3$O $(OBJDIR)\th$O $(OBJDIR)\th_lang$O
30
31
32 RC=$(DMDIR)\bin\rcc
33 RCFLAGS=-32 -w1 -I$(SRCDIR) /D__DMC__
34
@@ -42,11 +42,11 @@
42
43 $(OBJDIR)\fossil.res: $B\win\fossil.rc
44 $(RC) $(RCFLAGS) -o$@ $**
45
46 $(OBJDIR)\link: $B\win\Makefile.dmc $(OBJDIR)\fossil.res
47 +echo add allrepo attach bag bisect blob branch browse captcha cgi checkin checkout clearsign clone comformat configure content db delta deltacmd descendants diff diffcmd doc encode event export file finfo glob graph gzip http http_socket http_ssl http_transport import info json json_login leaf login main manifest md5 merge merge3 name path pivot popen pqueue printf rebuild report rss schema search setup sha1 shun skins sqlcmd stash stat style sync tag tar th_main timeline tkt tktsetup undo update url user verify vfile wiki wikiformat winhttp xfer zip shell sqlite3 th th_lang > $@
48 +echo fossil >> $@
49 +echo fossil >> $@
50 +echo $(LIBS) >> $@
51 +echo. >> $@
52 +echo fossil >> $@
@@ -89,10 +89,13 @@
89 -del *.obj *_.c *.h *.map
90
91 realclean:
92 -del $(APPNAME) translate$E mkindex$E makeheaders$E mkversion$E
93
94 $(OBJDIR)\json$O : $(SRCDIR)\json_detail.h
95 $(OBJDIR)\json_login$O : $(SRCDIR)\json_detail.h
96
97
98 $(OBJDIR)\add$O : add_.c add.h
99 $(TCC) -o$@ -c add_.c
100
101 add_.c : $(SRCDIR)\add.c
@@ -323,10 +326,16 @@
326 $(OBJDIR)\json$O : json_.c json.h
327 $(TCC) -o$@ -c json_.c
328
329 json_.c : $(SRCDIR)\json.c
330 +translate$E $** > $@
331
332 $(OBJDIR)\json_login$O : json_login_.c json_login.h
333 $(TCC) -o$@ -c json_login_.c
334
335 json_login_.c : $(SRCDIR)\json_login.c
336 +translate$E $** > $@
337
338 $(OBJDIR)\leaf$O : leaf_.c leaf.h
339 $(TCC) -o$@ -c leaf_.c
340
341 leaf_.c : $(SRCDIR)\leaf.c
@@ -589,7 +598,7 @@
598
599 zip_.c : $(SRCDIR)\zip.c
600 +translate$E $** > $@
601
602 headers: makeheaders$E page_index.h VERSION.h
603 +makeheaders$E add_.c:add.h allrepo_.c:allrepo.h attach_.c:attach.h bag_.c:bag.h bisect_.c:bisect.h blob_.c:blob.h branch_.c:branch.h browse_.c:browse.h captcha_.c:captcha.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h configure_.c:configure.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendants_.c:descendants.h diff_.c:diff.h diffcmd_.c:diffcmd.h doc_.c:doc.h encode_.c:encode.h event_.c:event.h export_.c:export.h file_.c:file.h finfo_.c:finfo.h glob_.c:glob.h graph_.c:graph.h gzip_.c:gzip.h http_.c:http.h http_socket_.c:http_socket.h http_ssl_.c:http_ssl.h http_transport_.c:http_transport.h import_.c:import.h info_.c:info.h json_.c:json.h json_login_.c:json_login.h leaf_.c:leaf.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h path_.c:path.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h setup_.c:setup.h sha1_.c:sha1.h shun_.c:shun.h skins_.c:skins.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h style_.c:style.h sync_.c:sync.h tag_.c:tag.h tar_.c:tar.h th_main_.c:th_main.h timeline_.c:timeline.h tkt_.c:tkt.h tktsetup_.c:tktsetup.h undo_.c:undo.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h winhttp_.c:winhttp.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)\sqlite3.h $(SRCDIR)\th.h VERSION.h $(SRCDIR)\cson_amalgamation.h
604 @copy /Y nul: headers
605
+13 -4
--- win/Makefile.dmc
+++ win/Makefile.dmc
@@ -22,13 +22,13 @@
2222
TCC = $(DMDIR)\bin\dmc $(CFLAGS) $(DMCDEF) $(SSL) $(INCL)
2323
LIBS = $(DMDIR)\extra\lib\ zlib wsock32
2424
2525
SQLITE_OPTIONS = -DSQLITE_OMIT_LOAD_EXTENSION=1 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_STAT3 -Dlocaltime=fossil_localtime -DSQLITE_ENABLE_LOCKING_STYLE=0
2626
27
-SRC = add_.c allrepo_.c attach_.c bag_.c bisect_.c blob_.c branch_.c browse_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c db_.c delta_.c deltacmd_.c descendants_.c diff_.c diffcmd_.c doc_.c encode_.c event_.c export_.c file_.c finfo_.c glob_.c graph_.c gzip_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c json_.c leaf_.c login_.c main_.c manifest_.c md5_.c merge_.c merge3_.c name_.c path_.c pivot_.c popen_.c pqueue_.c printf_.c rebuild_.c report_.c rss_.c schema_.c search_.c setup_.c sha1_.c shun_.c skins_.c sqlcmd_.c stash_.c stat_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c update_.c url_.c user_.c verify_.c vfile_.c wiki_.c wikiformat_.c winhttp_.c xfer_.c zip_.c
27
+SRC = add_.c allrepo_.c attach_.c bag_.c bisect_.c blob_.c branch_.c browse_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c db_.c delta_.c deltacmd_.c descendants_.c diff_.c diffcmd_.c doc_.c encode_.c event_.c export_.c file_.c finfo_.c glob_.c graph_.c gzip_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c json_.c json_login_.c leaf_.c login_.c main_.c manifest_.c md5_.c merge_.c merge3_.c name_.c path_.c pivot_.c popen_.c pqueue_.c printf_.c rebuild_.c report_.c rss_.c schema_.c search_.c setup_.c sha1_.c shun_.c skins_.c sqlcmd_.c stash_.c stat_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c update_.c url_.c user_.c verify_.c vfile_.c wiki_.c wikiformat_.c winhttp_.c xfer_.c zip_.c
2828
29
-OBJ = $(OBJDIR)\add$O $(OBJDIR)\allrepo$O $(OBJDIR)\attach$O $(OBJDIR)\bag$O $(OBJDIR)\bisect$O $(OBJDIR)\blob$O $(OBJDIR)\branch$O $(OBJDIR)\browse$O $(OBJDIR)\captcha$O $(OBJDIR)\cgi$O $(OBJDIR)\checkin$O $(OBJDIR)\checkout$O $(OBJDIR)\clearsign$O $(OBJDIR)\clone$O $(OBJDIR)\comformat$O $(OBJDIR)\configure$O $(OBJDIR)\content$O $(OBJDIR)\db$O $(OBJDIR)\delta$O $(OBJDIR)\deltacmd$O $(OBJDIR)\descendants$O $(OBJDIR)\diff$O $(OBJDIR)\diffcmd$O $(OBJDIR)\doc$O $(OBJDIR)\encode$O $(OBJDIR)\event$O $(OBJDIR)\export$O $(OBJDIR)\file$O $(OBJDIR)\finfo$O $(OBJDIR)\glob$O $(OBJDIR)\graph$O $(OBJDIR)\gzip$O $(OBJDIR)\http$O $(OBJDIR)\http_socket$O $(OBJDIR)\http_ssl$O $(OBJDIR)\http_transport$O $(OBJDIR)\import$O $(OBJDIR)\info$O $(OBJDIR)\json$O $(OBJDIR)\leaf$O $(OBJDIR)\login$O $(OBJDIR)\main$O $(OBJDIR)\manifest$O $(OBJDIR)\md5$O $(OBJDIR)\merge$O $(OBJDIR)\merge3$O $(OBJDIR)\name$O $(OBJDIR)\path$O $(OBJDIR)\pivot$O $(OBJDIR)\popen$O $(OBJDIR)\pqueue$O $(OBJDIR)\printf$O $(OBJDIR)\rebuild$O $(OBJDIR)\report$O $(OBJDIR)\rss$O $(OBJDIR)\schema$O $(OBJDIR)\search$O $(OBJDIR)\setup$O $(OBJDIR)\sha1$O $(OBJDIR)\shun$O $(OBJDIR)\skins$O $(OBJDIR)\sqlcmd$O $(OBJDIR)\stash$O $(OBJDIR)\stat$O $(OBJDIR)\style$O $(OBJDIR)\sync$O $(OBJDIR)\tag$O $(OBJDIR)\tar$O $(OBJDIR)\th_main$O $(OBJDIR)\timeline$O $(OBJDIR)\tkt$O $(OBJDIR)\tktsetup$O $(OBJDIR)\undo$O $(OBJDIR)\update$O $(OBJDIR)\url$O $(OBJDIR)\user$O $(OBJDIR)\verify$O $(OBJDIR)\vfile$O $(OBJDIR)\wiki$O $(OBJDIR)\wikiformat$O $(OBJDIR)\winhttp$O $(OBJDIR)\xfer$O $(OBJDIR)\zip$O $(OBJDIR)\shell$O $(OBJDIR)\sqlite3$O $(OBJDIR)\th$O $(OBJDIR)\th_lang$O
29
+OBJ = $(OBJDIR)\add$O $(OBJDIR)\allrepo$O $(OBJDIR)\attach$O $(OBJDIR)\bag$O $(OBJDIR)\bisect$O $(OBJDIR)\blob$O $(OBJDIR)\branch$O $(OBJDIR)\browse$O $(OBJDIR)\captcha$O $(OBJDIR)\cgi$O $(OBJDIR)\checkin$O $(OBJDIR)\checkout$O $(OBJDIR)\clearsign$O $(OBJDIR)\clone$O $(OBJDIR)\comformat$O $(OBJDIR)\configure$O $(OBJDIR)\content$O $(OBJDIR)\db$O $(OBJDIR)\delta$O $(OBJDIR)\deltacmd$O $(OBJDIR)\descendants$O $(OBJDIR)\diff$O $(OBJDIR)\diffcmd$O $(OBJDIR)\doc$O $(OBJDIR)\encode$O $(OBJDIR)\event$O $(OBJDIR)\export$O $(OBJDIR)\file$O $(OBJDIR)\finfo$O $(OBJDIR)\glob$O $(OBJDIR)\graph$O $(OBJDIR)\gzip$O $(OBJDIR)\http$O $(OBJDIR)\http_socket$O $(OBJDIR)\http_ssl$O $(OBJDIR)\http_transport$O $(OBJDIR)\import$O $(OBJDIR)\info$O $(OBJDIR)\json$O $(OBJDIR)\json_login$O $(OBJDIR)\leaf$O $(OBJDIR)\login$O $(OBJDIR)\main$O $(OBJDIR)\manifest$O $(OBJDIR)\md5$O $(OBJDIR)\merge$O $(OBJDIR)\merge3$O $(OBJDIR)\name$O $(OBJDIR)\path$O $(OBJDIR)\pivot$O $(OBJDIR)\popen$O $(OBJDIR)\pqueue$O $(OBJDIR)\printf$O $(OBJDIR)\rebuild$O $(OBJDIR)\report$O $(OBJDIR)\rss$O $(OBJDIR)\schema$O $(OBJDIR)\search$O $(OBJDIR)\setup$O $(OBJDIR)\sha1$O $(OBJDIR)\shun$O $(OBJDIR)\skins$O $(OBJDIR)\sqlcmd$O $(OBJDIR)\stash$O $(OBJDIR)\stat$O $(OBJDIR)\style$O $(OBJDIR)\sync$O $(OBJDIR)\tag$O $(OBJDIR)\tar$O $(OBJDIR)\th_main$O $(OBJDIR)\timeline$O $(OBJDIR)\tkt$O $(OBJDIR)\tktsetup$O $(OBJDIR)\undo$O $(OBJDIR)\update$O $(OBJDIR)\url$O $(OBJDIR)\user$O $(OBJDIR)\verify$O $(OBJDIR)\vfile$O $(OBJDIR)\wiki$O $(OBJDIR)\wikiformat$O $(OBJDIR)\winhttp$O $(OBJDIR)\xfer$O $(OBJDIR)\zip$O $(OBJDIR)\shell$O $(OBJDIR)\sqlite3$O $(OBJDIR)\th$O $(OBJDIR)\th_lang$O
3030
3131
3232
RC=$(DMDIR)\bin\rcc
3333
RCFLAGS=-32 -w1 -I$(SRCDIR) /D__DMC__
3434
@@ -42,11 +42,11 @@
4242
4343
$(OBJDIR)\fossil.res: $B\win\fossil.rc
4444
$(RC) $(RCFLAGS) -o$@ $**
4545
4646
$(OBJDIR)\link: $B\win\Makefile.dmc $(OBJDIR)\fossil.res
47
- +echo add allrepo attach bag bisect blob branch browse captcha cgi checkin checkout clearsign clone comformat configure content db delta deltacmd descendants diff diffcmd doc encode event export file finfo glob graph gzip http http_socket http_ssl http_transport import info json leaf login main manifest md5 merge merge3 name path pivot popen pqueue printf rebuild report rss schema search setup sha1 shun skins sqlcmd stash stat style sync tag tar th_main timeline tkt tktsetup undo update url user verify vfile wiki wikiformat winhttp xfer zip shell sqlite3 th th_lang > $@
47
+ +echo add allrepo attach bag bisect blob branch browse captcha cgi checkin checkout clearsign clone comformat configure content db delta deltacmd descendants diff diffcmd doc encode event export file finfo glob graph gzip http http_socket http_ssl http_transport import info json json_login leaf login main manifest md5 merge merge3 name path pivot popen pqueue printf rebuild report rss schema search setup sha1 shun skins sqlcmd stash stat style sync tag tar th_main timeline tkt tktsetup undo update url user verify vfile wiki wikiformat winhttp xfer zip shell sqlite3 th th_lang > $@
4848
+echo fossil >> $@
4949
+echo fossil >> $@
5050
+echo $(LIBS) >> $@
5151
+echo. >> $@
5252
+echo fossil >> $@
@@ -89,10 +89,13 @@
8989
-del *.obj *_.c *.h *.map
9090
9191
realclean:
9292
-del $(APPNAME) translate$E mkindex$E makeheaders$E mkversion$E
9393
94
+$(OBJDIR)\json$O : $(SRCDIR)\json_detail.h
95
+$(OBJDIR)\json_login$O : $(SRCDIR)\json_detail.h
96
+
9497
9598
$(OBJDIR)\add$O : add_.c add.h
9699
$(TCC) -o$@ -c add_.c
97100
98101
add_.c : $(SRCDIR)\add.c
@@ -323,10 +326,16 @@
323326
$(OBJDIR)\json$O : json_.c json.h
324327
$(TCC) -o$@ -c json_.c
325328
326329
json_.c : $(SRCDIR)\json.c
327330
+translate$E $** > $@
331
+
332
+$(OBJDIR)\json_login$O : json_login_.c json_login.h
333
+ $(TCC) -o$@ -c json_login_.c
334
+
335
+json_login_.c : $(SRCDIR)\json_login.c
336
+ +translate$E $** > $@
328337
329338
$(OBJDIR)\leaf$O : leaf_.c leaf.h
330339
$(TCC) -o$@ -c leaf_.c
331340
332341
leaf_.c : $(SRCDIR)\leaf.c
@@ -589,7 +598,7 @@
589598
590599
zip_.c : $(SRCDIR)\zip.c
591600
+translate$E $** > $@
592601
593602
headers: makeheaders$E page_index.h VERSION.h
594
- +makeheaders$E add_.c:add.h allrepo_.c:allrepo.h attach_.c:attach.h bag_.c:bag.h bisect_.c:bisect.h blob_.c:blob.h branch_.c:branch.h browse_.c:browse.h captcha_.c:captcha.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h configure_.c:configure.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendants_.c:descendants.h diff_.c:diff.h diffcmd_.c:diffcmd.h doc_.c:doc.h encode_.c:encode.h event_.c:event.h export_.c:export.h file_.c:file.h finfo_.c:finfo.h glob_.c:glob.h graph_.c:graph.h gzip_.c:gzip.h http_.c:http.h http_socket_.c:http_socket.h http_ssl_.c:http_ssl.h http_transport_.c:http_transport.h import_.c:import.h info_.c:info.h json_.c:json.h leaf_.c:leaf.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h path_.c:path.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h setup_.c:setup.h sha1_.c:sha1.h shun_.c:shun.h skins_.c:skins.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h style_.c:style.h sync_.c:sync.h tag_.c:tag.h tar_.c:tar.h th_main_.c:th_main.h timeline_.c:timeline.h tkt_.c:tkt.h tktsetup_.c:tktsetup.h undo_.c:undo.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h winhttp_.c:winhttp.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)\sqlite3.h $(SRCDIR)\th.h VERSION.h $(SRCDIR)\cson_amalgamation.h
603
+ +makeheaders$E add_.c:add.h allrepo_.c:allrepo.h attach_.c:attach.h bag_.c:bag.h bisect_.c:bisect.h blob_.c:blob.h branch_.c:branch.h browse_.c:browse.h captcha_.c:captcha.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h configure_.c:configure.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendants_.c:descendants.h diff_.c:diff.h diffcmd_.c:diffcmd.h doc_.c:doc.h encode_.c:encode.h event_.c:event.h export_.c:export.h file_.c:file.h finfo_.c:finfo.h glob_.c:glob.h graph_.c:graph.h gzip_.c:gzip.h http_.c:http.h http_socket_.c:http_socket.h http_ssl_.c:http_ssl.h http_transport_.c:http_transport.h import_.c:import.h info_.c:info.h json_.c:json.h json_login_.c:json_login.h leaf_.c:leaf.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h path_.c:path.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h setup_.c:setup.h sha1_.c:sha1.h shun_.c:shun.h skins_.c:skins.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h style_.c:style.h sync_.c:sync.h tag_.c:tag.h tar_.c:tar.h th_main_.c:th_main.h timeline_.c:timeline.h tkt_.c:tkt.h tktsetup_.c:tktsetup.h undo_.c:undo.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h winhttp_.c:winhttp.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)\sqlite3.h $(SRCDIR)\th.h VERSION.h $(SRCDIR)\cson_amalgamation.h
595604
@copy /Y nul: headers
596605
--- win/Makefile.dmc
+++ win/Makefile.dmc
@@ -22,13 +22,13 @@
22 TCC = $(DMDIR)\bin\dmc $(CFLAGS) $(DMCDEF) $(SSL) $(INCL)
23 LIBS = $(DMDIR)\extra\lib\ zlib wsock32
24
25 SQLITE_OPTIONS = -DSQLITE_OMIT_LOAD_EXTENSION=1 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_STAT3 -Dlocaltime=fossil_localtime -DSQLITE_ENABLE_LOCKING_STYLE=0
26
27 SRC = add_.c allrepo_.c attach_.c bag_.c bisect_.c blob_.c branch_.c browse_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c db_.c delta_.c deltacmd_.c descendants_.c diff_.c diffcmd_.c doc_.c encode_.c event_.c export_.c file_.c finfo_.c glob_.c graph_.c gzip_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c json_.c leaf_.c login_.c main_.c manifest_.c md5_.c merge_.c merge3_.c name_.c path_.c pivot_.c popen_.c pqueue_.c printf_.c rebuild_.c report_.c rss_.c schema_.c search_.c setup_.c sha1_.c shun_.c skins_.c sqlcmd_.c stash_.c stat_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c update_.c url_.c user_.c verify_.c vfile_.c wiki_.c wikiformat_.c winhttp_.c xfer_.c zip_.c
28
29 OBJ = $(OBJDIR)\add$O $(OBJDIR)\allrepo$O $(OBJDIR)\attach$O $(OBJDIR)\bag$O $(OBJDIR)\bisect$O $(OBJDIR)\blob$O $(OBJDIR)\branch$O $(OBJDIR)\browse$O $(OBJDIR)\captcha$O $(OBJDIR)\cgi$O $(OBJDIR)\checkin$O $(OBJDIR)\checkout$O $(OBJDIR)\clearsign$O $(OBJDIR)\clone$O $(OBJDIR)\comformat$O $(OBJDIR)\configure$O $(OBJDIR)\content$O $(OBJDIR)\db$O $(OBJDIR)\delta$O $(OBJDIR)\deltacmd$O $(OBJDIR)\descendants$O $(OBJDIR)\diff$O $(OBJDIR)\diffcmd$O $(OBJDIR)\doc$O $(OBJDIR)\encode$O $(OBJDIR)\event$O $(OBJDIR)\export$O $(OBJDIR)\file$O $(OBJDIR)\finfo$O $(OBJDIR)\glob$O $(OBJDIR)\graph$O $(OBJDIR)\gzip$O $(OBJDIR)\http$O $(OBJDIR)\http_socket$O $(OBJDIR)\http_ssl$O $(OBJDIR)\http_transport$O $(OBJDIR)\import$O $(OBJDIR)\info$O $(OBJDIR)\json$O $(OBJDIR)\leaf$O $(OBJDIR)\login$O $(OBJDIR)\main$O $(OBJDIR)\manifest$O $(OBJDIR)\md5$O $(OBJDIR)\merge$O $(OBJDIR)\merge3$O $(OBJDIR)\name$O $(OBJDIR)\path$O $(OBJDIR)\pivot$O $(OBJDIR)\popen$O $(OBJDIR)\pqueue$O $(OBJDIR)\printf$O $(OBJDIR)\rebuild$O $(OBJDIR)\report$O $(OBJDIR)\rss$O $(OBJDIR)\schema$O $(OBJDIR)\search$O $(OBJDIR)\setup$O $(OBJDIR)\sha1$O $(OBJDIR)\shun$O $(OBJDIR)\skins$O $(OBJDIR)\sqlcmd$O $(OBJDIR)\stash$O $(OBJDIR)\stat$O $(OBJDIR)\style$O $(OBJDIR)\sync$O $(OBJDIR)\tag$O $(OBJDIR)\tar$O $(OBJDIR)\th_main$O $(OBJDIR)\timeline$O $(OBJDIR)\tkt$O $(OBJDIR)\tktsetup$O $(OBJDIR)\undo$O $(OBJDIR)\update$O $(OBJDIR)\url$O $(OBJDIR)\user$O $(OBJDIR)\verify$O $(OBJDIR)\vfile$O $(OBJDIR)\wiki$O $(OBJDIR)\wikiformat$O $(OBJDIR)\winhttp$O $(OBJDIR)\xfer$O $(OBJDIR)\zip$O $(OBJDIR)\shell$O $(OBJDIR)\sqlite3$O $(OBJDIR)\th$O $(OBJDIR)\th_lang$O
30
31
32 RC=$(DMDIR)\bin\rcc
33 RCFLAGS=-32 -w1 -I$(SRCDIR) /D__DMC__
34
@@ -42,11 +42,11 @@
42
43 $(OBJDIR)\fossil.res: $B\win\fossil.rc
44 $(RC) $(RCFLAGS) -o$@ $**
45
46 $(OBJDIR)\link: $B\win\Makefile.dmc $(OBJDIR)\fossil.res
47 +echo add allrepo attach bag bisect blob branch browse captcha cgi checkin checkout clearsign clone comformat configure content db delta deltacmd descendants diff diffcmd doc encode event export file finfo glob graph gzip http http_socket http_ssl http_transport import info json leaf login main manifest md5 merge merge3 name path pivot popen pqueue printf rebuild report rss schema search setup sha1 shun skins sqlcmd stash stat style sync tag tar th_main timeline tkt tktsetup undo update url user verify vfile wiki wikiformat winhttp xfer zip shell sqlite3 th th_lang > $@
48 +echo fossil >> $@
49 +echo fossil >> $@
50 +echo $(LIBS) >> $@
51 +echo. >> $@
52 +echo fossil >> $@
@@ -89,10 +89,13 @@
89 -del *.obj *_.c *.h *.map
90
91 realclean:
92 -del $(APPNAME) translate$E mkindex$E makeheaders$E mkversion$E
93
 
 
 
94
95 $(OBJDIR)\add$O : add_.c add.h
96 $(TCC) -o$@ -c add_.c
97
98 add_.c : $(SRCDIR)\add.c
@@ -323,10 +326,16 @@
323 $(OBJDIR)\json$O : json_.c json.h
324 $(TCC) -o$@ -c json_.c
325
326 json_.c : $(SRCDIR)\json.c
327 +translate$E $** > $@
 
 
 
 
 
 
328
329 $(OBJDIR)\leaf$O : leaf_.c leaf.h
330 $(TCC) -o$@ -c leaf_.c
331
332 leaf_.c : $(SRCDIR)\leaf.c
@@ -589,7 +598,7 @@
589
590 zip_.c : $(SRCDIR)\zip.c
591 +translate$E $** > $@
592
593 headers: makeheaders$E page_index.h VERSION.h
594 +makeheaders$E add_.c:add.h allrepo_.c:allrepo.h attach_.c:attach.h bag_.c:bag.h bisect_.c:bisect.h blob_.c:blob.h branch_.c:branch.h browse_.c:browse.h captcha_.c:captcha.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h configure_.c:configure.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendants_.c:descendants.h diff_.c:diff.h diffcmd_.c:diffcmd.h doc_.c:doc.h encode_.c:encode.h event_.c:event.h export_.c:export.h file_.c:file.h finfo_.c:finfo.h glob_.c:glob.h graph_.c:graph.h gzip_.c:gzip.h http_.c:http.h http_socket_.c:http_socket.h http_ssl_.c:http_ssl.h http_transport_.c:http_transport.h import_.c:import.h info_.c:info.h json_.c:json.h leaf_.c:leaf.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h path_.c:path.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h setup_.c:setup.h sha1_.c:sha1.h shun_.c:shun.h skins_.c:skins.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h style_.c:style.h sync_.c:sync.h tag_.c:tag.h tar_.c:tar.h th_main_.c:th_main.h timeline_.c:timeline.h tkt_.c:tkt.h tktsetup_.c:tktsetup.h undo_.c:undo.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h winhttp_.c:winhttp.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)\sqlite3.h $(SRCDIR)\th.h VERSION.h $(SRCDIR)\cson_amalgamation.h
595 @copy /Y nul: headers
596
--- win/Makefile.dmc
+++ win/Makefile.dmc
@@ -22,13 +22,13 @@
22 TCC = $(DMDIR)\bin\dmc $(CFLAGS) $(DMCDEF) $(SSL) $(INCL)
23 LIBS = $(DMDIR)\extra\lib\ zlib wsock32
24
25 SQLITE_OPTIONS = -DSQLITE_OMIT_LOAD_EXTENSION=1 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_STAT3 -Dlocaltime=fossil_localtime -DSQLITE_ENABLE_LOCKING_STYLE=0
26
27 SRC = add_.c allrepo_.c attach_.c bag_.c bisect_.c blob_.c branch_.c browse_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c db_.c delta_.c deltacmd_.c descendants_.c diff_.c diffcmd_.c doc_.c encode_.c event_.c export_.c file_.c finfo_.c glob_.c graph_.c gzip_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c json_.c json_login_.c leaf_.c login_.c main_.c manifest_.c md5_.c merge_.c merge3_.c name_.c path_.c pivot_.c popen_.c pqueue_.c printf_.c rebuild_.c report_.c rss_.c schema_.c search_.c setup_.c sha1_.c shun_.c skins_.c sqlcmd_.c stash_.c stat_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c update_.c url_.c user_.c verify_.c vfile_.c wiki_.c wikiformat_.c winhttp_.c xfer_.c zip_.c
28
29 OBJ = $(OBJDIR)\add$O $(OBJDIR)\allrepo$O $(OBJDIR)\attach$O $(OBJDIR)\bag$O $(OBJDIR)\bisect$O $(OBJDIR)\blob$O $(OBJDIR)\branch$O $(OBJDIR)\browse$O $(OBJDIR)\captcha$O $(OBJDIR)\cgi$O $(OBJDIR)\checkin$O $(OBJDIR)\checkout$O $(OBJDIR)\clearsign$O $(OBJDIR)\clone$O $(OBJDIR)\comformat$O $(OBJDIR)\configure$O $(OBJDIR)\content$O $(OBJDIR)\db$O $(OBJDIR)\delta$O $(OBJDIR)\deltacmd$O $(OBJDIR)\descendants$O $(OBJDIR)\diff$O $(OBJDIR)\diffcmd$O $(OBJDIR)\doc$O $(OBJDIR)\encode$O $(OBJDIR)\event$O $(OBJDIR)\export$O $(OBJDIR)\file$O $(OBJDIR)\finfo$O $(OBJDIR)\glob$O $(OBJDIR)\graph$O $(OBJDIR)\gzip$O $(OBJDIR)\http$O $(OBJDIR)\http_socket$O $(OBJDIR)\http_ssl$O $(OBJDIR)\http_transport$O $(OBJDIR)\import$O $(OBJDIR)\info$O $(OBJDIR)\json$O $(OBJDIR)\json_login$O $(OBJDIR)\leaf$O $(OBJDIR)\login$O $(OBJDIR)\main$O $(OBJDIR)\manifest$O $(OBJDIR)\md5$O $(OBJDIR)\merge$O $(OBJDIR)\merge3$O $(OBJDIR)\name$O $(OBJDIR)\path$O $(OBJDIR)\pivot$O $(OBJDIR)\popen$O $(OBJDIR)\pqueue$O $(OBJDIR)\printf$O $(OBJDIR)\rebuild$O $(OBJDIR)\report$O $(OBJDIR)\rss$O $(OBJDIR)\schema$O $(OBJDIR)\search$O $(OBJDIR)\setup$O $(OBJDIR)\sha1$O $(OBJDIR)\shun$O $(OBJDIR)\skins$O $(OBJDIR)\sqlcmd$O $(OBJDIR)\stash$O $(OBJDIR)\stat$O $(OBJDIR)\style$O $(OBJDIR)\sync$O $(OBJDIR)\tag$O $(OBJDIR)\tar$O $(OBJDIR)\th_main$O $(OBJDIR)\timeline$O $(OBJDIR)\tkt$O $(OBJDIR)\tktsetup$O $(OBJDIR)\undo$O $(OBJDIR)\update$O $(OBJDIR)\url$O $(OBJDIR)\user$O $(OBJDIR)\verify$O $(OBJDIR)\vfile$O $(OBJDIR)\wiki$O $(OBJDIR)\wikiformat$O $(OBJDIR)\winhttp$O $(OBJDIR)\xfer$O $(OBJDIR)\zip$O $(OBJDIR)\shell$O $(OBJDIR)\sqlite3$O $(OBJDIR)\th$O $(OBJDIR)\th_lang$O
30
31
32 RC=$(DMDIR)\bin\rcc
33 RCFLAGS=-32 -w1 -I$(SRCDIR) /D__DMC__
34
@@ -42,11 +42,11 @@
42
43 $(OBJDIR)\fossil.res: $B\win\fossil.rc
44 $(RC) $(RCFLAGS) -o$@ $**
45
46 $(OBJDIR)\link: $B\win\Makefile.dmc $(OBJDIR)\fossil.res
47 +echo add allrepo attach bag bisect blob branch browse captcha cgi checkin checkout clearsign clone comformat configure content db delta deltacmd descendants diff diffcmd doc encode event export file finfo glob graph gzip http http_socket http_ssl http_transport import info json json_login leaf login main manifest md5 merge merge3 name path pivot popen pqueue printf rebuild report rss schema search setup sha1 shun skins sqlcmd stash stat style sync tag tar th_main timeline tkt tktsetup undo update url user verify vfile wiki wikiformat winhttp xfer zip shell sqlite3 th th_lang > $@
48 +echo fossil >> $@
49 +echo fossil >> $@
50 +echo $(LIBS) >> $@
51 +echo. >> $@
52 +echo fossil >> $@
@@ -89,10 +89,13 @@
89 -del *.obj *_.c *.h *.map
90
91 realclean:
92 -del $(APPNAME) translate$E mkindex$E makeheaders$E mkversion$E
93
94 $(OBJDIR)\json$O : $(SRCDIR)\json_detail.h
95 $(OBJDIR)\json_login$O : $(SRCDIR)\json_detail.h
96
97
98 $(OBJDIR)\add$O : add_.c add.h
99 $(TCC) -o$@ -c add_.c
100
101 add_.c : $(SRCDIR)\add.c
@@ -323,10 +326,16 @@
326 $(OBJDIR)\json$O : json_.c json.h
327 $(TCC) -o$@ -c json_.c
328
329 json_.c : $(SRCDIR)\json.c
330 +translate$E $** > $@
331
332 $(OBJDIR)\json_login$O : json_login_.c json_login.h
333 $(TCC) -o$@ -c json_login_.c
334
335 json_login_.c : $(SRCDIR)\json_login.c
336 +translate$E $** > $@
337
338 $(OBJDIR)\leaf$O : leaf_.c leaf.h
339 $(TCC) -o$@ -c leaf_.c
340
341 leaf_.c : $(SRCDIR)\leaf.c
@@ -589,7 +598,7 @@
598
599 zip_.c : $(SRCDIR)\zip.c
600 +translate$E $** > $@
601
602 headers: makeheaders$E page_index.h VERSION.h
603 +makeheaders$E add_.c:add.h allrepo_.c:allrepo.h attach_.c:attach.h bag_.c:bag.h bisect_.c:bisect.h blob_.c:blob.h branch_.c:branch.h browse_.c:browse.h captcha_.c:captcha.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h configure_.c:configure.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendants_.c:descendants.h diff_.c:diff.h diffcmd_.c:diffcmd.h doc_.c:doc.h encode_.c:encode.h event_.c:event.h export_.c:export.h file_.c:file.h finfo_.c:finfo.h glob_.c:glob.h graph_.c:graph.h gzip_.c:gzip.h http_.c:http.h http_socket_.c:http_socket.h http_ssl_.c:http_ssl.h http_transport_.c:http_transport.h import_.c:import.h info_.c:info.h json_.c:json.h json_login_.c:json_login.h leaf_.c:leaf.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h path_.c:path.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h setup_.c:setup.h sha1_.c:sha1.h shun_.c:shun.h skins_.c:skins.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h style_.c:style.h sync_.c:sync.h tag_.c:tag.h tar_.c:tar.h th_main_.c:th_main.h timeline_.c:timeline.h tkt_.c:tkt.h tktsetup_.c:tktsetup.h undo_.c:undo.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h winhttp_.c:winhttp.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)\sqlite3.h $(SRCDIR)\th.h VERSION.h $(SRCDIR)\cson_amalgamation.h
604 @copy /Y nul: headers
605
--- win/Makefile.mingw
+++ win/Makefile.mingw
@@ -111,10 +111,11 @@
111111
$(SRCDIR)/http_ssl.c \
112112
$(SRCDIR)/http_transport.c \
113113
$(SRCDIR)/import.c \
114114
$(SRCDIR)/info.c \
115115
$(SRCDIR)/json.c \
116
+ $(SRCDIR)/json_login.c \
116117
$(SRCDIR)/leaf.c \
117118
$(SRCDIR)/login.c \
118119
$(SRCDIR)/main.c \
119120
$(SRCDIR)/manifest.c \
120121
$(SRCDIR)/md5.c \
@@ -196,10 +197,11 @@
196197
$(OBJDIR)/http_ssl_.c \
197198
$(OBJDIR)/http_transport_.c \
198199
$(OBJDIR)/import_.c \
199200
$(OBJDIR)/info_.c \
200201
$(OBJDIR)/json_.c \
202
+ $(OBJDIR)/json_login_.c \
201203
$(OBJDIR)/leaf_.c \
202204
$(OBJDIR)/login_.c \
203205
$(OBJDIR)/main_.c \
204206
$(OBJDIR)/manifest_.c \
205207
$(OBJDIR)/md5_.c \
@@ -281,10 +283,11 @@
281283
$(OBJDIR)/http_ssl.o \
282284
$(OBJDIR)/http_transport.o \
283285
$(OBJDIR)/import.o \
284286
$(OBJDIR)/info.o \
285287
$(OBJDIR)/json.o \
288
+ $(OBJDIR)/json_login.o \
286289
$(OBJDIR)/leaf.o \
287290
$(OBJDIR)/login.o \
288291
$(OBJDIR)/main.o \
289292
$(OBJDIR)/manifest.o \
290293
$(OBJDIR)/md5.o \
@@ -391,11 +394,11 @@
391394
392395
393396
$(OBJDIR)/page_index.h: $(TRANS_SRC) $(OBJDIR)/mkindex
394397
$(MKINDEX) $(TRANS_SRC) >$@
395398
$(OBJDIR)/headers: $(OBJDIR)/page_index.h $(OBJDIR)/makeheaders $(OBJDIR)/VERSION.h
396
- $(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)/json_.c:$(OBJDIR)/json.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
399
+ $(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)/json_.c:$(OBJDIR)/json.h $(OBJDIR)/json_login_.c:$(OBJDIR)/json_login.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
397400
echo Done >$(OBJDIR)/headers
398401
399402
$(OBJDIR)/headers: Makefile
400403
Makefile:
401404
$(OBJDIR)/add_.c: $(SRCDIR)/add.c $(OBJDIR)/translate
@@ -669,10 +672,17 @@
669672
670673
$(OBJDIR)/json.o: $(OBJDIR)/json_.c $(OBJDIR)/json.h $(SRCDIR)/config.h
671674
$(XTCC) -o $(OBJDIR)/json.o -c $(OBJDIR)/json_.c
672675
673676
json.h: $(OBJDIR)/headers
677
+$(OBJDIR)/json_login_.c: $(SRCDIR)/json_login.c $(OBJDIR)/translate
678
+ $(TRANSLATE) $(SRCDIR)/json_login.c >$(OBJDIR)/json_login_.c
679
+
680
+$(OBJDIR)/json_login.o: $(OBJDIR)/json_login_.c $(OBJDIR)/json_login.h $(SRCDIR)/config.h
681
+ $(XTCC) -o $(OBJDIR)/json_login.o -c $(OBJDIR)/json_login_.c
682
+
683
+json_login.h: $(OBJDIR)/headers
674684
$(OBJDIR)/leaf_.c: $(SRCDIR)/leaf.c $(OBJDIR)/translate
675685
$(TRANSLATE) $(SRCDIR)/leaf.c >$(OBJDIR)/leaf_.c
676686
677687
$(OBJDIR)/leaf.o: $(OBJDIR)/leaf_.c $(OBJDIR)/leaf.h $(SRCDIR)/config.h
678688
$(XTCC) -o $(OBJDIR)/leaf.o -c $(OBJDIR)/leaf_.c
@@ -983,14 +993,15 @@
983993
$(XTCC) -DSQLITE_OMIT_LOAD_EXTENSION=1 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_STAT3 -Dlocaltime=fossil_localtime -DSQLITE_ENABLE_LOCKING_STYLE=0 -c $(SRCDIR)/sqlite3.c -o $(OBJDIR)/sqlite3.o
984994
985995
$(OBJDIR)/cson_amalgamation.o: $(SRCDIR)/cson_amalgamation.c
986996
$(XTCC) -c $(SRCDIR)/cson_amalgamation.c -o $(OBJDIR)/cson_amalgamation.o
987997
998
+$(OBJDIR)/json.o $(OBJDIR)/json_login.o : $(SRCDIR)/json_detail.h
988999
$(OBJDIR)/shell.o: $(SRCDIR)/shell.c $(SRCDIR)/sqlite3.h
9891000
$(XTCC) -Dmain=sqlite3_shell -DSQLITE_OMIT_LOAD_EXTENSION=1 -c $(SRCDIR)/shell.c -o $(OBJDIR)/shell.o
9901001
9911002
$(OBJDIR)/th.o: $(SRCDIR)/th.c
9921003
$(XTCC) -I$(SRCDIR) -c $(SRCDIR)/th.c -o $(OBJDIR)/th.o
9931004
9941005
$(OBJDIR)/th_lang.o: $(SRCDIR)/th_lang.c
9951006
$(XTCC) -I$(SRCDIR) -c $(SRCDIR)/th_lang.c -o $(OBJDIR)/th_lang.o
9961007
9971008
--- win/Makefile.mingw
+++ win/Makefile.mingw
@@ -111,10 +111,11 @@
111 $(SRCDIR)/http_ssl.c \
112 $(SRCDIR)/http_transport.c \
113 $(SRCDIR)/import.c \
114 $(SRCDIR)/info.c \
115 $(SRCDIR)/json.c \
 
116 $(SRCDIR)/leaf.c \
117 $(SRCDIR)/login.c \
118 $(SRCDIR)/main.c \
119 $(SRCDIR)/manifest.c \
120 $(SRCDIR)/md5.c \
@@ -196,10 +197,11 @@
196 $(OBJDIR)/http_ssl_.c \
197 $(OBJDIR)/http_transport_.c \
198 $(OBJDIR)/import_.c \
199 $(OBJDIR)/info_.c \
200 $(OBJDIR)/json_.c \
 
201 $(OBJDIR)/leaf_.c \
202 $(OBJDIR)/login_.c \
203 $(OBJDIR)/main_.c \
204 $(OBJDIR)/manifest_.c \
205 $(OBJDIR)/md5_.c \
@@ -281,10 +283,11 @@
281 $(OBJDIR)/http_ssl.o \
282 $(OBJDIR)/http_transport.o \
283 $(OBJDIR)/import.o \
284 $(OBJDIR)/info.o \
285 $(OBJDIR)/json.o \
 
286 $(OBJDIR)/leaf.o \
287 $(OBJDIR)/login.o \
288 $(OBJDIR)/main.o \
289 $(OBJDIR)/manifest.o \
290 $(OBJDIR)/md5.o \
@@ -391,11 +394,11 @@
391
392
393 $(OBJDIR)/page_index.h: $(TRANS_SRC) $(OBJDIR)/mkindex
394 $(MKINDEX) $(TRANS_SRC) >$@
395 $(OBJDIR)/headers: $(OBJDIR)/page_index.h $(OBJDIR)/makeheaders $(OBJDIR)/VERSION.h
396 $(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)/json_.c:$(OBJDIR)/json.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
397 echo Done >$(OBJDIR)/headers
398
399 $(OBJDIR)/headers: Makefile
400 Makefile:
401 $(OBJDIR)/add_.c: $(SRCDIR)/add.c $(OBJDIR)/translate
@@ -669,10 +672,17 @@
669
670 $(OBJDIR)/json.o: $(OBJDIR)/json_.c $(OBJDIR)/json.h $(SRCDIR)/config.h
671 $(XTCC) -o $(OBJDIR)/json.o -c $(OBJDIR)/json_.c
672
673 json.h: $(OBJDIR)/headers
 
 
 
 
 
 
 
674 $(OBJDIR)/leaf_.c: $(SRCDIR)/leaf.c $(OBJDIR)/translate
675 $(TRANSLATE) $(SRCDIR)/leaf.c >$(OBJDIR)/leaf_.c
676
677 $(OBJDIR)/leaf.o: $(OBJDIR)/leaf_.c $(OBJDIR)/leaf.h $(SRCDIR)/config.h
678 $(XTCC) -o $(OBJDIR)/leaf.o -c $(OBJDIR)/leaf_.c
@@ -983,14 +993,15 @@
983 $(XTCC) -DSQLITE_OMIT_LOAD_EXTENSION=1 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_STAT3 -Dlocaltime=fossil_localtime -DSQLITE_ENABLE_LOCKING_STYLE=0 -c $(SRCDIR)/sqlite3.c -o $(OBJDIR)/sqlite3.o
984
985 $(OBJDIR)/cson_amalgamation.o: $(SRCDIR)/cson_amalgamation.c
986 $(XTCC) -c $(SRCDIR)/cson_amalgamation.c -o $(OBJDIR)/cson_amalgamation.o
987
 
988 $(OBJDIR)/shell.o: $(SRCDIR)/shell.c $(SRCDIR)/sqlite3.h
989 $(XTCC) -Dmain=sqlite3_shell -DSQLITE_OMIT_LOAD_EXTENSION=1 -c $(SRCDIR)/shell.c -o $(OBJDIR)/shell.o
990
991 $(OBJDIR)/th.o: $(SRCDIR)/th.c
992 $(XTCC) -I$(SRCDIR) -c $(SRCDIR)/th.c -o $(OBJDIR)/th.o
993
994 $(OBJDIR)/th_lang.o: $(SRCDIR)/th_lang.c
995 $(XTCC) -I$(SRCDIR) -c $(SRCDIR)/th_lang.c -o $(OBJDIR)/th_lang.o
996
997
--- win/Makefile.mingw
+++ win/Makefile.mingw
@@ -111,10 +111,11 @@
111 $(SRCDIR)/http_ssl.c \
112 $(SRCDIR)/http_transport.c \
113 $(SRCDIR)/import.c \
114 $(SRCDIR)/info.c \
115 $(SRCDIR)/json.c \
116 $(SRCDIR)/json_login.c \
117 $(SRCDIR)/leaf.c \
118 $(SRCDIR)/login.c \
119 $(SRCDIR)/main.c \
120 $(SRCDIR)/manifest.c \
121 $(SRCDIR)/md5.c \
@@ -196,10 +197,11 @@
197 $(OBJDIR)/http_ssl_.c \
198 $(OBJDIR)/http_transport_.c \
199 $(OBJDIR)/import_.c \
200 $(OBJDIR)/info_.c \
201 $(OBJDIR)/json_.c \
202 $(OBJDIR)/json_login_.c \
203 $(OBJDIR)/leaf_.c \
204 $(OBJDIR)/login_.c \
205 $(OBJDIR)/main_.c \
206 $(OBJDIR)/manifest_.c \
207 $(OBJDIR)/md5_.c \
@@ -281,10 +283,11 @@
283 $(OBJDIR)/http_ssl.o \
284 $(OBJDIR)/http_transport.o \
285 $(OBJDIR)/import.o \
286 $(OBJDIR)/info.o \
287 $(OBJDIR)/json.o \
288 $(OBJDIR)/json_login.o \
289 $(OBJDIR)/leaf.o \
290 $(OBJDIR)/login.o \
291 $(OBJDIR)/main.o \
292 $(OBJDIR)/manifest.o \
293 $(OBJDIR)/md5.o \
@@ -391,11 +394,11 @@
394
395
396 $(OBJDIR)/page_index.h: $(TRANS_SRC) $(OBJDIR)/mkindex
397 $(MKINDEX) $(TRANS_SRC) >$@
398 $(OBJDIR)/headers: $(OBJDIR)/page_index.h $(OBJDIR)/makeheaders $(OBJDIR)/VERSION.h
399 $(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)/json_.c:$(OBJDIR)/json.h $(OBJDIR)/json_login_.c:$(OBJDIR)/json_login.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
400 echo Done >$(OBJDIR)/headers
401
402 $(OBJDIR)/headers: Makefile
403 Makefile:
404 $(OBJDIR)/add_.c: $(SRCDIR)/add.c $(OBJDIR)/translate
@@ -669,10 +672,17 @@
672
673 $(OBJDIR)/json.o: $(OBJDIR)/json_.c $(OBJDIR)/json.h $(SRCDIR)/config.h
674 $(XTCC) -o $(OBJDIR)/json.o -c $(OBJDIR)/json_.c
675
676 json.h: $(OBJDIR)/headers
677 $(OBJDIR)/json_login_.c: $(SRCDIR)/json_login.c $(OBJDIR)/translate
678 $(TRANSLATE) $(SRCDIR)/json_login.c >$(OBJDIR)/json_login_.c
679
680 $(OBJDIR)/json_login.o: $(OBJDIR)/json_login_.c $(OBJDIR)/json_login.h $(SRCDIR)/config.h
681 $(XTCC) -o $(OBJDIR)/json_login.o -c $(OBJDIR)/json_login_.c
682
683 json_login.h: $(OBJDIR)/headers
684 $(OBJDIR)/leaf_.c: $(SRCDIR)/leaf.c $(OBJDIR)/translate
685 $(TRANSLATE) $(SRCDIR)/leaf.c >$(OBJDIR)/leaf_.c
686
687 $(OBJDIR)/leaf.o: $(OBJDIR)/leaf_.c $(OBJDIR)/leaf.h $(SRCDIR)/config.h
688 $(XTCC) -o $(OBJDIR)/leaf.o -c $(OBJDIR)/leaf_.c
@@ -983,14 +993,15 @@
993 $(XTCC) -DSQLITE_OMIT_LOAD_EXTENSION=1 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_STAT3 -Dlocaltime=fossil_localtime -DSQLITE_ENABLE_LOCKING_STYLE=0 -c $(SRCDIR)/sqlite3.c -o $(OBJDIR)/sqlite3.o
994
995 $(OBJDIR)/cson_amalgamation.o: $(SRCDIR)/cson_amalgamation.c
996 $(XTCC) -c $(SRCDIR)/cson_amalgamation.c -o $(OBJDIR)/cson_amalgamation.o
997
998 $(OBJDIR)/json.o $(OBJDIR)/json_login.o : $(SRCDIR)/json_detail.h
999 $(OBJDIR)/shell.o: $(SRCDIR)/shell.c $(SRCDIR)/sqlite3.h
1000 $(XTCC) -Dmain=sqlite3_shell -DSQLITE_OMIT_LOAD_EXTENSION=1 -c $(SRCDIR)/shell.c -o $(OBJDIR)/shell.o
1001
1002 $(OBJDIR)/th.o: $(SRCDIR)/th.c
1003 $(XTCC) -I$(SRCDIR) -c $(SRCDIR)/th.c -o $(OBJDIR)/th.o
1004
1005 $(OBJDIR)/th_lang.o: $(SRCDIR)/th_lang.c
1006 $(XTCC) -I$(SRCDIR) -c $(SRCDIR)/th_lang.c -o $(OBJDIR)/th_lang.o
1007
1008
--- win/Makefile.mingw
+++ win/Makefile.mingw
@@ -111,10 +111,11 @@
111111
$(SRCDIR)/http_ssl.c \
112112
$(SRCDIR)/http_transport.c \
113113
$(SRCDIR)/import.c \
114114
$(SRCDIR)/info.c \
115115
$(SRCDIR)/json.c \
116
+ $(SRCDIR)/json_login.c \
116117
$(SRCDIR)/leaf.c \
117118
$(SRCDIR)/login.c \
118119
$(SRCDIR)/main.c \
119120
$(SRCDIR)/manifest.c \
120121
$(SRCDIR)/md5.c \
@@ -196,10 +197,11 @@
196197
$(OBJDIR)/http_ssl_.c \
197198
$(OBJDIR)/http_transport_.c \
198199
$(OBJDIR)/import_.c \
199200
$(OBJDIR)/info_.c \
200201
$(OBJDIR)/json_.c \
202
+ $(OBJDIR)/json_login_.c \
201203
$(OBJDIR)/leaf_.c \
202204
$(OBJDIR)/login_.c \
203205
$(OBJDIR)/main_.c \
204206
$(OBJDIR)/manifest_.c \
205207
$(OBJDIR)/md5_.c \
@@ -281,10 +283,11 @@
281283
$(OBJDIR)/http_ssl.o \
282284
$(OBJDIR)/http_transport.o \
283285
$(OBJDIR)/import.o \
284286
$(OBJDIR)/info.o \
285287
$(OBJDIR)/json.o \
288
+ $(OBJDIR)/json_login.o \
286289
$(OBJDIR)/leaf.o \
287290
$(OBJDIR)/login.o \
288291
$(OBJDIR)/main.o \
289292
$(OBJDIR)/manifest.o \
290293
$(OBJDIR)/md5.o \
@@ -391,11 +394,11 @@
391394
392395
393396
$(OBJDIR)/page_index.h: $(TRANS_SRC) $(OBJDIR)/mkindex
394397
$(MKINDEX) $(TRANS_SRC) >$@
395398
$(OBJDIR)/headers: $(OBJDIR)/page_index.h $(OBJDIR)/makeheaders $(OBJDIR)/VERSION.h
396
- $(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)/json_.c:$(OBJDIR)/json.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
399
+ $(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)/json_.c:$(OBJDIR)/json.h $(OBJDIR)/json_login_.c:$(OBJDIR)/json_login.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
397400
echo Done >$(OBJDIR)/headers
398401
399402
$(OBJDIR)/headers: Makefile
400403
Makefile:
401404
$(OBJDIR)/add_.c: $(SRCDIR)/add.c $(OBJDIR)/translate
@@ -669,10 +672,17 @@
669672
670673
$(OBJDIR)/json.o: $(OBJDIR)/json_.c $(OBJDIR)/json.h $(SRCDIR)/config.h
671674
$(XTCC) -o $(OBJDIR)/json.o -c $(OBJDIR)/json_.c
672675
673676
json.h: $(OBJDIR)/headers
677
+$(OBJDIR)/json_login_.c: $(SRCDIR)/json_login.c $(OBJDIR)/translate
678
+ $(TRANSLATE) $(SRCDIR)/json_login.c >$(OBJDIR)/json_login_.c
679
+
680
+$(OBJDIR)/json_login.o: $(OBJDIR)/json_login_.c $(OBJDIR)/json_login.h $(SRCDIR)/config.h
681
+ $(XTCC) -o $(OBJDIR)/json_login.o -c $(OBJDIR)/json_login_.c
682
+
683
+json_login.h: $(OBJDIR)/headers
674684
$(OBJDIR)/leaf_.c: $(SRCDIR)/leaf.c $(OBJDIR)/translate
675685
$(TRANSLATE) $(SRCDIR)/leaf.c >$(OBJDIR)/leaf_.c
676686
677687
$(OBJDIR)/leaf.o: $(OBJDIR)/leaf_.c $(OBJDIR)/leaf.h $(SRCDIR)/config.h
678688
$(XTCC) -o $(OBJDIR)/leaf.o -c $(OBJDIR)/leaf_.c
@@ -983,14 +993,15 @@
983993
$(XTCC) -DSQLITE_OMIT_LOAD_EXTENSION=1 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_STAT3 -Dlocaltime=fossil_localtime -DSQLITE_ENABLE_LOCKING_STYLE=0 -c $(SRCDIR)/sqlite3.c -o $(OBJDIR)/sqlite3.o
984994
985995
$(OBJDIR)/cson_amalgamation.o: $(SRCDIR)/cson_amalgamation.c
986996
$(XTCC) -c $(SRCDIR)/cson_amalgamation.c -o $(OBJDIR)/cson_amalgamation.o
987997
998
+$(OBJDIR)/json.o $(OBJDIR)/json_login.o : $(SRCDIR)/json_detail.h
988999
$(OBJDIR)/shell.o: $(SRCDIR)/shell.c $(SRCDIR)/sqlite3.h
9891000
$(XTCC) -Dmain=sqlite3_shell -DSQLITE_OMIT_LOAD_EXTENSION=1 -c $(SRCDIR)/shell.c -o $(OBJDIR)/shell.o
9901001
9911002
$(OBJDIR)/th.o: $(SRCDIR)/th.c
9921003
$(XTCC) -I$(SRCDIR) -c $(SRCDIR)/th.c -o $(OBJDIR)/th.o
9931004
9941005
$(OBJDIR)/th_lang.o: $(SRCDIR)/th_lang.c
9951006
$(XTCC) -I$(SRCDIR) -c $(SRCDIR)/th_lang.c -o $(OBJDIR)/th_lang.o
9961007
9971008
--- win/Makefile.mingw
+++ win/Makefile.mingw
@@ -111,10 +111,11 @@
111 $(SRCDIR)/http_ssl.c \
112 $(SRCDIR)/http_transport.c \
113 $(SRCDIR)/import.c \
114 $(SRCDIR)/info.c \
115 $(SRCDIR)/json.c \
 
116 $(SRCDIR)/leaf.c \
117 $(SRCDIR)/login.c \
118 $(SRCDIR)/main.c \
119 $(SRCDIR)/manifest.c \
120 $(SRCDIR)/md5.c \
@@ -196,10 +197,11 @@
196 $(OBJDIR)/http_ssl_.c \
197 $(OBJDIR)/http_transport_.c \
198 $(OBJDIR)/import_.c \
199 $(OBJDIR)/info_.c \
200 $(OBJDIR)/json_.c \
 
201 $(OBJDIR)/leaf_.c \
202 $(OBJDIR)/login_.c \
203 $(OBJDIR)/main_.c \
204 $(OBJDIR)/manifest_.c \
205 $(OBJDIR)/md5_.c \
@@ -281,10 +283,11 @@
281 $(OBJDIR)/http_ssl.o \
282 $(OBJDIR)/http_transport.o \
283 $(OBJDIR)/import.o \
284 $(OBJDIR)/info.o \
285 $(OBJDIR)/json.o \
 
286 $(OBJDIR)/leaf.o \
287 $(OBJDIR)/login.o \
288 $(OBJDIR)/main.o \
289 $(OBJDIR)/manifest.o \
290 $(OBJDIR)/md5.o \
@@ -391,11 +394,11 @@
391
392
393 $(OBJDIR)/page_index.h: $(TRANS_SRC) $(OBJDIR)/mkindex
394 $(MKINDEX) $(TRANS_SRC) >$@
395 $(OBJDIR)/headers: $(OBJDIR)/page_index.h $(OBJDIR)/makeheaders $(OBJDIR)/VERSION.h
396 $(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)/json_.c:$(OBJDIR)/json.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
397 echo Done >$(OBJDIR)/headers
398
399 $(OBJDIR)/headers: Makefile
400 Makefile:
401 $(OBJDIR)/add_.c: $(SRCDIR)/add.c $(OBJDIR)/translate
@@ -669,10 +672,17 @@
669
670 $(OBJDIR)/json.o: $(OBJDIR)/json_.c $(OBJDIR)/json.h $(SRCDIR)/config.h
671 $(XTCC) -o $(OBJDIR)/json.o -c $(OBJDIR)/json_.c
672
673 json.h: $(OBJDIR)/headers
 
 
 
 
 
 
 
674 $(OBJDIR)/leaf_.c: $(SRCDIR)/leaf.c $(OBJDIR)/translate
675 $(TRANSLATE) $(SRCDIR)/leaf.c >$(OBJDIR)/leaf_.c
676
677 $(OBJDIR)/leaf.o: $(OBJDIR)/leaf_.c $(OBJDIR)/leaf.h $(SRCDIR)/config.h
678 $(XTCC) -o $(OBJDIR)/leaf.o -c $(OBJDIR)/leaf_.c
@@ -983,14 +993,15 @@
983 $(XTCC) -DSQLITE_OMIT_LOAD_EXTENSION=1 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_STAT3 -Dlocaltime=fossil_localtime -DSQLITE_ENABLE_LOCKING_STYLE=0 -c $(SRCDIR)/sqlite3.c -o $(OBJDIR)/sqlite3.o
984
985 $(OBJDIR)/cson_amalgamation.o: $(SRCDIR)/cson_amalgamation.c
986 $(XTCC) -c $(SRCDIR)/cson_amalgamation.c -o $(OBJDIR)/cson_amalgamation.o
987
 
988 $(OBJDIR)/shell.o: $(SRCDIR)/shell.c $(SRCDIR)/sqlite3.h
989 $(XTCC) -Dmain=sqlite3_shell -DSQLITE_OMIT_LOAD_EXTENSION=1 -c $(SRCDIR)/shell.c -o $(OBJDIR)/shell.o
990
991 $(OBJDIR)/th.o: $(SRCDIR)/th.c
992 $(XTCC) -I$(SRCDIR) -c $(SRCDIR)/th.c -o $(OBJDIR)/th.o
993
994 $(OBJDIR)/th_lang.o: $(SRCDIR)/th_lang.c
995 $(XTCC) -I$(SRCDIR) -c $(SRCDIR)/th_lang.c -o $(OBJDIR)/th_lang.o
996
997
--- win/Makefile.mingw
+++ win/Makefile.mingw
@@ -111,10 +111,11 @@
111 $(SRCDIR)/http_ssl.c \
112 $(SRCDIR)/http_transport.c \
113 $(SRCDIR)/import.c \
114 $(SRCDIR)/info.c \
115 $(SRCDIR)/json.c \
116 $(SRCDIR)/json_login.c \
117 $(SRCDIR)/leaf.c \
118 $(SRCDIR)/login.c \
119 $(SRCDIR)/main.c \
120 $(SRCDIR)/manifest.c \
121 $(SRCDIR)/md5.c \
@@ -196,10 +197,11 @@
197 $(OBJDIR)/http_ssl_.c \
198 $(OBJDIR)/http_transport_.c \
199 $(OBJDIR)/import_.c \
200 $(OBJDIR)/info_.c \
201 $(OBJDIR)/json_.c \
202 $(OBJDIR)/json_login_.c \
203 $(OBJDIR)/leaf_.c \
204 $(OBJDIR)/login_.c \
205 $(OBJDIR)/main_.c \
206 $(OBJDIR)/manifest_.c \
207 $(OBJDIR)/md5_.c \
@@ -281,10 +283,11 @@
283 $(OBJDIR)/http_ssl.o \
284 $(OBJDIR)/http_transport.o \
285 $(OBJDIR)/import.o \
286 $(OBJDIR)/info.o \
287 $(OBJDIR)/json.o \
288 $(OBJDIR)/json_login.o \
289 $(OBJDIR)/leaf.o \
290 $(OBJDIR)/login.o \
291 $(OBJDIR)/main.o \
292 $(OBJDIR)/manifest.o \
293 $(OBJDIR)/md5.o \
@@ -391,11 +394,11 @@
394
395
396 $(OBJDIR)/page_index.h: $(TRANS_SRC) $(OBJDIR)/mkindex
397 $(MKINDEX) $(TRANS_SRC) >$@
398 $(OBJDIR)/headers: $(OBJDIR)/page_index.h $(OBJDIR)/makeheaders $(OBJDIR)/VERSION.h
399 $(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)/json_.c:$(OBJDIR)/json.h $(OBJDIR)/json_login_.c:$(OBJDIR)/json_login.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
400 echo Done >$(OBJDIR)/headers
401
402 $(OBJDIR)/headers: Makefile
403 Makefile:
404 $(OBJDIR)/add_.c: $(SRCDIR)/add.c $(OBJDIR)/translate
@@ -669,10 +672,17 @@
672
673 $(OBJDIR)/json.o: $(OBJDIR)/json_.c $(OBJDIR)/json.h $(SRCDIR)/config.h
674 $(XTCC) -o $(OBJDIR)/json.o -c $(OBJDIR)/json_.c
675
676 json.h: $(OBJDIR)/headers
677 $(OBJDIR)/json_login_.c: $(SRCDIR)/json_login.c $(OBJDIR)/translate
678 $(TRANSLATE) $(SRCDIR)/json_login.c >$(OBJDIR)/json_login_.c
679
680 $(OBJDIR)/json_login.o: $(OBJDIR)/json_login_.c $(OBJDIR)/json_login.h $(SRCDIR)/config.h
681 $(XTCC) -o $(OBJDIR)/json_login.o -c $(OBJDIR)/json_login_.c
682
683 json_login.h: $(OBJDIR)/headers
684 $(OBJDIR)/leaf_.c: $(SRCDIR)/leaf.c $(OBJDIR)/translate
685 $(TRANSLATE) $(SRCDIR)/leaf.c >$(OBJDIR)/leaf_.c
686
687 $(OBJDIR)/leaf.o: $(OBJDIR)/leaf_.c $(OBJDIR)/leaf.h $(SRCDIR)/config.h
688 $(XTCC) -o $(OBJDIR)/leaf.o -c $(OBJDIR)/leaf_.c
@@ -983,14 +993,15 @@
993 $(XTCC) -DSQLITE_OMIT_LOAD_EXTENSION=1 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_STAT3 -Dlocaltime=fossil_localtime -DSQLITE_ENABLE_LOCKING_STYLE=0 -c $(SRCDIR)/sqlite3.c -o $(OBJDIR)/sqlite3.o
994
995 $(OBJDIR)/cson_amalgamation.o: $(SRCDIR)/cson_amalgamation.c
996 $(XTCC) -c $(SRCDIR)/cson_amalgamation.c -o $(OBJDIR)/cson_amalgamation.o
997
998 $(OBJDIR)/json.o $(OBJDIR)/json_login.o : $(SRCDIR)/json_detail.h
999 $(OBJDIR)/shell.o: $(SRCDIR)/shell.c $(SRCDIR)/sqlite3.h
1000 $(XTCC) -Dmain=sqlite3_shell -DSQLITE_OMIT_LOAD_EXTENSION=1 -c $(SRCDIR)/shell.c -o $(OBJDIR)/shell.o
1001
1002 $(OBJDIR)/th.o: $(SRCDIR)/th.c
1003 $(XTCC) -I$(SRCDIR) -c $(SRCDIR)/th.c -o $(OBJDIR)/th.o
1004
1005 $(OBJDIR)/th_lang.o: $(SRCDIR)/th_lang.c
1006 $(XTCC) -I$(SRCDIR) -c $(SRCDIR)/th_lang.c -o $(OBJDIR)/th_lang.o
1007
1008
+15 -8
--- win/Makefile.msc
+++ win/Makefile.msc
@@ -36,13 +36,13 @@
3636
LIBS = $(ZLIB) ws2_32.lib advapi32.lib $(SSLLIB)
3737
LIBDIR = -LIBPATH:$(MSCDIR)\extra\lib -LIBPATH:$(ZLIBDIR)
3838
3939
SQLITE_OPTIONS = /DSQLITE_OMIT_LOAD_EXTENSION=1 /DSQLITE_THREADSAFE=0 /DSQLITE_DEFAULT_FILE_FORMAT=4 /DSQLITE_ENABLE_STAT3 /Dlocaltime=fossil_localtime /DSQLITE_ENABLE_LOCKING_STYLE=0
4040
41
-SRC = add_.c allrepo_.c attach_.c bag_.c bisect_.c blob_.c branch_.c browse_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c db_.c delta_.c deltacmd_.c descendants_.c diff_.c diffcmd_.c doc_.c encode_.c event_.c export_.c file_.c finfo_.c glob_.c graph_.c gzip_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c json_.c leaf_.c login_.c main_.c manifest_.c md5_.c merge_.c merge3_.c name_.c path_.c pivot_.c popen_.c pqueue_.c printf_.c rebuild_.c report_.c rss_.c schema_.c search_.c setup_.c sha1_.c shun_.c skins_.c sqlcmd_.c stash_.c stat_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c update_.c url_.c user_.c verify_.c vfile_.c wiki_.c wikiformat_.c winhttp_.c xfer_.c zip_.c
41
+SRC = add_.c allrepo_.c attach_.c bag_.c bisect_.c blob_.c branch_.c browse_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c db_.c delta_.c deltacmd_.c descendants_.c diff_.c diffcmd_.c doc_.c encode_.c event_.c export_.c file_.c finfo_.c glob_.c graph_.c gzip_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c json_.c json_login_.c leaf_.c login_.c main_.c manifest_.c md5_.c merge_.c merge3_.c name_.c path_.c pivot_.c popen_.c pqueue_.c printf_.c rebuild_.c report_.c rss_.c schema_.c search_.c setup_.c sha1_.c shun_.c skins_.c sqlcmd_.c stash_.c stat_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c update_.c url_.c user_.c verify_.c vfile_.c wiki_.c wikiformat_.c winhttp_.c xfer_.c zip_.c
4242
43
-OBJ = $(OX)\add$O $(OX)\allrepo$O $(OX)\attach$O $(OX)\bag$O $(OX)\bisect$O $(OX)\blob$O $(OX)\branch$O $(OX)\browse$O $(OX)\captcha$O $(OX)\cgi$O $(OX)\checkin$O $(OX)\checkout$O $(OX)\clearsign$O $(OX)\clone$O $(OX)\comformat$O $(OX)\configure$O $(OX)\content$O $(OX)\db$O $(OX)\delta$O $(OX)\deltacmd$O $(OX)\descendants$O $(OX)\diff$O $(OX)\diffcmd$O $(OX)\doc$O $(OX)\encode$O $(OX)\event$O $(OX)\export$O $(OX)\file$O $(OX)\finfo$O $(OX)\glob$O $(OX)\graph$O $(OX)\gzip$O $(OX)\http$O $(OX)\http_socket$O $(OX)\http_ssl$O $(OX)\http_transport$O $(OX)\import$O $(OX)\info$O $(OX)\json$O $(OX)\leaf$O $(OX)\login$O $(OX)\main$O $(OX)\manifest$O $(OX)\md5$O $(OX)\merge$O $(OX)\merge3$O $(OX)\name$O $(OX)\path$O $(OX)\pivot$O $(OX)\popen$O $(OX)\pqueue$O $(OX)\printf$O $(OX)\rebuild$O $(OX)\report$O $(OX)\rss$O $(OX)\schema$O $(OX)\search$O $(OX)\setup$O $(OX)\sha1$O $(OX)\shun$O $(OX)\skins$O $(OX)\sqlcmd$O $(OX)\stash$O $(OX)\stat$O $(OX)\style$O $(OX)\sync$O $(OX)\tag$O $(OX)\tar$O $(OX)\th_main$O $(OX)\timeline$O $(OX)\tkt$O $(OX)\tktsetup$O $(OX)\undo$O $(OX)\update$O $(OX)\url$O $(OX)\user$O $(OX)\verify$O $(OX)\vfile$O $(OX)\wiki$O $(OX)\wikiformat$O $(OX)\winhttp$O $(OX)\xfer$O $(OX)\zip$O $(OX)\shell$O $(OX)\sqlite3$O $(OX)\th$O $(OX)\th_lang$O $(OX)\cson_amalgamation$O
43
+OBJ = $(OX)\add$O $(OX)\allrepo$O $(OX)\attach$O $(OX)\bag$O $(OX)\bisect$O $(OX)\blob$O $(OX)\branch$O $(OX)\browse$O $(OX)\captcha$O $(OX)\cgi$O $(OX)\checkin$O $(OX)\checkout$O $(OX)\clearsign$O $(OX)\clone$O $(OX)\comformat$O $(OX)\configure$O $(OX)\content$O $(OX)\db$O $(OX)\delta$O $(OX)\deltacmd$O $(OX)\descendants$O $(OX)\diff$O $(OX)\diffcmd$O $(OX)\doc$O $(OX)\encode$O $(OX)\event$O $(OX)\export$O $(OX)\file$O $(OX)\finfo$O $(OX)\glob$O $(OX)\graph$O $(OX)\gzip$O $(OX)\http$O $(OX)\http_socket$O $(OX)\http_ssl$O $(OX)\http_transport$O $(OX)\import$O $(OX)\info$O $(OX)\json$O $(OX)\json_login$O $(OX)\leaf$O $(OX)\login$O $(OX)\main$O $(OX)\manifest$O $(OX)\md5$O $(OX)\merge$O $(OX)\merge3$O $(OX)\name$O $(OX)\path$O $(OX)\pivot$O $(OX)\popen$O $(OX)\pqueue$O $(OX)\printf$O $(OX)\rebuild$O $(OX)\report$O $(OX)\rss$O $(OX)\schema$O $(OX)\search$O $(OX)\setup$O $(OX)\sha1$O $(OX)\shun$O $(OX)\skins$O $(OX)\sqlcmd$O $(OX)\stash$O $(OX)\stat$O $(OX)\style$O $(OX)\sync$O $(OX)\tag$O $(OX)\tar$O $(OX)\th_main$O $(OX)\timeline$O $(OX)\tkt$O $(OX)\tktsetup$O $(OX)\undo$O $(OX)\update$O $(OX)\url$O $(OX)\user$O $(OX)\verify$O $(OX)\vfile$O $(OX)\wiki$O $(OX)\wikiformat$O $(OX)\winhttp$O $(OX)\xfer$O $(OX)\zip$O $(OX)\shell$O $(OX)\sqlite3$O $(OX)\th$O $(OX)\th_lang$O
4444
4545
4646
APPNAME = $(OX)\fossil$(E)
4747
4848
all: $(OX) $(APPNAME)
@@ -67,11 +67,10 @@
6767
echo $(OX)\clearsign.obj >> $@
6868
echo $(OX)\clone.obj >> $@
6969
echo $(OX)\comformat.obj >> $@
7070
echo $(OX)\configure.obj >> $@
7171
echo $(OX)\content.obj >> $@
72
- echo $(OX)\cson_amalgamation.obj >> $@
7372
echo $(OX)\db.obj >> $@
7473
echo $(OX)\delta.obj >> $@
7574
echo $(OX)\deltacmd.obj >> $@
7675
echo $(OX)\descendants.obj >> $@
7776
echo $(OX)\diff.obj >> $@
@@ -90,10 +89,11 @@
9089
echo $(OX)\http_ssl.obj >> $@
9190
echo $(OX)\http_transport.obj >> $@
9291
echo $(OX)\import.obj >> $@
9392
echo $(OX)\info.obj >> $@
9493
echo $(OX)\json.obj >> $@
94
+ echo $(OX)\json_login.obj >> $@
9595
echo $(OX)\leaf.obj >> $@
9696
echo $(OX)\login.obj >> $@
9797
echo $(OX)\main.obj >> $@
9898
echo $(OX)\manifest.obj >> $@
9999
echo $(OX)\md5.obj >> $@
@@ -169,17 +169,15 @@
169169
$(OX)\th$O : $(SRCDIR)\th.c
170170
$(TCC) /Fo$@ -c $**
171171
172172
$(OX)\th_lang$O : $(SRCDIR)\th_lang.c
173173
$(TCC) /Fo$@ -c $**
174
-
175
-$(OX)\cson_amalgamation$O : $(SRCDIR)\cson_amalgamation.c
176
- $(TCC) /Fo$@ -c $**
177
-
178174
179175
VERSION.h : mkversion$E $B\manifest.uuid $B\manifest $B\VERSION
180176
$** > $@
177
+$(OBJDIR)\cson_amalgamation.h : $(SRCDIR)\cson_amalgamation.h
178
+ cp $(SRCDIR)\cson_amalgamation.h $@
181179
182180
page_index.h: mkindex$E $(SRC)
183181
$** > $@
184182
185183
clean:
@@ -188,10 +186,13 @@
188186
-del headers linkopts
189187
190188
realclean:
191189
-del $(APPNAME) translate$E mkindex$E makeheaders$E mkversion$E
192190
191
+$(OBJDIR)\json$O : $(SRCDIR)\json_detail.h
192
+$(OBJDIR)\json_login$O : $(SRCDIR)\json_detail.h
193
+
193194
194195
$(OX)\add$O : add_.c add.h
195196
$(TCC) /Fo$@ -c add_.c
196197
197198
add_.c : $(SRCDIR)\add.c
@@ -422,10 +423,16 @@
422423
$(OX)\json$O : json_.c json.h
423424
$(TCC) /Fo$@ -c json_.c
424425
425426
json_.c : $(SRCDIR)\json.c
426427
translate$E $** > $@
428
+
429
+$(OX)\json_login$O : json_login_.c json_login.h
430
+ $(TCC) /Fo$@ -c json_login_.c
431
+
432
+json_login_.c : $(SRCDIR)\json_login.c
433
+ translate$E $** > $@
427434
428435
$(OX)\leaf$O : leaf_.c leaf.h
429436
$(TCC) /Fo$@ -c leaf_.c
430437
431438
leaf_.c : $(SRCDIR)\leaf.c
@@ -688,7 +695,7 @@
688695
689696
zip_.c : $(SRCDIR)\zip.c
690697
translate$E $** > $@
691698
692699
headers: makeheaders$E page_index.h VERSION.h
693
- makeheaders$E add_.c:add.h allrepo_.c:allrepo.h attach_.c:attach.h bag_.c:bag.h bisect_.c:bisect.h blob_.c:blob.h branch_.c:branch.h browse_.c:browse.h captcha_.c:captcha.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h configure_.c:configure.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendants_.c:descendants.h diff_.c:diff.h diffcmd_.c:diffcmd.h doc_.c:doc.h encode_.c:encode.h event_.c:event.h export_.c:export.h file_.c:file.h finfo_.c:finfo.h glob_.c:glob.h graph_.c:graph.h gzip_.c:gzip.h http_.c:http.h http_socket_.c:http_socket.h http_ssl_.c:http_ssl.h http_transport_.c:http_transport.h import_.c:import.h info_.c:info.h json_.c:json.h leaf_.c:leaf.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h path_.c:path.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h setup_.c:setup.h sha1_.c:sha1.h shun_.c:shun.h skins_.c:skins.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h style_.c:style.h sync_.c:sync.h tag_.c:tag.h tar_.c:tar.h th_main_.c:th_main.h timeline_.c:timeline.h tkt_.c:tkt.h tktsetup_.c:tktsetup.h undo_.c:undo.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h winhttp_.c:winhttp.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)\sqlite3.h $(SRCDIR)\th.h VERSION.h $(SRCDIR)\cson_amalgamation.h
700
+ makeheaders$E add_.c:add.h allrepo_.c:allrepo.h attach_.c:attach.h bag_.c:bag.h bisect_.c:bisect.h blob_.c:blob.h branch_.c:branch.h browse_.c:browse.h captcha_.c:captcha.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h configure_.c:configure.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendants_.c:descendants.h diff_.c:diff.h diffcmd_.c:diffcmd.h doc_.c:doc.h encode_.c:encode.h event_.c:event.h export_.c:export.h file_.c:file.h finfo_.c:finfo.h glob_.c:glob.h graph_.c:graph.h gzip_.c:gzip.h http_.c:http.h http_socket_.c:http_socket.h http_ssl_.c:http_ssl.h http_transport_.c:http_transport.h import_.c:import.h info_.c:info.h json_.c:json.h json_login_.c:json_login.h leaf_.c:leaf.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h path_.c:path.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h setup_.c:setup.h sha1_.c:sha1.h shun_.c:shun.h skins_.c:skins.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h style_.c:style.h sync_.c:sync.h tag_.c:tag.h tar_.c:tar.h th_main_.c:th_main.h timeline_.c:timeline.h tkt_.c:tkt.h tktsetup_.c:tktsetup.h undo_.c:undo.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h winhttp_.c:winhttp.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)\sqlite3.h $(SRCDIR)\th.h VERSION.h $(SRCDIR)\cson_amalgamation.h
694701
@copy /Y nul: headers
695702
--- win/Makefile.msc
+++ win/Makefile.msc
@@ -36,13 +36,13 @@
36 LIBS = $(ZLIB) ws2_32.lib advapi32.lib $(SSLLIB)
37 LIBDIR = -LIBPATH:$(MSCDIR)\extra\lib -LIBPATH:$(ZLIBDIR)
38
39 SQLITE_OPTIONS = /DSQLITE_OMIT_LOAD_EXTENSION=1 /DSQLITE_THREADSAFE=0 /DSQLITE_DEFAULT_FILE_FORMAT=4 /DSQLITE_ENABLE_STAT3 /Dlocaltime=fossil_localtime /DSQLITE_ENABLE_LOCKING_STYLE=0
40
41 SRC = add_.c allrepo_.c attach_.c bag_.c bisect_.c blob_.c branch_.c browse_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c db_.c delta_.c deltacmd_.c descendants_.c diff_.c diffcmd_.c doc_.c encode_.c event_.c export_.c file_.c finfo_.c glob_.c graph_.c gzip_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c json_.c leaf_.c login_.c main_.c manifest_.c md5_.c merge_.c merge3_.c name_.c path_.c pivot_.c popen_.c pqueue_.c printf_.c rebuild_.c report_.c rss_.c schema_.c search_.c setup_.c sha1_.c shun_.c skins_.c sqlcmd_.c stash_.c stat_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c update_.c url_.c user_.c verify_.c vfile_.c wiki_.c wikiformat_.c winhttp_.c xfer_.c zip_.c
42
43 OBJ = $(OX)\add$O $(OX)\allrepo$O $(OX)\attach$O $(OX)\bag$O $(OX)\bisect$O $(OX)\blob$O $(OX)\branch$O $(OX)\browse$O $(OX)\captcha$O $(OX)\cgi$O $(OX)\checkin$O $(OX)\checkout$O $(OX)\clearsign$O $(OX)\clone$O $(OX)\comformat$O $(OX)\configure$O $(OX)\content$O $(OX)\db$O $(OX)\delta$O $(OX)\deltacmd$O $(OX)\descendants$O $(OX)\diff$O $(OX)\diffcmd$O $(OX)\doc$O $(OX)\encode$O $(OX)\event$O $(OX)\export$O $(OX)\file$O $(OX)\finfo$O $(OX)\glob$O $(OX)\graph$O $(OX)\gzip$O $(OX)\http$O $(OX)\http_socket$O $(OX)\http_ssl$O $(OX)\http_transport$O $(OX)\import$O $(OX)\info$O $(OX)\json$O $(OX)\leaf$O $(OX)\login$O $(OX)\main$O $(OX)\manifest$O $(OX)\md5$O $(OX)\merge$O $(OX)\merge3$O $(OX)\name$O $(OX)\path$O $(OX)\pivot$O $(OX)\popen$O $(OX)\pqueue$O $(OX)\printf$O $(OX)\rebuild$O $(OX)\report$O $(OX)\rss$O $(OX)\schema$O $(OX)\search$O $(OX)\setup$O $(OX)\sha1$O $(OX)\shun$O $(OX)\skins$O $(OX)\sqlcmd$O $(OX)\stash$O $(OX)\stat$O $(OX)\style$O $(OX)\sync$O $(OX)\tag$O $(OX)\tar$O $(OX)\th_main$O $(OX)\timeline$O $(OX)\tkt$O $(OX)\tktsetup$O $(OX)\undo$O $(OX)\update$O $(OX)\url$O $(OX)\user$O $(OX)\verify$O $(OX)\vfile$O $(OX)\wiki$O $(OX)\wikiformat$O $(OX)\winhttp$O $(OX)\xfer$O $(OX)\zip$O $(OX)\shell$O $(OX)\sqlite3$O $(OX)\th$O $(OX)\th_lang$O $(OX)\cson_amalgamation$O
44
45
46 APPNAME = $(OX)\fossil$(E)
47
48 all: $(OX) $(APPNAME)
@@ -67,11 +67,10 @@
67 echo $(OX)\clearsign.obj >> $@
68 echo $(OX)\clone.obj >> $@
69 echo $(OX)\comformat.obj >> $@
70 echo $(OX)\configure.obj >> $@
71 echo $(OX)\content.obj >> $@
72 echo $(OX)\cson_amalgamation.obj >> $@
73 echo $(OX)\db.obj >> $@
74 echo $(OX)\delta.obj >> $@
75 echo $(OX)\deltacmd.obj >> $@
76 echo $(OX)\descendants.obj >> $@
77 echo $(OX)\diff.obj >> $@
@@ -90,10 +89,11 @@
90 echo $(OX)\http_ssl.obj >> $@
91 echo $(OX)\http_transport.obj >> $@
92 echo $(OX)\import.obj >> $@
93 echo $(OX)\info.obj >> $@
94 echo $(OX)\json.obj >> $@
 
95 echo $(OX)\leaf.obj >> $@
96 echo $(OX)\login.obj >> $@
97 echo $(OX)\main.obj >> $@
98 echo $(OX)\manifest.obj >> $@
99 echo $(OX)\md5.obj >> $@
@@ -169,17 +169,15 @@
169 $(OX)\th$O : $(SRCDIR)\th.c
170 $(TCC) /Fo$@ -c $**
171
172 $(OX)\th_lang$O : $(SRCDIR)\th_lang.c
173 $(TCC) /Fo$@ -c $**
174
175 $(OX)\cson_amalgamation$O : $(SRCDIR)\cson_amalgamation.c
176 $(TCC) /Fo$@ -c $**
177
178
179 VERSION.h : mkversion$E $B\manifest.uuid $B\manifest $B\VERSION
180 $** > $@
 
 
181
182 page_index.h: mkindex$E $(SRC)
183 $** > $@
184
185 clean:
@@ -188,10 +186,13 @@
188 -del headers linkopts
189
190 realclean:
191 -del $(APPNAME) translate$E mkindex$E makeheaders$E mkversion$E
192
 
 
 
193
194 $(OX)\add$O : add_.c add.h
195 $(TCC) /Fo$@ -c add_.c
196
197 add_.c : $(SRCDIR)\add.c
@@ -422,10 +423,16 @@
422 $(OX)\json$O : json_.c json.h
423 $(TCC) /Fo$@ -c json_.c
424
425 json_.c : $(SRCDIR)\json.c
426 translate$E $** > $@
 
 
 
 
 
 
427
428 $(OX)\leaf$O : leaf_.c leaf.h
429 $(TCC) /Fo$@ -c leaf_.c
430
431 leaf_.c : $(SRCDIR)\leaf.c
@@ -688,7 +695,7 @@
688
689 zip_.c : $(SRCDIR)\zip.c
690 translate$E $** > $@
691
692 headers: makeheaders$E page_index.h VERSION.h
693 makeheaders$E add_.c:add.h allrepo_.c:allrepo.h attach_.c:attach.h bag_.c:bag.h bisect_.c:bisect.h blob_.c:blob.h branch_.c:branch.h browse_.c:browse.h captcha_.c:captcha.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h configure_.c:configure.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendants_.c:descendants.h diff_.c:diff.h diffcmd_.c:diffcmd.h doc_.c:doc.h encode_.c:encode.h event_.c:event.h export_.c:export.h file_.c:file.h finfo_.c:finfo.h glob_.c:glob.h graph_.c:graph.h gzip_.c:gzip.h http_.c:http.h http_socket_.c:http_socket.h http_ssl_.c:http_ssl.h http_transport_.c:http_transport.h import_.c:import.h info_.c:info.h json_.c:json.h leaf_.c:leaf.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h path_.c:path.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h setup_.c:setup.h sha1_.c:sha1.h shun_.c:shun.h skins_.c:skins.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h style_.c:style.h sync_.c:sync.h tag_.c:tag.h tar_.c:tar.h th_main_.c:th_main.h timeline_.c:timeline.h tkt_.c:tkt.h tktsetup_.c:tktsetup.h undo_.c:undo.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h winhttp_.c:winhttp.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)\sqlite3.h $(SRCDIR)\th.h VERSION.h $(SRCDIR)\cson_amalgamation.h
694 @copy /Y nul: headers
695
--- win/Makefile.msc
+++ win/Makefile.msc
@@ -36,13 +36,13 @@
36 LIBS = $(ZLIB) ws2_32.lib advapi32.lib $(SSLLIB)
37 LIBDIR = -LIBPATH:$(MSCDIR)\extra\lib -LIBPATH:$(ZLIBDIR)
38
39 SQLITE_OPTIONS = /DSQLITE_OMIT_LOAD_EXTENSION=1 /DSQLITE_THREADSAFE=0 /DSQLITE_DEFAULT_FILE_FORMAT=4 /DSQLITE_ENABLE_STAT3 /Dlocaltime=fossil_localtime /DSQLITE_ENABLE_LOCKING_STYLE=0
40
41 SRC = add_.c allrepo_.c attach_.c bag_.c bisect_.c blob_.c branch_.c browse_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c db_.c delta_.c deltacmd_.c descendants_.c diff_.c diffcmd_.c doc_.c encode_.c event_.c export_.c file_.c finfo_.c glob_.c graph_.c gzip_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c json_.c json_login_.c leaf_.c login_.c main_.c manifest_.c md5_.c merge_.c merge3_.c name_.c path_.c pivot_.c popen_.c pqueue_.c printf_.c rebuild_.c report_.c rss_.c schema_.c search_.c setup_.c sha1_.c shun_.c skins_.c sqlcmd_.c stash_.c stat_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c update_.c url_.c user_.c verify_.c vfile_.c wiki_.c wikiformat_.c winhttp_.c xfer_.c zip_.c
42
43 OBJ = $(OX)\add$O $(OX)\allrepo$O $(OX)\attach$O $(OX)\bag$O $(OX)\bisect$O $(OX)\blob$O $(OX)\branch$O $(OX)\browse$O $(OX)\captcha$O $(OX)\cgi$O $(OX)\checkin$O $(OX)\checkout$O $(OX)\clearsign$O $(OX)\clone$O $(OX)\comformat$O $(OX)\configure$O $(OX)\content$O $(OX)\db$O $(OX)\delta$O $(OX)\deltacmd$O $(OX)\descendants$O $(OX)\diff$O $(OX)\diffcmd$O $(OX)\doc$O $(OX)\encode$O $(OX)\event$O $(OX)\export$O $(OX)\file$O $(OX)\finfo$O $(OX)\glob$O $(OX)\graph$O $(OX)\gzip$O $(OX)\http$O $(OX)\http_socket$O $(OX)\http_ssl$O $(OX)\http_transport$O $(OX)\import$O $(OX)\info$O $(OX)\json$O $(OX)\json_login$O $(OX)\leaf$O $(OX)\login$O $(OX)\main$O $(OX)\manifest$O $(OX)\md5$O $(OX)\merge$O $(OX)\merge3$O $(OX)\name$O $(OX)\path$O $(OX)\pivot$O $(OX)\popen$O $(OX)\pqueue$O $(OX)\printf$O $(OX)\rebuild$O $(OX)\report$O $(OX)\rss$O $(OX)\schema$O $(OX)\search$O $(OX)\setup$O $(OX)\sha1$O $(OX)\shun$O $(OX)\skins$O $(OX)\sqlcmd$O $(OX)\stash$O $(OX)\stat$O $(OX)\style$O $(OX)\sync$O $(OX)\tag$O $(OX)\tar$O $(OX)\th_main$O $(OX)\timeline$O $(OX)\tkt$O $(OX)\tktsetup$O $(OX)\undo$O $(OX)\update$O $(OX)\url$O $(OX)\user$O $(OX)\verify$O $(OX)\vfile$O $(OX)\wiki$O $(OX)\wikiformat$O $(OX)\winhttp$O $(OX)\xfer$O $(OX)\zip$O $(OX)\shell$O $(OX)\sqlite3$O $(OX)\th$O $(OX)\th_lang$O
44
45
46 APPNAME = $(OX)\fossil$(E)
47
48 all: $(OX) $(APPNAME)
@@ -67,11 +67,10 @@
67 echo $(OX)\clearsign.obj >> $@
68 echo $(OX)\clone.obj >> $@
69 echo $(OX)\comformat.obj >> $@
70 echo $(OX)\configure.obj >> $@
71 echo $(OX)\content.obj >> $@
 
72 echo $(OX)\db.obj >> $@
73 echo $(OX)\delta.obj >> $@
74 echo $(OX)\deltacmd.obj >> $@
75 echo $(OX)\descendants.obj >> $@
76 echo $(OX)\diff.obj >> $@
@@ -90,10 +89,11 @@
89 echo $(OX)\http_ssl.obj >> $@
90 echo $(OX)\http_transport.obj >> $@
91 echo $(OX)\import.obj >> $@
92 echo $(OX)\info.obj >> $@
93 echo $(OX)\json.obj >> $@
94 echo $(OX)\json_login.obj >> $@
95 echo $(OX)\leaf.obj >> $@
96 echo $(OX)\login.obj >> $@
97 echo $(OX)\main.obj >> $@
98 echo $(OX)\manifest.obj >> $@
99 echo $(OX)\md5.obj >> $@
@@ -169,17 +169,15 @@
169 $(OX)\th$O : $(SRCDIR)\th.c
170 $(TCC) /Fo$@ -c $**
171
172 $(OX)\th_lang$O : $(SRCDIR)\th_lang.c
173 $(TCC) /Fo$@ -c $**
 
 
 
 
174
175 VERSION.h : mkversion$E $B\manifest.uuid $B\manifest $B\VERSION
176 $** > $@
177 $(OBJDIR)\cson_amalgamation.h : $(SRCDIR)\cson_amalgamation.h
178 cp $(SRCDIR)\cson_amalgamation.h $@
179
180 page_index.h: mkindex$E $(SRC)
181 $** > $@
182
183 clean:
@@ -188,10 +186,13 @@
186 -del headers linkopts
187
188 realclean:
189 -del $(APPNAME) translate$E mkindex$E makeheaders$E mkversion$E
190
191 $(OBJDIR)\json$O : $(SRCDIR)\json_detail.h
192 $(OBJDIR)\json_login$O : $(SRCDIR)\json_detail.h
193
194
195 $(OX)\add$O : add_.c add.h
196 $(TCC) /Fo$@ -c add_.c
197
198 add_.c : $(SRCDIR)\add.c
@@ -422,10 +423,16 @@
423 $(OX)\json$O : json_.c json.h
424 $(TCC) /Fo$@ -c json_.c
425
426 json_.c : $(SRCDIR)\json.c
427 translate$E $** > $@
428
429 $(OX)\json_login$O : json_login_.c json_login.h
430 $(TCC) /Fo$@ -c json_login_.c
431
432 json_login_.c : $(SRCDIR)\json_login.c
433 translate$E $** > $@
434
435 $(OX)\leaf$O : leaf_.c leaf.h
436 $(TCC) /Fo$@ -c leaf_.c
437
438 leaf_.c : $(SRCDIR)\leaf.c
@@ -688,7 +695,7 @@
695
696 zip_.c : $(SRCDIR)\zip.c
697 translate$E $** > $@
698
699 headers: makeheaders$E page_index.h VERSION.h
700 makeheaders$E add_.c:add.h allrepo_.c:allrepo.h attach_.c:attach.h bag_.c:bag.h bisect_.c:bisect.h blob_.c:blob.h branch_.c:branch.h browse_.c:browse.h captcha_.c:captcha.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h configure_.c:configure.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendants_.c:descendants.h diff_.c:diff.h diffcmd_.c:diffcmd.h doc_.c:doc.h encode_.c:encode.h event_.c:event.h export_.c:export.h file_.c:file.h finfo_.c:finfo.h glob_.c:glob.h graph_.c:graph.h gzip_.c:gzip.h http_.c:http.h http_socket_.c:http_socket.h http_ssl_.c:http_ssl.h http_transport_.c:http_transport.h import_.c:import.h info_.c:info.h json_.c:json.h json_login_.c:json_login.h leaf_.c:leaf.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h path_.c:path.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h setup_.c:setup.h sha1_.c:sha1.h shun_.c:shun.h skins_.c:skins.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h style_.c:style.h sync_.c:sync.h tag_.c:tag.h tar_.c:tar.h th_main_.c:th_main.h timeline_.c:timeline.h tkt_.c:tkt.h tktsetup_.c:tktsetup.h undo_.c:undo.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h winhttp_.c:winhttp.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)\sqlite3.h $(SRCDIR)\th.h VERSION.h $(SRCDIR)\cson_amalgamation.h
701 @copy /Y nul: headers
702
+15 -8
--- win/Makefile.msc
+++ win/Makefile.msc
@@ -36,13 +36,13 @@
3636
LIBS = $(ZLIB) ws2_32.lib advapi32.lib $(SSLLIB)
3737
LIBDIR = -LIBPATH:$(MSCDIR)\extra\lib -LIBPATH:$(ZLIBDIR)
3838
3939
SQLITE_OPTIONS = /DSQLITE_OMIT_LOAD_EXTENSION=1 /DSQLITE_THREADSAFE=0 /DSQLITE_DEFAULT_FILE_FORMAT=4 /DSQLITE_ENABLE_STAT3 /Dlocaltime=fossil_localtime /DSQLITE_ENABLE_LOCKING_STYLE=0
4040
41
-SRC = add_.c allrepo_.c attach_.c bag_.c bisect_.c blob_.c branch_.c browse_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c db_.c delta_.c deltacmd_.c descendants_.c diff_.c diffcmd_.c doc_.c encode_.c event_.c export_.c file_.c finfo_.c glob_.c graph_.c gzip_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c json_.c leaf_.c login_.c main_.c manifest_.c md5_.c merge_.c merge3_.c name_.c path_.c pivot_.c popen_.c pqueue_.c printf_.c rebuild_.c report_.c rss_.c schema_.c search_.c setup_.c sha1_.c shun_.c skins_.c sqlcmd_.c stash_.c stat_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c update_.c url_.c user_.c verify_.c vfile_.c wiki_.c wikiformat_.c winhttp_.c xfer_.c zip_.c
41
+SRC = add_.c allrepo_.c attach_.c bag_.c bisect_.c blob_.c branch_.c browse_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c db_.c delta_.c deltacmd_.c descendants_.c diff_.c diffcmd_.c doc_.c encode_.c event_.c export_.c file_.c finfo_.c glob_.c graph_.c gzip_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c json_.c json_login_.c leaf_.c login_.c main_.c manifest_.c md5_.c merge_.c merge3_.c name_.c path_.c pivot_.c popen_.c pqueue_.c printf_.c rebuild_.c report_.c rss_.c schema_.c search_.c setup_.c sha1_.c shun_.c skins_.c sqlcmd_.c stash_.c stat_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c update_.c url_.c user_.c verify_.c vfile_.c wiki_.c wikiformat_.c winhttp_.c xfer_.c zip_.c
4242
43
-OBJ = $(OX)\add$O $(OX)\allrepo$O $(OX)\attach$O $(OX)\bag$O $(OX)\bisect$O $(OX)\blob$O $(OX)\branch$O $(OX)\browse$O $(OX)\captcha$O $(OX)\cgi$O $(OX)\checkin$O $(OX)\checkout$O $(OX)\clearsign$O $(OX)\clone$O $(OX)\comformat$O $(OX)\configure$O $(OX)\content$O $(OX)\db$O $(OX)\delta$O $(OX)\deltacmd$O $(OX)\descendants$O $(OX)\diff$O $(OX)\diffcmd$O $(OX)\doc$O $(OX)\encode$O $(OX)\event$O $(OX)\export$O $(OX)\file$O $(OX)\finfo$O $(OX)\glob$O $(OX)\graph$O $(OX)\gzip$O $(OX)\http$O $(OX)\http_socket$O $(OX)\http_ssl$O $(OX)\http_transport$O $(OX)\import$O $(OX)\info$O $(OX)\json$O $(OX)\leaf$O $(OX)\login$O $(OX)\main$O $(OX)\manifest$O $(OX)\md5$O $(OX)\merge$O $(OX)\merge3$O $(OX)\name$O $(OX)\path$O $(OX)\pivot$O $(OX)\popen$O $(OX)\pqueue$O $(OX)\printf$O $(OX)\rebuild$O $(OX)\report$O $(OX)\rss$O $(OX)\schema$O $(OX)\search$O $(OX)\setup$O $(OX)\sha1$O $(OX)\shun$O $(OX)\skins$O $(OX)\sqlcmd$O $(OX)\stash$O $(OX)\stat$O $(OX)\style$O $(OX)\sync$O $(OX)\tag$O $(OX)\tar$O $(OX)\th_main$O $(OX)\timeline$O $(OX)\tkt$O $(OX)\tktsetup$O $(OX)\undo$O $(OX)\update$O $(OX)\url$O $(OX)\user$O $(OX)\verify$O $(OX)\vfile$O $(OX)\wiki$O $(OX)\wikiformat$O $(OX)\winhttp$O $(OX)\xfer$O $(OX)\zip$O $(OX)\shell$O $(OX)\sqlite3$O $(OX)\th$O $(OX)\th_lang$O $(OX)\cson_amalgamation$O
43
+OBJ = $(OX)\add$O $(OX)\allrepo$O $(OX)\attach$O $(OX)\bag$O $(OX)\bisect$O $(OX)\blob$O $(OX)\branch$O $(OX)\browse$O $(OX)\captcha$O $(OX)\cgi$O $(OX)\checkin$O $(OX)\checkout$O $(OX)\clearsign$O $(OX)\clone$O $(OX)\comformat$O $(OX)\configure$O $(OX)\content$O $(OX)\db$O $(OX)\delta$O $(OX)\deltacmd$O $(OX)\descendants$O $(OX)\diff$O $(OX)\diffcmd$O $(OX)\doc$O $(OX)\encode$O $(OX)\event$O $(OX)\export$O $(OX)\file$O $(OX)\finfo$O $(OX)\glob$O $(OX)\graph$O $(OX)\gzip$O $(OX)\http$O $(OX)\http_socket$O $(OX)\http_ssl$O $(OX)\http_transport$O $(OX)\import$O $(OX)\info$O $(OX)\json$O $(OX)\json_login$O $(OX)\leaf$O $(OX)\login$O $(OX)\main$O $(OX)\manifest$O $(OX)\md5$O $(OX)\merge$O $(OX)\merge3$O $(OX)\name$O $(OX)\path$O $(OX)\pivot$O $(OX)\popen$O $(OX)\pqueue$O $(OX)\printf$O $(OX)\rebuild$O $(OX)\report$O $(OX)\rss$O $(OX)\schema$O $(OX)\search$O $(OX)\setup$O $(OX)\sha1$O $(OX)\shun$O $(OX)\skins$O $(OX)\sqlcmd$O $(OX)\stash$O $(OX)\stat$O $(OX)\style$O $(OX)\sync$O $(OX)\tag$O $(OX)\tar$O $(OX)\th_main$O $(OX)\timeline$O $(OX)\tkt$O $(OX)\tktsetup$O $(OX)\undo$O $(OX)\update$O $(OX)\url$O $(OX)\user$O $(OX)\verify$O $(OX)\vfile$O $(OX)\wiki$O $(OX)\wikiformat$O $(OX)\winhttp$O $(OX)\xfer$O $(OX)\zip$O $(OX)\shell$O $(OX)\sqlite3$O $(OX)\th$O $(OX)\th_lang$O
4444
4545
4646
APPNAME = $(OX)\fossil$(E)
4747
4848
all: $(OX) $(APPNAME)
@@ -67,11 +67,10 @@
6767
echo $(OX)\clearsign.obj >> $@
6868
echo $(OX)\clone.obj >> $@
6969
echo $(OX)\comformat.obj >> $@
7070
echo $(OX)\configure.obj >> $@
7171
echo $(OX)\content.obj >> $@
72
- echo $(OX)\cson_amalgamation.obj >> $@
7372
echo $(OX)\db.obj >> $@
7473
echo $(OX)\delta.obj >> $@
7574
echo $(OX)\deltacmd.obj >> $@
7675
echo $(OX)\descendants.obj >> $@
7776
echo $(OX)\diff.obj >> $@
@@ -90,10 +89,11 @@
9089
echo $(OX)\http_ssl.obj >> $@
9190
echo $(OX)\http_transport.obj >> $@
9291
echo $(OX)\import.obj >> $@
9392
echo $(OX)\info.obj >> $@
9493
echo $(OX)\json.obj >> $@
94
+ echo $(OX)\json_login.obj >> $@
9595
echo $(OX)\leaf.obj >> $@
9696
echo $(OX)\login.obj >> $@
9797
echo $(OX)\main.obj >> $@
9898
echo $(OX)\manifest.obj >> $@
9999
echo $(OX)\md5.obj >> $@
@@ -169,17 +169,15 @@
169169
$(OX)\th$O : $(SRCDIR)\th.c
170170
$(TCC) /Fo$@ -c $**
171171
172172
$(OX)\th_lang$O : $(SRCDIR)\th_lang.c
173173
$(TCC) /Fo$@ -c $**
174
-
175
-$(OX)\cson_amalgamation$O : $(SRCDIR)\cson_amalgamation.c
176
- $(TCC) /Fo$@ -c $**
177
-
178174
179175
VERSION.h : mkversion$E $B\manifest.uuid $B\manifest $B\VERSION
180176
$** > $@
177
+$(OBJDIR)\cson_amalgamation.h : $(SRCDIR)\cson_amalgamation.h
178
+ cp $(SRCDIR)\cson_amalgamation.h $@
181179
182180
page_index.h: mkindex$E $(SRC)
183181
$** > $@
184182
185183
clean:
@@ -188,10 +186,13 @@
188186
-del headers linkopts
189187
190188
realclean:
191189
-del $(APPNAME) translate$E mkindex$E makeheaders$E mkversion$E
192190
191
+$(OBJDIR)\json$O : $(SRCDIR)\json_detail.h
192
+$(OBJDIR)\json_login$O : $(SRCDIR)\json_detail.h
193
+
193194
194195
$(OX)\add$O : add_.c add.h
195196
$(TCC) /Fo$@ -c add_.c
196197
197198
add_.c : $(SRCDIR)\add.c
@@ -422,10 +423,16 @@
422423
$(OX)\json$O : json_.c json.h
423424
$(TCC) /Fo$@ -c json_.c
424425
425426
json_.c : $(SRCDIR)\json.c
426427
translate$E $** > $@
428
+
429
+$(OX)\json_login$O : json_login_.c json_login.h
430
+ $(TCC) /Fo$@ -c json_login_.c
431
+
432
+json_login_.c : $(SRCDIR)\json_login.c
433
+ translate$E $** > $@
427434
428435
$(OX)\leaf$O : leaf_.c leaf.h
429436
$(TCC) /Fo$@ -c leaf_.c
430437
431438
leaf_.c : $(SRCDIR)\leaf.c
@@ -688,7 +695,7 @@
688695
689696
zip_.c : $(SRCDIR)\zip.c
690697
translate$E $** > $@
691698
692699
headers: makeheaders$E page_index.h VERSION.h
693
- makeheaders$E add_.c:add.h allrepo_.c:allrepo.h attach_.c:attach.h bag_.c:bag.h bisect_.c:bisect.h blob_.c:blob.h branch_.c:branch.h browse_.c:browse.h captcha_.c:captcha.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h configure_.c:configure.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendants_.c:descendants.h diff_.c:diff.h diffcmd_.c:diffcmd.h doc_.c:doc.h encode_.c:encode.h event_.c:event.h export_.c:export.h file_.c:file.h finfo_.c:finfo.h glob_.c:glob.h graph_.c:graph.h gzip_.c:gzip.h http_.c:http.h http_socket_.c:http_socket.h http_ssl_.c:http_ssl.h http_transport_.c:http_transport.h import_.c:import.h info_.c:info.h json_.c:json.h leaf_.c:leaf.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h path_.c:path.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h setup_.c:setup.h sha1_.c:sha1.h shun_.c:shun.h skins_.c:skins.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h style_.c:style.h sync_.c:sync.h tag_.c:tag.h tar_.c:tar.h th_main_.c:th_main.h timeline_.c:timeline.h tkt_.c:tkt.h tktsetup_.c:tktsetup.h undo_.c:undo.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h winhttp_.c:winhttp.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)\sqlite3.h $(SRCDIR)\th.h VERSION.h $(SRCDIR)\cson_amalgamation.h
700
+ makeheaders$E add_.c:add.h allrepo_.c:allrepo.h attach_.c:attach.h bag_.c:bag.h bisect_.c:bisect.h blob_.c:blob.h branch_.c:branch.h browse_.c:browse.h captcha_.c:captcha.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h configure_.c:configure.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendants_.c:descendants.h diff_.c:diff.h diffcmd_.c:diffcmd.h doc_.c:doc.h encode_.c:encode.h event_.c:event.h export_.c:export.h file_.c:file.h finfo_.c:finfo.h glob_.c:glob.h graph_.c:graph.h gzip_.c:gzip.h http_.c:http.h http_socket_.c:http_socket.h http_ssl_.c:http_ssl.h http_transport_.c:http_transport.h import_.c:import.h info_.c:info.h json_.c:json.h json_login_.c:json_login.h leaf_.c:leaf.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h path_.c:path.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h setup_.c:setup.h sha1_.c:sha1.h shun_.c:shun.h skins_.c:skins.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h style_.c:style.h sync_.c:sync.h tag_.c:tag.h tar_.c:tar.h th_main_.c:th_main.h timeline_.c:timeline.h tkt_.c:tkt.h tktsetup_.c:tktsetup.h undo_.c:undo.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h winhttp_.c:winhttp.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)\sqlite3.h $(SRCDIR)\th.h VERSION.h $(SRCDIR)\cson_amalgamation.h
694701
@copy /Y nul: headers
695702
--- win/Makefile.msc
+++ win/Makefile.msc
@@ -36,13 +36,13 @@
36 LIBS = $(ZLIB) ws2_32.lib advapi32.lib $(SSLLIB)
37 LIBDIR = -LIBPATH:$(MSCDIR)\extra\lib -LIBPATH:$(ZLIBDIR)
38
39 SQLITE_OPTIONS = /DSQLITE_OMIT_LOAD_EXTENSION=1 /DSQLITE_THREADSAFE=0 /DSQLITE_DEFAULT_FILE_FORMAT=4 /DSQLITE_ENABLE_STAT3 /Dlocaltime=fossil_localtime /DSQLITE_ENABLE_LOCKING_STYLE=0
40
41 SRC = add_.c allrepo_.c attach_.c bag_.c bisect_.c blob_.c branch_.c browse_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c db_.c delta_.c deltacmd_.c descendants_.c diff_.c diffcmd_.c doc_.c encode_.c event_.c export_.c file_.c finfo_.c glob_.c graph_.c gzip_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c json_.c leaf_.c login_.c main_.c manifest_.c md5_.c merge_.c merge3_.c name_.c path_.c pivot_.c popen_.c pqueue_.c printf_.c rebuild_.c report_.c rss_.c schema_.c search_.c setup_.c sha1_.c shun_.c skins_.c sqlcmd_.c stash_.c stat_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c update_.c url_.c user_.c verify_.c vfile_.c wiki_.c wikiformat_.c winhttp_.c xfer_.c zip_.c
42
43 OBJ = $(OX)\add$O $(OX)\allrepo$O $(OX)\attach$O $(OX)\bag$O $(OX)\bisect$O $(OX)\blob$O $(OX)\branch$O $(OX)\browse$O $(OX)\captcha$O $(OX)\cgi$O $(OX)\checkin$O $(OX)\checkout$O $(OX)\clearsign$O $(OX)\clone$O $(OX)\comformat$O $(OX)\configure$O $(OX)\content$O $(OX)\db$O $(OX)\delta$O $(OX)\deltacmd$O $(OX)\descendants$O $(OX)\diff$O $(OX)\diffcmd$O $(OX)\doc$O $(OX)\encode$O $(OX)\event$O $(OX)\export$O $(OX)\file$O $(OX)\finfo$O $(OX)\glob$O $(OX)\graph$O $(OX)\gzip$O $(OX)\http$O $(OX)\http_socket$O $(OX)\http_ssl$O $(OX)\http_transport$O $(OX)\import$O $(OX)\info$O $(OX)\json$O $(OX)\leaf$O $(OX)\login$O $(OX)\main$O $(OX)\manifest$O $(OX)\md5$O $(OX)\merge$O $(OX)\merge3$O $(OX)\name$O $(OX)\path$O $(OX)\pivot$O $(OX)\popen$O $(OX)\pqueue$O $(OX)\printf$O $(OX)\rebuild$O $(OX)\report$O $(OX)\rss$O $(OX)\schema$O $(OX)\search$O $(OX)\setup$O $(OX)\sha1$O $(OX)\shun$O $(OX)\skins$O $(OX)\sqlcmd$O $(OX)\stash$O $(OX)\stat$O $(OX)\style$O $(OX)\sync$O $(OX)\tag$O $(OX)\tar$O $(OX)\th_main$O $(OX)\timeline$O $(OX)\tkt$O $(OX)\tktsetup$O $(OX)\undo$O $(OX)\update$O $(OX)\url$O $(OX)\user$O $(OX)\verify$O $(OX)\vfile$O $(OX)\wiki$O $(OX)\wikiformat$O $(OX)\winhttp$O $(OX)\xfer$O $(OX)\zip$O $(OX)\shell$O $(OX)\sqlite3$O $(OX)\th$O $(OX)\th_lang$O $(OX)\cson_amalgamation$O
44
45
46 APPNAME = $(OX)\fossil$(E)
47
48 all: $(OX) $(APPNAME)
@@ -67,11 +67,10 @@
67 echo $(OX)\clearsign.obj >> $@
68 echo $(OX)\clone.obj >> $@
69 echo $(OX)\comformat.obj >> $@
70 echo $(OX)\configure.obj >> $@
71 echo $(OX)\content.obj >> $@
72 echo $(OX)\cson_amalgamation.obj >> $@
73 echo $(OX)\db.obj >> $@
74 echo $(OX)\delta.obj >> $@
75 echo $(OX)\deltacmd.obj >> $@
76 echo $(OX)\descendants.obj >> $@
77 echo $(OX)\diff.obj >> $@
@@ -90,10 +89,11 @@
90 echo $(OX)\http_ssl.obj >> $@
91 echo $(OX)\http_transport.obj >> $@
92 echo $(OX)\import.obj >> $@
93 echo $(OX)\info.obj >> $@
94 echo $(OX)\json.obj >> $@
 
95 echo $(OX)\leaf.obj >> $@
96 echo $(OX)\login.obj >> $@
97 echo $(OX)\main.obj >> $@
98 echo $(OX)\manifest.obj >> $@
99 echo $(OX)\md5.obj >> $@
@@ -169,17 +169,15 @@
169 $(OX)\th$O : $(SRCDIR)\th.c
170 $(TCC) /Fo$@ -c $**
171
172 $(OX)\th_lang$O : $(SRCDIR)\th_lang.c
173 $(TCC) /Fo$@ -c $**
174
175 $(OX)\cson_amalgamation$O : $(SRCDIR)\cson_amalgamation.c
176 $(TCC) /Fo$@ -c $**
177
178
179 VERSION.h : mkversion$E $B\manifest.uuid $B\manifest $B\VERSION
180 $** > $@
 
 
181
182 page_index.h: mkindex$E $(SRC)
183 $** > $@
184
185 clean:
@@ -188,10 +186,13 @@
188 -del headers linkopts
189
190 realclean:
191 -del $(APPNAME) translate$E mkindex$E makeheaders$E mkversion$E
192
 
 
 
193
194 $(OX)\add$O : add_.c add.h
195 $(TCC) /Fo$@ -c add_.c
196
197 add_.c : $(SRCDIR)\add.c
@@ -422,10 +423,16 @@
422 $(OX)\json$O : json_.c json.h
423 $(TCC) /Fo$@ -c json_.c
424
425 json_.c : $(SRCDIR)\json.c
426 translate$E $** > $@
 
 
 
 
 
 
427
428 $(OX)\leaf$O : leaf_.c leaf.h
429 $(TCC) /Fo$@ -c leaf_.c
430
431 leaf_.c : $(SRCDIR)\leaf.c
@@ -688,7 +695,7 @@
688
689 zip_.c : $(SRCDIR)\zip.c
690 translate$E $** > $@
691
692 headers: makeheaders$E page_index.h VERSION.h
693 makeheaders$E add_.c:add.h allrepo_.c:allrepo.h attach_.c:attach.h bag_.c:bag.h bisect_.c:bisect.h blob_.c:blob.h branch_.c:branch.h browse_.c:browse.h captcha_.c:captcha.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h configure_.c:configure.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendants_.c:descendants.h diff_.c:diff.h diffcmd_.c:diffcmd.h doc_.c:doc.h encode_.c:encode.h event_.c:event.h export_.c:export.h file_.c:file.h finfo_.c:finfo.h glob_.c:glob.h graph_.c:graph.h gzip_.c:gzip.h http_.c:http.h http_socket_.c:http_socket.h http_ssl_.c:http_ssl.h http_transport_.c:http_transport.h import_.c:import.h info_.c:info.h json_.c:json.h leaf_.c:leaf.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h path_.c:path.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h setup_.c:setup.h sha1_.c:sha1.h shun_.c:shun.h skins_.c:skins.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h style_.c:style.h sync_.c:sync.h tag_.c:tag.h tar_.c:tar.h th_main_.c:th_main.h timeline_.c:timeline.h tkt_.c:tkt.h tktsetup_.c:tktsetup.h undo_.c:undo.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h winhttp_.c:winhttp.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)\sqlite3.h $(SRCDIR)\th.h VERSION.h $(SRCDIR)\cson_amalgamation.h
694 @copy /Y nul: headers
695
--- win/Makefile.msc
+++ win/Makefile.msc
@@ -36,13 +36,13 @@
36 LIBS = $(ZLIB) ws2_32.lib advapi32.lib $(SSLLIB)
37 LIBDIR = -LIBPATH:$(MSCDIR)\extra\lib -LIBPATH:$(ZLIBDIR)
38
39 SQLITE_OPTIONS = /DSQLITE_OMIT_LOAD_EXTENSION=1 /DSQLITE_THREADSAFE=0 /DSQLITE_DEFAULT_FILE_FORMAT=4 /DSQLITE_ENABLE_STAT3 /Dlocaltime=fossil_localtime /DSQLITE_ENABLE_LOCKING_STYLE=0
40
41 SRC = add_.c allrepo_.c attach_.c bag_.c bisect_.c blob_.c branch_.c browse_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c db_.c delta_.c deltacmd_.c descendants_.c diff_.c diffcmd_.c doc_.c encode_.c event_.c export_.c file_.c finfo_.c glob_.c graph_.c gzip_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c json_.c json_login_.c leaf_.c login_.c main_.c manifest_.c md5_.c merge_.c merge3_.c name_.c path_.c pivot_.c popen_.c pqueue_.c printf_.c rebuild_.c report_.c rss_.c schema_.c search_.c setup_.c sha1_.c shun_.c skins_.c sqlcmd_.c stash_.c stat_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c update_.c url_.c user_.c verify_.c vfile_.c wiki_.c wikiformat_.c winhttp_.c xfer_.c zip_.c
42
43 OBJ = $(OX)\add$O $(OX)\allrepo$O $(OX)\attach$O $(OX)\bag$O $(OX)\bisect$O $(OX)\blob$O $(OX)\branch$O $(OX)\browse$O $(OX)\captcha$O $(OX)\cgi$O $(OX)\checkin$O $(OX)\checkout$O $(OX)\clearsign$O $(OX)\clone$O $(OX)\comformat$O $(OX)\configure$O $(OX)\content$O $(OX)\db$O $(OX)\delta$O $(OX)\deltacmd$O $(OX)\descendants$O $(OX)\diff$O $(OX)\diffcmd$O $(OX)\doc$O $(OX)\encode$O $(OX)\event$O $(OX)\export$O $(OX)\file$O $(OX)\finfo$O $(OX)\glob$O $(OX)\graph$O $(OX)\gzip$O $(OX)\http$O $(OX)\http_socket$O $(OX)\http_ssl$O $(OX)\http_transport$O $(OX)\import$O $(OX)\info$O $(OX)\json$O $(OX)\json_login$O $(OX)\leaf$O $(OX)\login$O $(OX)\main$O $(OX)\manifest$O $(OX)\md5$O $(OX)\merge$O $(OX)\merge3$O $(OX)\name$O $(OX)\path$O $(OX)\pivot$O $(OX)\popen$O $(OX)\pqueue$O $(OX)\printf$O $(OX)\rebuild$O $(OX)\report$O $(OX)\rss$O $(OX)\schema$O $(OX)\search$O $(OX)\setup$O $(OX)\sha1$O $(OX)\shun$O $(OX)\skins$O $(OX)\sqlcmd$O $(OX)\stash$O $(OX)\stat$O $(OX)\style$O $(OX)\sync$O $(OX)\tag$O $(OX)\tar$O $(OX)\th_main$O $(OX)\timeline$O $(OX)\tkt$O $(OX)\tktsetup$O $(OX)\undo$O $(OX)\update$O $(OX)\url$O $(OX)\user$O $(OX)\verify$O $(OX)\vfile$O $(OX)\wiki$O $(OX)\wikiformat$O $(OX)\winhttp$O $(OX)\xfer$O $(OX)\zip$O $(OX)\shell$O $(OX)\sqlite3$O $(OX)\th$O $(OX)\th_lang$O
44
45
46 APPNAME = $(OX)\fossil$(E)
47
48 all: $(OX) $(APPNAME)
@@ -67,11 +67,10 @@
67 echo $(OX)\clearsign.obj >> $@
68 echo $(OX)\clone.obj >> $@
69 echo $(OX)\comformat.obj >> $@
70 echo $(OX)\configure.obj >> $@
71 echo $(OX)\content.obj >> $@
 
72 echo $(OX)\db.obj >> $@
73 echo $(OX)\delta.obj >> $@
74 echo $(OX)\deltacmd.obj >> $@
75 echo $(OX)\descendants.obj >> $@
76 echo $(OX)\diff.obj >> $@
@@ -90,10 +89,11 @@
89 echo $(OX)\http_ssl.obj >> $@
90 echo $(OX)\http_transport.obj >> $@
91 echo $(OX)\import.obj >> $@
92 echo $(OX)\info.obj >> $@
93 echo $(OX)\json.obj >> $@
94 echo $(OX)\json_login.obj >> $@
95 echo $(OX)\leaf.obj >> $@
96 echo $(OX)\login.obj >> $@
97 echo $(OX)\main.obj >> $@
98 echo $(OX)\manifest.obj >> $@
99 echo $(OX)\md5.obj >> $@
@@ -169,17 +169,15 @@
169 $(OX)\th$O : $(SRCDIR)\th.c
170 $(TCC) /Fo$@ -c $**
171
172 $(OX)\th_lang$O : $(SRCDIR)\th_lang.c
173 $(TCC) /Fo$@ -c $**
 
 
 
 
174
175 VERSION.h : mkversion$E $B\manifest.uuid $B\manifest $B\VERSION
176 $** > $@
177 $(OBJDIR)\cson_amalgamation.h : $(SRCDIR)\cson_amalgamation.h
178 cp $(SRCDIR)\cson_amalgamation.h $@
179
180 page_index.h: mkindex$E $(SRC)
181 $** > $@
182
183 clean:
@@ -188,10 +186,13 @@
186 -del headers linkopts
187
188 realclean:
189 -del $(APPNAME) translate$E mkindex$E makeheaders$E mkversion$E
190
191 $(OBJDIR)\json$O : $(SRCDIR)\json_detail.h
192 $(OBJDIR)\json_login$O : $(SRCDIR)\json_detail.h
193
194
195 $(OX)\add$O : add_.c add.h
196 $(TCC) /Fo$@ -c add_.c
197
198 add_.c : $(SRCDIR)\add.c
@@ -422,10 +423,16 @@
423 $(OX)\json$O : json_.c json.h
424 $(TCC) /Fo$@ -c json_.c
425
426 json_.c : $(SRCDIR)\json.c
427 translate$E $** > $@
428
429 $(OX)\json_login$O : json_login_.c json_login.h
430 $(TCC) /Fo$@ -c json_login_.c
431
432 json_login_.c : $(SRCDIR)\json_login.c
433 translate$E $** > $@
434
435 $(OX)\leaf$O : leaf_.c leaf.h
436 $(TCC) /Fo$@ -c leaf_.c
437
438 leaf_.c : $(SRCDIR)\leaf.c
@@ -688,7 +695,7 @@
695
696 zip_.c : $(SRCDIR)\zip.c
697 translate$E $** > $@
698
699 headers: makeheaders$E page_index.h VERSION.h
700 makeheaders$E add_.c:add.h allrepo_.c:allrepo.h attach_.c:attach.h bag_.c:bag.h bisect_.c:bisect.h blob_.c:blob.h branch_.c:branch.h browse_.c:browse.h captcha_.c:captcha.h cgi_.c:cgi.h checkin_.c:checkin.h checkout_.c:checkout.h clearsign_.c:clearsign.h clone_.c:clone.h comformat_.c:comformat.h configure_.c:configure.h content_.c:content.h db_.c:db.h delta_.c:delta.h deltacmd_.c:deltacmd.h descendants_.c:descendants.h diff_.c:diff.h diffcmd_.c:diffcmd.h doc_.c:doc.h encode_.c:encode.h event_.c:event.h export_.c:export.h file_.c:file.h finfo_.c:finfo.h glob_.c:glob.h graph_.c:graph.h gzip_.c:gzip.h http_.c:http.h http_socket_.c:http_socket.h http_ssl_.c:http_ssl.h http_transport_.c:http_transport.h import_.c:import.h info_.c:info.h json_.c:json.h json_login_.c:json_login.h leaf_.c:leaf.h login_.c:login.h main_.c:main.h manifest_.c:manifest.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h name_.c:name.h path_.c:path.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h rebuild_.c:rebuild.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h setup_.c:setup.h sha1_.c:sha1.h shun_.c:shun.h skins_.c:skins.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h style_.c:style.h sync_.c:sync.h tag_.c:tag.h tar_.c:tar.h th_main_.c:th_main.h timeline_.c:timeline.h tkt_.c:tkt.h tktsetup_.c:tktsetup.h undo_.c:undo.h update_.c:update.h url_.c:url.h user_.c:user.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h winhttp_.c:winhttp.h xfer_.c:xfer.h zip_.c:zip.h $(SRCDIR)\sqlite3.h $(SRCDIR)\th.h VERSION.h $(SRCDIR)\cson_amalgamation.h
701 @copy /Y nul: headers
702

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button