Fossil SCM
Added ssl support to msc msc doesn't like declaring vars in the middle of a block! added the extra needed libs in a commented LIBS line
Commit
29c728f4b3610bbef0727ef902b9e80ceb9b4a0b
Parent
99e0a29efec1997…
3 files changed
+4
-4
+2
+2
+4
-4
| --- src/http_ssl.c | ||
| +++ src/http_ssl.c | ||
| @@ -128,11 +128,11 @@ | ||
| 128 | 128 | ** Return the number of errors. |
| 129 | 129 | */ |
| 130 | 130 | int ssl_open(void){ |
| 131 | 131 | X509 *cert; |
| 132 | 132 | int hasSavedCertificate = 0; |
| 133 | - | |
| 133 | +char *connStr ; | |
| 134 | 134 | ssl_global_init(); |
| 135 | 135 | |
| 136 | 136 | /* Get certificate for current server from global config and |
| 137 | 137 | * (if we have it in config) add it to certificate store. |
| 138 | 138 | */ |
| @@ -150,11 +150,11 @@ | ||
| 150 | 150 | ssl_set_errmsg("SSL: cannot open SSL (%s)", |
| 151 | 151 | ERR_reason_error_string(ERR_get_error())); |
| 152 | 152 | return 1; |
| 153 | 153 | } |
| 154 | 154 | |
| 155 | - char *connStr = mprintf("%s:%d", g.urlName, g.urlPort); | |
| 155 | + connStr = mprintf("%s:%d", g.urlName, g.urlPort); | |
| 156 | 156 | BIO_set_conn_hostname(iBio, connStr); |
| 157 | 157 | free(connStr); |
| 158 | 158 | |
| 159 | 159 | if( BIO_do_connect(iBio)<=0 ){ |
| 160 | 160 | ssl_set_errmsg("SSL: cannot connect to host %s:%d (%s)", |
| @@ -178,29 +178,29 @@ | ||
| 178 | 178 | return 1; |
| 179 | 179 | } |
| 180 | 180 | |
| 181 | 181 | if( SSL_get_verify_result(ssl) != X509_V_OK ){ |
| 182 | 182 | char *desc, *prompt; |
| 183 | + char *warning = ""; | |
| 184 | + Blob ans; | |
| 183 | 185 | BIO *mem; |
| 184 | 186 | |
| 185 | 187 | mem = BIO_new(BIO_s_mem()); |
| 186 | 188 | X509_NAME_print_ex(mem, X509_get_subject_name(cert), 2, XN_FLAG_MULTILINE); |
| 187 | 189 | BIO_puts(mem, "\n\nIssued By:\n\n"); |
| 188 | 190 | X509_NAME_print_ex(mem, X509_get_issuer_name(cert), 2, XN_FLAG_MULTILINE); |
| 189 | 191 | BIO_write(mem, "", 1); // null-terminate mem buffer |
| 190 | 192 | BIO_get_mem_data(mem, &desc); |
| 191 | 193 | |
| 192 | - char *warning = ""; | |
| 193 | 194 | if( hasSavedCertificate ){ |
| 194 | 195 | warning = "WARNING: Certificate doesn't match the " |
| 195 | 196 | "saved certificate for this host!"; |
| 196 | 197 | } |
| 197 | 198 | prompt = mprintf("\nUnknown SSL certificate:\n\n%s\n\n%s\n" |
| 198 | 199 | "Accept certificate [a=always/y/N]? ", desc, warning); |
| 199 | 200 | BIO_free(mem); |
| 200 | 201 | |
| 201 | - Blob ans; | |
| 202 | 202 | prompt_user(prompt, &ans); |
| 203 | 203 | free(prompt); |
| 204 | 204 | if( blob_str(&ans)[0]!='y' && blob_str(&ans)[0]!='a' ) { |
| 205 | 205 | X509_free(cert); |
| 206 | 206 | ssl_set_errmsg("SSL certificate declined"); |
| 207 | 207 |
| --- src/http_ssl.c | |
| +++ src/http_ssl.c | |
| @@ -128,11 +128,11 @@ | |
| 128 | ** Return the number of errors. |
| 129 | */ |
| 130 | int ssl_open(void){ |
| 131 | X509 *cert; |
| 132 | int hasSavedCertificate = 0; |
| 133 | |
| 134 | ssl_global_init(); |
| 135 | |
| 136 | /* Get certificate for current server from global config and |
| 137 | * (if we have it in config) add it to certificate store. |
| 138 | */ |
| @@ -150,11 +150,11 @@ | |
| 150 | ssl_set_errmsg("SSL: cannot open SSL (%s)", |
| 151 | ERR_reason_error_string(ERR_get_error())); |
| 152 | return 1; |
| 153 | } |
| 154 | |
| 155 | char *connStr = mprintf("%s:%d", g.urlName, g.urlPort); |
| 156 | BIO_set_conn_hostname(iBio, connStr); |
| 157 | free(connStr); |
| 158 | |
| 159 | if( BIO_do_connect(iBio)<=0 ){ |
| 160 | ssl_set_errmsg("SSL: cannot connect to host %s:%d (%s)", |
| @@ -178,29 +178,29 @@ | |
| 178 | return 1; |
| 179 | } |
| 180 | |
| 181 | if( SSL_get_verify_result(ssl) != X509_V_OK ){ |
| 182 | char *desc, *prompt; |
| 183 | BIO *mem; |
| 184 | |
| 185 | mem = BIO_new(BIO_s_mem()); |
| 186 | X509_NAME_print_ex(mem, X509_get_subject_name(cert), 2, XN_FLAG_MULTILINE); |
| 187 | BIO_puts(mem, "\n\nIssued By:\n\n"); |
| 188 | X509_NAME_print_ex(mem, X509_get_issuer_name(cert), 2, XN_FLAG_MULTILINE); |
| 189 | BIO_write(mem, "", 1); // null-terminate mem buffer |
| 190 | BIO_get_mem_data(mem, &desc); |
| 191 | |
| 192 | char *warning = ""; |
| 193 | if( hasSavedCertificate ){ |
| 194 | warning = "WARNING: Certificate doesn't match the " |
| 195 | "saved certificate for this host!"; |
| 196 | } |
| 197 | prompt = mprintf("\nUnknown SSL certificate:\n\n%s\n\n%s\n" |
| 198 | "Accept certificate [a=always/y/N]? ", desc, warning); |
| 199 | BIO_free(mem); |
| 200 | |
| 201 | Blob ans; |
| 202 | prompt_user(prompt, &ans); |
| 203 | free(prompt); |
| 204 | if( blob_str(&ans)[0]!='y' && blob_str(&ans)[0]!='a' ) { |
| 205 | X509_free(cert); |
| 206 | ssl_set_errmsg("SSL certificate declined"); |
| 207 |
| --- src/http_ssl.c | |
| +++ src/http_ssl.c | |
| @@ -128,11 +128,11 @@ | |
| 128 | ** Return the number of errors. |
| 129 | */ |
| 130 | int ssl_open(void){ |
| 131 | X509 *cert; |
| 132 | int hasSavedCertificate = 0; |
| 133 | char *connStr ; |
| 134 | ssl_global_init(); |
| 135 | |
| 136 | /* Get certificate for current server from global config and |
| 137 | * (if we have it in config) add it to certificate store. |
| 138 | */ |
| @@ -150,11 +150,11 @@ | |
| 150 | ssl_set_errmsg("SSL: cannot open SSL (%s)", |
| 151 | ERR_reason_error_string(ERR_get_error())); |
| 152 | return 1; |
| 153 | } |
| 154 | |
| 155 | connStr = mprintf("%s:%d", g.urlName, g.urlPort); |
| 156 | BIO_set_conn_hostname(iBio, connStr); |
| 157 | free(connStr); |
| 158 | |
| 159 | if( BIO_do_connect(iBio)<=0 ){ |
| 160 | ssl_set_errmsg("SSL: cannot connect to host %s:%d (%s)", |
| @@ -178,29 +178,29 @@ | |
| 178 | return 1; |
| 179 | } |
| 180 | |
| 181 | if( SSL_get_verify_result(ssl) != X509_V_OK ){ |
| 182 | char *desc, *prompt; |
| 183 | char *warning = ""; |
| 184 | Blob ans; |
| 185 | BIO *mem; |
| 186 | |
| 187 | mem = BIO_new(BIO_s_mem()); |
| 188 | X509_NAME_print_ex(mem, X509_get_subject_name(cert), 2, XN_FLAG_MULTILINE); |
| 189 | BIO_puts(mem, "\n\nIssued By:\n\n"); |
| 190 | X509_NAME_print_ex(mem, X509_get_issuer_name(cert), 2, XN_FLAG_MULTILINE); |
| 191 | BIO_write(mem, "", 1); // null-terminate mem buffer |
| 192 | BIO_get_mem_data(mem, &desc); |
| 193 | |
| 194 | if( hasSavedCertificate ){ |
| 195 | warning = "WARNING: Certificate doesn't match the " |
| 196 | "saved certificate for this host!"; |
| 197 | } |
| 198 | prompt = mprintf("\nUnknown SSL certificate:\n\n%s\n\n%s\n" |
| 199 | "Accept certificate [a=always/y/N]? ", desc, warning); |
| 200 | BIO_free(mem); |
| 201 | |
| 202 | prompt_user(prompt, &ans); |
| 203 | free(prompt); |
| 204 | if( blob_str(&ans)[0]!='y' && blob_str(&ans)[0]!='a' ) { |
| 205 | X509_free(cert); |
| 206 | ssl_set_errmsg("SSL certificate declined"); |
| 207 |
+2
| --- src/makemake.tcl | ||
| +++ src/makemake.tcl | ||
| @@ -349,10 +349,12 @@ | ||
| 349 | 349 | CFLAGS = -nologo -MD -O2 -Oy- -Zi |
| 350 | 350 | CFLAGS = -nologo -MD -O2 -Oy- |
| 351 | 351 | BCC = $(CC) $(CFLAGS) |
| 352 | 352 | TCC = $(CC) -c $(CFLAGS) $(MSCDEF) $(I18N) $(SSL) $(INCL) |
| 353 | 353 | LIBS = zlib.lib ws2_32.lib |
| 354 | +##SSL uncoment below | |
| 355 | +#LIBS = zlib.lib ws2_32.lib ssleay32.lib libeay32.lib user32.lib gdi32.lib advapi32.lib | |
| 354 | 356 | LIBDIR = -LIBPATH:$(MSCDIR)\extra\lib |
| 355 | 357 | } |
| 356 | 358 | puts -nonewline "SRC = " |
| 357 | 359 | foreach s [lsort $src] { |
| 358 | 360 | puts -nonewline "${s}_.c " |
| 359 | 361 |
| --- src/makemake.tcl | |
| +++ src/makemake.tcl | |
| @@ -349,10 +349,12 @@ | |
| 349 | CFLAGS = -nologo -MD -O2 -Oy- -Zi |
| 350 | CFLAGS = -nologo -MD -O2 -Oy- |
| 351 | BCC = $(CC) $(CFLAGS) |
| 352 | TCC = $(CC) -c $(CFLAGS) $(MSCDEF) $(I18N) $(SSL) $(INCL) |
| 353 | LIBS = zlib.lib ws2_32.lib |
| 354 | LIBDIR = -LIBPATH:$(MSCDIR)\extra\lib |
| 355 | } |
| 356 | puts -nonewline "SRC = " |
| 357 | foreach s [lsort $src] { |
| 358 | puts -nonewline "${s}_.c " |
| 359 |
| --- src/makemake.tcl | |
| +++ src/makemake.tcl | |
| @@ -349,10 +349,12 @@ | |
| 349 | CFLAGS = -nologo -MD -O2 -Oy- -Zi |
| 350 | CFLAGS = -nologo -MD -O2 -Oy- |
| 351 | BCC = $(CC) $(CFLAGS) |
| 352 | TCC = $(CC) -c $(CFLAGS) $(MSCDEF) $(I18N) $(SSL) $(INCL) |
| 353 | LIBS = zlib.lib ws2_32.lib |
| 354 | ##SSL uncoment below |
| 355 | #LIBS = zlib.lib ws2_32.lib ssleay32.lib libeay32.lib user32.lib gdi32.lib advapi32.lib |
| 356 | LIBDIR = -LIBPATH:$(MSCDIR)\extra\lib |
| 357 | } |
| 358 | puts -nonewline "SRC = " |
| 359 | foreach s [lsort $src] { |
| 360 | puts -nonewline "${s}_.c " |
| 361 |
+2
| --- win/Makefile.msc | ||
| +++ win/Makefile.msc | ||
| @@ -24,10 +24,12 @@ | ||
| 24 | 24 | CFLAGS = -nologo -MD -O2 -Oy- -Zi |
| 25 | 25 | CFLAGS = -nologo -MD -O2 -Oy- |
| 26 | 26 | BCC = $(CC) $(CFLAGS) |
| 27 | 27 | TCC = $(CC) -c $(CFLAGS) $(MSCDEF) $(I18N) $(SSL) $(INCL) |
| 28 | 28 | LIBS = zlib.lib ws2_32.lib |
| 29 | +##SSL uncoment below | |
| 30 | +#LIBS = zlib.lib ws2_32.lib ssleay32.lib libeay32.lib user32.lib gdi32.lib advapi32.lib | |
| 29 | 31 | LIBDIR = -LIBPATH:$(MSCDIR)\extra\lib |
| 30 | 32 | |
| 31 | 33 | SRC = add_.c allrepo_.c attach_.c bag_.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 file_.c finfo_.c graph_.c http_.c http_socket_.c http_ssl_.c http_transport_.c info_.c login_.c main_.c manifest_.c md5_.c merge_.c merge3_.c name_.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 stat_.c style_.c sync_.c tag_.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 |
| 32 | 34 | |
| 33 | 35 | OBJ = $(OBJDIR)\add$O $(OBJDIR)\allrepo$O $(OBJDIR)\attach$O $(OBJDIR)\bag$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)\file$O $(OBJDIR)\finfo$O $(OBJDIR)\graph$O $(OBJDIR)\http$O $(OBJDIR)\http_socket$O $(OBJDIR)\http_ssl$O $(OBJDIR)\http_transport$O $(OBJDIR)\info$O $(OBJDIR)\login$O $(OBJDIR)\main$O $(OBJDIR)\manifest$O $(OBJDIR)\md5$O $(OBJDIR)\merge$O $(OBJDIR)\merge3$O $(OBJDIR)\name$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)\stat$O $(OBJDIR)\style$O $(OBJDIR)\sync$O $(OBJDIR)\tag$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)\sqlite3$O $(OBJDIR)\th$O $(OBJDIR)\th_lang$O |
| 34 | 36 |
| --- win/Makefile.msc | |
| +++ win/Makefile.msc | |
| @@ -24,10 +24,12 @@ | |
| 24 | CFLAGS = -nologo -MD -O2 -Oy- -Zi |
| 25 | CFLAGS = -nologo -MD -O2 -Oy- |
| 26 | BCC = $(CC) $(CFLAGS) |
| 27 | TCC = $(CC) -c $(CFLAGS) $(MSCDEF) $(I18N) $(SSL) $(INCL) |
| 28 | LIBS = zlib.lib ws2_32.lib |
| 29 | LIBDIR = -LIBPATH:$(MSCDIR)\extra\lib |
| 30 | |
| 31 | SRC = add_.c allrepo_.c attach_.c bag_.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 file_.c finfo_.c graph_.c http_.c http_socket_.c http_ssl_.c http_transport_.c info_.c login_.c main_.c manifest_.c md5_.c merge_.c merge3_.c name_.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 stat_.c style_.c sync_.c tag_.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 |
| 32 | |
| 33 | OBJ = $(OBJDIR)\add$O $(OBJDIR)\allrepo$O $(OBJDIR)\attach$O $(OBJDIR)\bag$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)\file$O $(OBJDIR)\finfo$O $(OBJDIR)\graph$O $(OBJDIR)\http$O $(OBJDIR)\http_socket$O $(OBJDIR)\http_ssl$O $(OBJDIR)\http_transport$O $(OBJDIR)\info$O $(OBJDIR)\login$O $(OBJDIR)\main$O $(OBJDIR)\manifest$O $(OBJDIR)\md5$O $(OBJDIR)\merge$O $(OBJDIR)\merge3$O $(OBJDIR)\name$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)\stat$O $(OBJDIR)\style$O $(OBJDIR)\sync$O $(OBJDIR)\tag$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)\sqlite3$O $(OBJDIR)\th$O $(OBJDIR)\th_lang$O |
| 34 |
| --- win/Makefile.msc | |
| +++ win/Makefile.msc | |
| @@ -24,10 +24,12 @@ | |
| 24 | CFLAGS = -nologo -MD -O2 -Oy- -Zi |
| 25 | CFLAGS = -nologo -MD -O2 -Oy- |
| 26 | BCC = $(CC) $(CFLAGS) |
| 27 | TCC = $(CC) -c $(CFLAGS) $(MSCDEF) $(I18N) $(SSL) $(INCL) |
| 28 | LIBS = zlib.lib ws2_32.lib |
| 29 | ##SSL uncoment below |
| 30 | #LIBS = zlib.lib ws2_32.lib ssleay32.lib libeay32.lib user32.lib gdi32.lib advapi32.lib |
| 31 | LIBDIR = -LIBPATH:$(MSCDIR)\extra\lib |
| 32 | |
| 33 | SRC = add_.c allrepo_.c attach_.c bag_.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 file_.c finfo_.c graph_.c http_.c http_socket_.c http_ssl_.c http_transport_.c info_.c login_.c main_.c manifest_.c md5_.c merge_.c merge3_.c name_.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 stat_.c style_.c sync_.c tag_.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 |
| 34 | |
| 35 | OBJ = $(OBJDIR)\add$O $(OBJDIR)\allrepo$O $(OBJDIR)\attach$O $(OBJDIR)\bag$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)\file$O $(OBJDIR)\finfo$O $(OBJDIR)\graph$O $(OBJDIR)\http$O $(OBJDIR)\http_socket$O $(OBJDIR)\http_ssl$O $(OBJDIR)\http_transport$O $(OBJDIR)\info$O $(OBJDIR)\login$O $(OBJDIR)\main$O $(OBJDIR)\manifest$O $(OBJDIR)\md5$O $(OBJDIR)\merge$O $(OBJDIR)\merge3$O $(OBJDIR)\name$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)\stat$O $(OBJDIR)\style$O $(OBJDIR)\sync$O $(OBJDIR)\tag$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)\sqlite3$O $(OBJDIR)\th$O $(OBJDIR)\th_lang$O |
| 36 |