Fossil SCM
The email-server enhancements are far from complete, but they at least compile now on non-linux systems, so it seems safe to merge the existing skeleton to trunk and continue development there where it can be more easily tested on live systems.
Commit
0a201f7159b88336c61841c4f7bc59dbe2d926f1ccf0d67aee65bb9923a8f3fd
Parent
ae73e4ed327e469…
12 files changed
+1
+213
-32
+17
-7
+1
-1
+24
+2
+4
-1
+6
+4
+16
-4
+24
+20
M
auto.def
+1
| --- auto.def | ||
| +++ auto.def | ||
| @@ -478,10 +478,11 @@ | ||
| 478 | 478 | # Last resort, may be Windows |
| 479 | 479 | if {[is_mingw]} { |
| 480 | 480 | define-append LIBS -lwsock32 |
| 481 | 481 | } |
| 482 | 482 | } |
| 483 | +cc-check-function-in-lib ns_name_uncompress resolv | |
| 483 | 484 | cc-check-functions utime |
| 484 | 485 | cc-check-functions usleep |
| 485 | 486 | cc-check-functions strchrnul |
| 486 | 487 | cc-check-functions pledge |
| 487 | 488 | |
| 488 | 489 |
| --- auto.def | |
| +++ auto.def | |
| @@ -478,10 +478,11 @@ | |
| 478 | # Last resort, may be Windows |
| 479 | if {[is_mingw]} { |
| 480 | define-append LIBS -lwsock32 |
| 481 | } |
| 482 | } |
| 483 | cc-check-functions utime |
| 484 | cc-check-functions usleep |
| 485 | cc-check-functions strchrnul |
| 486 | cc-check-functions pledge |
| 487 | |
| 488 |
| --- auto.def | |
| +++ auto.def | |
| @@ -478,10 +478,11 @@ | |
| 478 | # Last resort, may be Windows |
| 479 | if {[is_mingw]} { |
| 480 | define-append LIBS -lwsock32 |
| 481 | } |
| 482 | } |
| 483 | cc-check-function-in-lib ns_name_uncompress resolv |
| 484 | cc-check-functions utime |
| 485 | cc-check-functions usleep |
| 486 | cc-check-functions strchrnul |
| 487 | cc-check-functions pledge |
| 488 | |
| 489 |
+213
-32
| --- src/email.c | ||
| +++ src/email.c | ||
| @@ -13,11 +13,11 @@ | ||
| 13 | 13 | ** [email protected] |
| 14 | 14 | ** http://www.hwaci.com/drh/ |
| 15 | 15 | ** |
| 16 | 16 | ******************************************************************************* |
| 17 | 17 | ** |
| 18 | -** Email notification features | |
| 18 | +** Logic for email notification, also known as "alerts". | |
| 19 | 19 | */ |
| 20 | 20 | #include "config.h" |
| 21 | 21 | #include "email.h" |
| 22 | 22 | #include <assert.h> |
| 23 | 23 | #include <time.h> |
| @@ -181,21 +181,22 @@ | ||
| 181 | 181 | } |
| 182 | 182 | } |
| 183 | 183 | |
| 184 | 184 | |
| 185 | 185 | /* |
| 186 | -** WEBPAGE: setup_email | |
| 186 | +** WEBPAGE: setup_notification | |
| 187 | 187 | ** |
| 188 | 188 | ** Administrative page for configuring and controlling email notification. |
| 189 | -** Normally accessible via the /Admin/Email menu. | |
| 189 | +** Normally accessible via the /Admin/Notification menu. | |
| 190 | 190 | */ |
| 191 | -void setup_email(void){ | |
| 191 | +void setup_notification(void){ | |
| 192 | 192 | static const char *const azSendMethods[] = { |
| 193 | - "off", "Disabled", | |
| 194 | - "pipe", "Pipe to a command", | |
| 195 | - "db", "Store in a database", | |
| 196 | - "dir", "Store in a directory" | |
| 193 | + "off", "Disabled", | |
| 194 | + "pipe", "Pipe to a command", | |
| 195 | + "db", "Store in a database", | |
| 196 | + "dir", "Store in a directory", | |
| 197 | + "relay", "SMTP relay" | |
| 197 | 198 | }; |
| 198 | 199 | login_check_credentials(); |
| 199 | 200 | if( !g.perm.Setup ){ |
| 200 | 201 | login_needed(0); |
| 201 | 202 | return; |
| @@ -202,11 +203,11 @@ | ||
| 202 | 203 | } |
| 203 | 204 | db_begin_transaction(); |
| 204 | 205 | |
| 205 | 206 | email_submenu_common(); |
| 206 | 207 | style_header("Email Notification Setup"); |
| 207 | - @ <form action="%R/setup_email" method="post"><div> | |
| 208 | + @ <form action="%R/setup_notification" method="post"><div> | |
| 208 | 209 | @ <input type="submit" name="submit" value="Apply Changes" /><hr> |
| 209 | 210 | login_insert_csrf_secret(); |
| 210 | 211 | |
| 211 | 212 | entry_attribute("Canonical Server URL", 40, "email-url", |
| 212 | 213 | "eurl", "", 0); |
| @@ -244,17 +245,14 @@ | ||
| 244 | 245 | @ (Property: "email-autoexec")</p> |
| 245 | 246 | @ <hr> |
| 246 | 247 | |
| 247 | 248 | multiple_choice_attribute("Email Send Method", "email-send-method", "esm", |
| 248 | 249 | "off", count(azSendMethods)/2, azSendMethods); |
| 249 | - @ <p>How to send email. The "Pipe to a command" | |
| 250 | - @ method is the usual choice in production. | |
| 251 | - @ (Property: "email-send-method")</p> | |
| 252 | - @ <hr> | |
| 250 | + @ <p>How to send email. Requires auxiliary information from the fields | |
| 251 | + @ that follow. (Property: "email-send-method")</p> | |
| 253 | 252 | email_schema(1); |
| 254 | - | |
| 255 | - entry_attribute("Command To Pipe Email To", 80, "email-send-command", | |
| 253 | + entry_attribute("Command To Pipe Email To", 60, "email-send-command", | |
| 256 | 254 | "ecmd", "sendmail -t", 0); |
| 257 | 255 | @ <p>When the send method is "pipe to a command", this is the command |
| 258 | 256 | @ that is run. Email messages are piped into the standard input of this |
| 259 | 257 | @ command. The command is expected to extract the sender address, |
| 260 | 258 | @ recepient addresses, and subject from the header of the piped email |
| @@ -269,10 +267,19 @@ | ||
| 269 | 267 | entry_attribute("Directory In Which To Store Email", 60, "email-send-dir", |
| 270 | 268 | "esdir", "", 0); |
| 271 | 269 | @ <p>When the send method is "store in a directory", each email message is |
| 272 | 270 | @ stored as a separate file in the directory shown here. |
| 273 | 271 | @ (Property: "email-send-dir")</p> |
| 272 | + | |
| 273 | + entry_attribute("SMTP relay host", 60, "email-send-relayhost", | |
| 274 | + "esrh", "", 0); | |
| 275 | + @ <p>When the send method is "SMTP relay", each email message is | |
| 276 | + @ transmitted via the SMTP protocol (rfc5321) to a "Mail Submission | |
| 277 | + @ Agent" or "MSA" (rfc4409) at the hostname shown here. Optionally | |
| 278 | + @ append a colon and TCP port number (ex: smtp.example.com:587). | |
| 279 | + @ The default TCP port number is 25. | |
| 280 | + @ (Property: "email-send-relayhost")</p> | |
| 274 | 281 | @ <hr> |
| 275 | 282 | |
| 276 | 283 | entry_attribute("Administrator email address", 40, "email-admin", |
| 277 | 284 | "eadmin", "", 0); |
| 278 | 285 | @ <p>This is the email for the human administrator for the system. |
| @@ -376,14 +383,21 @@ | ||
| 376 | 383 | const char *zDest; /* How to send email. */ |
| 377 | 384 | const char *zDb; /* Name of database file */ |
| 378 | 385 | const char *zDir; /* Directory in which to store as email files */ |
| 379 | 386 | const char *zCmd; /* Command to run for each email */ |
| 380 | 387 | const char *zFrom; /* Emails come from here */ |
| 388 | + SmtpSession *pSmtp; /* SMTP relay connection */ | |
| 381 | 389 | Blob out; /* For zDest=="blob" */ |
| 382 | 390 | char *zErr; /* Error message */ |
| 391 | + u32 mFlags; /* Flags */ | |
| 383 | 392 | int bImmediateFail; /* On any error, call fossil_fatal() */ |
| 384 | 393 | }; |
| 394 | + | |
| 395 | +/* Allowed values for EmailSender flags */ | |
| 396 | +#define EMAIL_IMMEDIATE_FAIL 0x0001 /* Call fossil_fatal() on any error */ | |
| 397 | +#define EMAIL_SMTP_TRACE 0x0002 /* Write SMTP transcript to console */ | |
| 398 | + | |
| 385 | 399 | #endif /* INTERFACE */ |
| 386 | 400 | |
| 387 | 401 | /* |
| 388 | 402 | ** Shutdown an emailer. Clear all information other than the error message. |
| 389 | 403 | */ |
| @@ -393,12 +407,16 @@ | ||
| 393 | 407 | sqlite3_close(p->db); |
| 394 | 408 | p->db = 0; |
| 395 | 409 | p->zDb = 0; |
| 396 | 410 | p->zDir = 0; |
| 397 | 411 | p->zCmd = 0; |
| 398 | - p->zDest = "off"; | |
| 399 | - blob_zero(&p->out); | |
| 412 | + if( p->pSmtp ){ | |
| 413 | + smtp_client_quit(p->pSmtp); | |
| 414 | + smtp_session_free(p->pSmtp); | |
| 415 | + p->pSmtp = 0; | |
| 416 | + } | |
| 417 | + blob_reset(&p->out); | |
| 400 | 418 | } |
| 401 | 419 | |
| 402 | 420 | /* |
| 403 | 421 | ** Put the EmailSender into an error state. |
| 404 | 422 | */ |
| @@ -407,11 +425,11 @@ | ||
| 407 | 425 | fossil_free(p->zErr); |
| 408 | 426 | va_start(ap, zFormat); |
| 409 | 427 | p->zErr = vmprintf(zFormat, ap); |
| 410 | 428 | va_end(ap); |
| 411 | 429 | emailerShutdown(p); |
| 412 | - if( p->bImmediateFail ){ | |
| 430 | + if( p->mFlags & EMAIL_IMMEDIATE_FAIL ){ | |
| 413 | 431 | fossil_fatal("%s", p->zErr); |
| 414 | 432 | } |
| 415 | 433 | } |
| 416 | 434 | |
| 417 | 435 | /* |
| @@ -455,16 +473,17 @@ | ||
| 455 | 473 | ** zAltDest to cause all emails to be printed to the console for |
| 456 | 474 | ** debugging purposes. |
| 457 | 475 | ** |
| 458 | 476 | ** The EmailSender object returned must be freed using email_sender_free(). |
| 459 | 477 | */ |
| 460 | -EmailSender *email_sender_new(const char *zAltDest, int bImmediateFail){ | |
| 478 | +EmailSender *email_sender_new(const char *zAltDest, u32 mFlags){ | |
| 461 | 479 | EmailSender *p; |
| 462 | 480 | |
| 463 | 481 | p = fossil_malloc(sizeof(*p)); |
| 464 | 482 | memset(p, 0, sizeof(*p)); |
| 465 | - p->bImmediateFail = bImmediateFail; | |
| 483 | + blob_init(&p->out, 0, 0); | |
| 484 | + p->mFlags = mFlags; | |
| 466 | 485 | if( zAltDest ){ |
| 467 | 486 | p->zDest = zAltDest; |
| 468 | 487 | }else{ |
| 469 | 488 | p->zDest = db_get("email-send-method","off"); |
| 470 | 489 | } |
| @@ -499,13 +518,149 @@ | ||
| 499 | 518 | emailerGetSetting(p, &p->zCmd, "email-send-command"); |
| 500 | 519 | }else if( fossil_strcmp(p->zDest, "dir")==0 ){ |
| 501 | 520 | emailerGetSetting(p, &p->zDir, "email-send-dir"); |
| 502 | 521 | }else if( fossil_strcmp(p->zDest, "blob")==0 ){ |
| 503 | 522 | blob_init(&p->out, 0, 0); |
| 523 | + }else if( fossil_strcmp(p->zDest, "relay")==0 ){ | |
| 524 | + const char *zRelay = 0; | |
| 525 | + emailerGetSetting(p, &zRelay, "email-send-relayhost"); | |
| 526 | + if( zRelay ){ | |
| 527 | + u32 smtpFlags = SMTP_DIRECT; | |
| 528 | + if( mFlags & EMAIL_SMTP_TRACE ) smtpFlags |= SMTP_TRACE_STDOUT; | |
| 529 | + p->pSmtp = smtp_session_new(p->zFrom, zRelay, smtpFlags); | |
| 530 | + smtp_client_startup(p->pSmtp); | |
| 531 | + } | |
| 504 | 532 | } |
| 505 | 533 | return p; |
| 506 | 534 | } |
| 535 | + | |
| 536 | +/* | |
| 537 | +** Scan the header of the email message in pMsg looking for the | |
| 538 | +** (first) occurrance of zField. Fill pValue with the content of | |
| 539 | +** that field. | |
| 540 | +** | |
| 541 | +** This routine initializes pValue. Any prior content of pValue is | |
| 542 | +** discarded (leaked). | |
| 543 | +** | |
| 544 | +** Return non-zero on success. Return 0 if no instance of the header | |
| 545 | +** is found. | |
| 546 | +*/ | |
| 547 | +int email_header_value(Blob *pMsg, const char *zField, Blob *pValue){ | |
| 548 | + int nField = (int)strlen(zField); | |
| 549 | + Blob line; | |
| 550 | + blob_rewind(pMsg); | |
| 551 | + blob_init(pValue,0,0); | |
| 552 | + while( blob_line(pMsg, &line) ){ | |
| 553 | + int n, i; | |
| 554 | + char *z; | |
| 555 | + blob_trim(&line); | |
| 556 | + n = blob_size(&line); | |
| 557 | + if( n==0 ) return 0; | |
| 558 | + if( n<nField+1 ) continue; | |
| 559 | + z = blob_buffer(&line); | |
| 560 | + if( sqlite3_strnicmp(z, zField, nField)==0 && z[nField]==':' ){ | |
| 561 | + for(i=nField+1; i<n && fossil_isspace(z[i]); i++){} | |
| 562 | + blob_init(pValue, z+i, n-i); | |
| 563 | + while( blob_line(pMsg, &line) ){ | |
| 564 | + blob_trim(&line); | |
| 565 | + n = blob_size(&line); | |
| 566 | + if( n==0 ) break; | |
| 567 | + z = blob_buffer(&line); | |
| 568 | + if( !fossil_isspace(z[0]) ) break; | |
| 569 | + for(i=1; i<n && fossil_isspace(z[i]); i++){} | |
| 570 | + blob_append(pValue, " ", 1); | |
| 571 | + blob_append(pValue, z+i, n-i); | |
| 572 | + } | |
| 573 | + return 1; | |
| 574 | + } | |
| 575 | + } | |
| 576 | + return 0; | |
| 577 | +} | |
| 578 | + | |
| 579 | +/* | |
| 580 | +** Make a copy of the input string up to but not including the | |
| 581 | +** first ">" character. | |
| 582 | +** | |
| 583 | +** Verify that the string really that is to be copied really is a | |
| 584 | +** valid email address. If it is not, then return NULL. | |
| 585 | +** | |
| 586 | +** This routine is more restrictive than necessary. It does not | |
| 587 | +** allow comments, IP address, quoted strings, or certain uncommon | |
| 588 | +** characters. The only non-alphanumerics allowed in the local | |
| 589 | +** part are "_", "+", "-" and "+". | |
| 590 | +*/ | |
| 591 | +char *email_copy_addr(const char *z){ | |
| 592 | + int i; | |
| 593 | + int nAt = 0; | |
| 594 | + int nDot = 0; | |
| 595 | + char c; | |
| 596 | + if( z[0]=='.' ) return 0; /* Local part cannot begin with "." */ | |
| 597 | + for(i=0; (c = z[i])!=0 && c!='>'; i++){ | |
| 598 | + if( fossil_isalnum(c) ){ | |
| 599 | + /* Alphanumerics are always ok */ | |
| 600 | + }else if( c=='@' ){ | |
| 601 | + if( nAt ) return 0; /* Only a single "@" allowed */ | |
| 602 | + if( i>64 ) return 0; /* Local part too big */ | |
| 603 | + nAt = 1; | |
| 604 | + nDot = 0; | |
| 605 | + if( i==0 ) return 0; /* Disallow empty local part */ | |
| 606 | + if( z[i-1]=='.' ) return 0; /* Last char of local cannot be "." */ | |
| 607 | + if( z[i+1]=='.' || z[i+1]=='-' ){ | |
| 608 | + return 0; /* Domain cannot begin with "." or "-" */ | |
| 609 | + } | |
| 610 | + }else if( c=='-' ){ | |
| 611 | + if( z[i+1]=='>' ) return 0; /* Last character cannot be "-" */ | |
| 612 | + }else if( c=='.' ){ | |
| 613 | + if( z[i+1]=='.' ) return 0; /* Do not allow ".." */ | |
| 614 | + if( z[i+1]=='>' ) return 0; /* Domain may not end with . */ | |
| 615 | + nDot++; | |
| 616 | + }else if( (c=='_' || c=='+') && nAt==0 ){ | |
| 617 | + /* _ and + are ok in the local part */ | |
| 618 | + }else{ | |
| 619 | + return 0; /* Anything else is an error */ | |
| 620 | + } | |
| 621 | + } | |
| 622 | + if( c!='>' ) return 0; /* Missing final ">" */ | |
| 623 | + if( nAt==0 ) return 0; /* No "@" found anywhere */ | |
| 624 | + if( nDot==0 ) return 0; /* No "." in the domain */ | |
| 625 | + | |
| 626 | + /* If we reach this point, the email address is valid */ | |
| 627 | + return mprintf("%.*s", i, z); | |
| 628 | +} | |
| 629 | + | |
| 630 | +/* | |
| 631 | +** Extract all To: header values from the email header supplied. | |
| 632 | +** Store them in the array list. | |
| 633 | +*/ | |
| 634 | +void email_header_to(Blob *pMsg, int *pnTo, char ***pazTo){ | |
| 635 | + int nTo = 0; | |
| 636 | + char **azTo = 0; | |
| 637 | + Blob v; | |
| 638 | + char *z, *zAddr; | |
| 639 | + int i; | |
| 640 | + | |
| 641 | + email_header_value(pMsg, "to", &v); | |
| 642 | + z = blob_str(&v); | |
| 643 | + for(i=0; z[i]; i++){ | |
| 644 | + if( z[i]=='<' && (zAddr = email_copy_addr(&z[i+1]))!=0 ){ | |
| 645 | + azTo = fossil_realloc(azTo, sizeof(azTo[0])*(nTo+1) ); | |
| 646 | + azTo[nTo++] = zAddr; | |
| 647 | + } | |
| 648 | + } | |
| 649 | + *pnTo = nTo; | |
| 650 | + *pazTo = azTo; | |
| 651 | +} | |
| 652 | + | |
| 653 | +/* | |
| 654 | +** Free a list of To addresses obtained from a prior call to | |
| 655 | +** email_header_to() | |
| 656 | +*/ | |
| 657 | +void email_header_to_free(int nTo, char **azTo){ | |
| 658 | + int i; | |
| 659 | + for(i=0; i<nTo; i++) fossil_free(azTo[i]); | |
| 660 | + fossil_free(azTo); | |
| 661 | +} | |
| 507 | 662 | |
| 508 | 663 | /* |
| 509 | 664 | ** Send a single email message. |
| 510 | 665 | ** |
| 511 | 666 | ** The recepient(s) must be specified using "To:" or "Cc:" or "Bcc:" fields |
| @@ -579,15 +734,31 @@ | ||
| 579 | 734 | } |
| 580 | 735 | }else if( p->zDir ){ |
| 581 | 736 | char *zFile = emailTempFilename(p->zDir); |
| 582 | 737 | blob_write_to_file(&all, zFile); |
| 583 | 738 | fossil_free(zFile); |
| 739 | + }else if( p->pSmtp ){ | |
| 740 | + char **azTo = 0; | |
| 741 | + int nTo = 0; | |
| 742 | + email_header_to(pHdr, &nTo, &azTo); | |
| 743 | + if( nTo>0 ){ | |
| 744 | + smtp_send_msg(p->pSmtp, p->zFrom, nTo, (const char**)azTo,blob_str(&all)); | |
| 745 | + email_header_to_free(nTo, azTo); | |
| 746 | + } | |
| 584 | 747 | }else if( strcmp(p->zDest, "stdout")==0 ){ |
| 748 | + char **azTo = 0; | |
| 749 | + int nTo = 0; | |
| 750 | + int i; | |
| 751 | + email_header_to(pHdr, &nTo, &azTo); | |
| 752 | + for(i=0; i<nTo; i++){ | |
| 753 | + fossil_print("X-To-Test-%d: [%s]\r\n", i, azTo[i]); | |
| 754 | + } | |
| 755 | + email_header_to_free(nTo, azTo); | |
| 585 | 756 | blob_add_final_newline(&all); |
| 586 | 757 | fossil_print("%s", blob_str(&all)); |
| 587 | 758 | } |
| 588 | - blob_zero(&all); | |
| 759 | + blob_reset(&all); | |
| 589 | 760 | } |
| 590 | 761 | |
| 591 | 762 | /* |
| 592 | 763 | ** Analyze and act on a received email. |
| 593 | 764 | ** |
| @@ -597,11 +768,11 @@ | ||
| 597 | 768 | ** This routine acts on all email messages received from the |
| 598 | 769 | ** "fossil email inbound" command. |
| 599 | 770 | */ |
| 600 | 771 | void email_receive(Blob *pMsg){ |
| 601 | 772 | /* To Do: Look for bounce messages and possibly disable subscriptions */ |
| 602 | - blob_zero(pMsg); | |
| 773 | + blob_reset(pMsg); | |
| 603 | 774 | } |
| 604 | 775 | |
| 605 | 776 | /* |
| 606 | 777 | ** SETTING: email-send-method width=5 default=off |
| 607 | 778 | ** Determine the method used to send email. Allowed values are |
| @@ -640,10 +811,17 @@ | ||
| 640 | 811 | ** SETTING: email-receive-dir width=40 |
| 641 | 812 | ** Inbound email messages are saved as separate files in this directory, |
| 642 | 813 | ** for debugging analysis. Disable saving of inbound emails omitting |
| 643 | 814 | ** this setting, or making it an empty string. |
| 644 | 815 | */ |
| 816 | +/* | |
| 817 | +** SETTING: email-send-relayhost width=40 | |
| 818 | +** This is the hostname and TCP port to which output email messages | |
| 819 | +** are sent when email-send-method is "relay". There should be an | |
| 820 | +** SMTP server configured as a Mail Submission Agent listening on the | |
| 821 | +** designated host and port and all times. | |
| 822 | +*/ | |
| 645 | 823 | |
| 646 | 824 | |
| 647 | 825 | /* |
| 648 | 826 | ** COMMAND: email |
| 649 | 827 | ** |
| @@ -672,10 +850,11 @@ | ||
| 672 | 850 | ** email sending mechanism is currently configured. |
| 673 | 851 | ** Use this for testing the email configuration. |
| 674 | 852 | ** Options: |
| 675 | 853 | ** |
| 676 | 854 | ** --body FILENAME |
| 855 | +** --smtp-trace | |
| 677 | 856 | ** --stdout |
| 678 | 857 | ** --subject|-S SUBJECT |
| 679 | 858 | ** |
| 680 | 859 | ** settings [NAME VALUE] With no arguments, list all email settings. |
| 681 | 860 | ** Or change the value of a single email setting. |
| @@ -727,11 +906,11 @@ | ||
| 727 | 906 | "This will erase all content in the repository tables, thus\n" |
| 728 | 907 | "deleting all subscriber information. The information will be\n" |
| 729 | 908 | "unrecoverable.\n"); |
| 730 | 909 | prompt_user("Continue? (y/N) ", &yn); |
| 731 | 910 | c = blob_str(&yn)[0]; |
| 732 | - blob_zero(&yn); | |
| 911 | + blob_reset(&yn); | |
| 733 | 912 | } |
| 734 | 913 | if( c=='y' ){ |
| 735 | 914 | email_triggers_disable(); |
| 736 | 915 | db_multi_exec( |
| 737 | 916 | "DROP TABLE IF EXISTS subscriber;\n" |
| @@ -746,13 +925,15 @@ | ||
| 746 | 925 | }else |
| 747 | 926 | if( strncmp(zCmd, "send", nCmd)==0 ){ |
| 748 | 927 | Blob prompt, body, hdr; |
| 749 | 928 | const char *zDest = find_option("stdout",0,0)!=0 ? "stdout" : 0; |
| 750 | 929 | int i; |
| 930 | + u32 mFlags = EMAIL_IMMEDIATE_FAIL; | |
| 751 | 931 | const char *zSubject = find_option("subject", "S", 1); |
| 752 | 932 | const char *zSource = find_option("body", 0, 1); |
| 753 | 933 | EmailSender *pSender; |
| 934 | + if( find_option("smtp-trace",0,0)!=0 ) mFlags |= EMAIL_SMTP_TRACE; | |
| 754 | 935 | verify_all_options(); |
| 755 | 936 | blob_init(&prompt, 0, 0); |
| 756 | 937 | blob_init(&body, 0, 0); |
| 757 | 938 | blob_init(&hdr, 0, 0); |
| 758 | 939 | blob_appendf(&hdr,"To: "); |
| @@ -768,16 +949,16 @@ | ||
| 768 | 949 | blob_read_from_file(&body, zSource, ExtFILE); |
| 769 | 950 | }else{ |
| 770 | 951 | prompt_for_user_comment(&body, &prompt); |
| 771 | 952 | } |
| 772 | 953 | blob_add_final_newline(&body); |
| 773 | - pSender = email_sender_new(zDest, 1); | |
| 954 | + pSender = email_sender_new(zDest, mFlags); | |
| 774 | 955 | email_send(pSender, &hdr, &body); |
| 775 | 956 | email_sender_free(pSender); |
| 776 | - blob_zero(&hdr); | |
| 777 | - blob_zero(&body); | |
| 778 | - blob_zero(&prompt); | |
| 957 | + blob_reset(&hdr); | |
| 958 | + blob_reset(&body); | |
| 959 | + blob_reset(&prompt); | |
| 779 | 960 | }else |
| 780 | 961 | if( strncmp(zCmd, "settings", nCmd)==0 ){ |
| 781 | 962 | int isGlobal = find_option("global",0,0)!=0; |
| 782 | 963 | int nSetting; |
| 783 | 964 | const Setting *pSetting = setting_info(&nSetting); |
| @@ -1018,11 +1199,11 @@ | ||
| 1018 | 1199 | /* We need to send a verification email */ |
| 1019 | 1200 | Blob hdr, body; |
| 1020 | 1201 | EmailSender *pSender = email_sender_new(0,0); |
| 1021 | 1202 | blob_init(&hdr,0,0); |
| 1022 | 1203 | blob_init(&body,0,0); |
| 1023 | - blob_appendf(&hdr, "To: %s\n", zEAddr); | |
| 1204 | + blob_appendf(&hdr, "To: <%s>\n", zEAddr); | |
| 1024 | 1205 | blob_appendf(&hdr, "Subject: Subscription verification\n"); |
| 1025 | 1206 | blob_appendf(&body, zConfirmMsg/*works-like:"%s%s%s"*/, |
| 1026 | 1207 | g.zBaseURL, g.zBaseURL, zCode); |
| 1027 | 1208 | email_send(pSender, &hdr, &body); |
| 1028 | 1209 | style_header("Email Alert Verification"); |
| @@ -1582,11 +1763,11 @@ | ||
| 1582 | 1763 | ** Free a linked list of EmailEvent objects |
| 1583 | 1764 | */ |
| 1584 | 1765 | void email_free_eventlist(EmailEvent *p){ |
| 1585 | 1766 | while( p ){ |
| 1586 | 1767 | EmailEvent *pNext = p->pNext; |
| 1587 | - blob_zero(&p->txt); | |
| 1768 | + blob_reset(&p->txt); | |
| 1588 | 1769 | fossil_free(p); |
| 1589 | 1770 | p = pNext; |
| 1590 | 1771 | } |
| 1591 | 1772 | } |
| 1592 | 1773 | |
| @@ -1715,11 +1896,11 @@ | ||
| 1715 | 1896 | blob_append(&out, blob_buffer(&p->txt), blob_size(&p->txt)); |
| 1716 | 1897 | } |
| 1717 | 1898 | email_free_eventlist(pEvent); |
| 1718 | 1899 | email_footer(&out); |
| 1719 | 1900 | fossil_print("%s", blob_str(&out)); |
| 1720 | - blob_zero(&out); | |
| 1901 | + blob_reset(&out); | |
| 1721 | 1902 | db_end_transaction(0); |
| 1722 | 1903 | } |
| 1723 | 1904 | |
| 1724 | 1905 | /* |
| 1725 | 1906 | ** COMMAND: test-add-alerts |
| @@ -1837,12 +2018,12 @@ | ||
| 1837 | 2018 | zUrl, zCode); |
| 1838 | 2019 | email_send(pSender,&hdr,&body); |
| 1839 | 2020 | blob_truncate(&hdr, 0); |
| 1840 | 2021 | blob_truncate(&body, 0); |
| 1841 | 2022 | } |
| 1842 | - blob_zero(&hdr); | |
| 1843 | - blob_zero(&body); | |
| 2023 | + blob_reset(&hdr); | |
| 2024 | + blob_reset(&body); | |
| 1844 | 2025 | db_finalize(&q); |
| 1845 | 2026 | email_free_eventlist(pEvents); |
| 1846 | 2027 | if( (flags & SENDALERT_PRESERVE)==0 ){ |
| 1847 | 2028 | if( flags & SENDALERT_DIGEST ){ |
| 1848 | 2029 | db_multi_exec("UPDATE pending_alert SET sentDigest=true"); |
| 1849 | 2030 |
| --- src/email.c | |
| +++ src/email.c | |
| @@ -13,11 +13,11 @@ | |
| 13 | ** [email protected] |
| 14 | ** http://www.hwaci.com/drh/ |
| 15 | ** |
| 16 | ******************************************************************************* |
| 17 | ** |
| 18 | ** Email notification features |
| 19 | */ |
| 20 | #include "config.h" |
| 21 | #include "email.h" |
| 22 | #include <assert.h> |
| 23 | #include <time.h> |
| @@ -181,21 +181,22 @@ | |
| 181 | } |
| 182 | } |
| 183 | |
| 184 | |
| 185 | /* |
| 186 | ** WEBPAGE: setup_email |
| 187 | ** |
| 188 | ** Administrative page for configuring and controlling email notification. |
| 189 | ** Normally accessible via the /Admin/Email menu. |
| 190 | */ |
| 191 | void setup_email(void){ |
| 192 | static const char *const azSendMethods[] = { |
| 193 | "off", "Disabled", |
| 194 | "pipe", "Pipe to a command", |
| 195 | "db", "Store in a database", |
| 196 | "dir", "Store in a directory" |
| 197 | }; |
| 198 | login_check_credentials(); |
| 199 | if( !g.perm.Setup ){ |
| 200 | login_needed(0); |
| 201 | return; |
| @@ -202,11 +203,11 @@ | |
| 202 | } |
| 203 | db_begin_transaction(); |
| 204 | |
| 205 | email_submenu_common(); |
| 206 | style_header("Email Notification Setup"); |
| 207 | @ <form action="%R/setup_email" method="post"><div> |
| 208 | @ <input type="submit" name="submit" value="Apply Changes" /><hr> |
| 209 | login_insert_csrf_secret(); |
| 210 | |
| 211 | entry_attribute("Canonical Server URL", 40, "email-url", |
| 212 | "eurl", "", 0); |
| @@ -244,17 +245,14 @@ | |
| 244 | @ (Property: "email-autoexec")</p> |
| 245 | @ <hr> |
| 246 | |
| 247 | multiple_choice_attribute("Email Send Method", "email-send-method", "esm", |
| 248 | "off", count(azSendMethods)/2, azSendMethods); |
| 249 | @ <p>How to send email. The "Pipe to a command" |
| 250 | @ method is the usual choice in production. |
| 251 | @ (Property: "email-send-method")</p> |
| 252 | @ <hr> |
| 253 | email_schema(1); |
| 254 | |
| 255 | entry_attribute("Command To Pipe Email To", 80, "email-send-command", |
| 256 | "ecmd", "sendmail -t", 0); |
| 257 | @ <p>When the send method is "pipe to a command", this is the command |
| 258 | @ that is run. Email messages are piped into the standard input of this |
| 259 | @ command. The command is expected to extract the sender address, |
| 260 | @ recepient addresses, and subject from the header of the piped email |
| @@ -269,10 +267,19 @@ | |
| 269 | entry_attribute("Directory In Which To Store Email", 60, "email-send-dir", |
| 270 | "esdir", "", 0); |
| 271 | @ <p>When the send method is "store in a directory", each email message is |
| 272 | @ stored as a separate file in the directory shown here. |
| 273 | @ (Property: "email-send-dir")</p> |
| 274 | @ <hr> |
| 275 | |
| 276 | entry_attribute("Administrator email address", 40, "email-admin", |
| 277 | "eadmin", "", 0); |
| 278 | @ <p>This is the email for the human administrator for the system. |
| @@ -376,14 +383,21 @@ | |
| 376 | const char *zDest; /* How to send email. */ |
| 377 | const char *zDb; /* Name of database file */ |
| 378 | const char *zDir; /* Directory in which to store as email files */ |
| 379 | const char *zCmd; /* Command to run for each email */ |
| 380 | const char *zFrom; /* Emails come from here */ |
| 381 | Blob out; /* For zDest=="blob" */ |
| 382 | char *zErr; /* Error message */ |
| 383 | int bImmediateFail; /* On any error, call fossil_fatal() */ |
| 384 | }; |
| 385 | #endif /* INTERFACE */ |
| 386 | |
| 387 | /* |
| 388 | ** Shutdown an emailer. Clear all information other than the error message. |
| 389 | */ |
| @@ -393,12 +407,16 @@ | |
| 393 | sqlite3_close(p->db); |
| 394 | p->db = 0; |
| 395 | p->zDb = 0; |
| 396 | p->zDir = 0; |
| 397 | p->zCmd = 0; |
| 398 | p->zDest = "off"; |
| 399 | blob_zero(&p->out); |
| 400 | } |
| 401 | |
| 402 | /* |
| 403 | ** Put the EmailSender into an error state. |
| 404 | */ |
| @@ -407,11 +425,11 @@ | |
| 407 | fossil_free(p->zErr); |
| 408 | va_start(ap, zFormat); |
| 409 | p->zErr = vmprintf(zFormat, ap); |
| 410 | va_end(ap); |
| 411 | emailerShutdown(p); |
| 412 | if( p->bImmediateFail ){ |
| 413 | fossil_fatal("%s", p->zErr); |
| 414 | } |
| 415 | } |
| 416 | |
| 417 | /* |
| @@ -455,16 +473,17 @@ | |
| 455 | ** zAltDest to cause all emails to be printed to the console for |
| 456 | ** debugging purposes. |
| 457 | ** |
| 458 | ** The EmailSender object returned must be freed using email_sender_free(). |
| 459 | */ |
| 460 | EmailSender *email_sender_new(const char *zAltDest, int bImmediateFail){ |
| 461 | EmailSender *p; |
| 462 | |
| 463 | p = fossil_malloc(sizeof(*p)); |
| 464 | memset(p, 0, sizeof(*p)); |
| 465 | p->bImmediateFail = bImmediateFail; |
| 466 | if( zAltDest ){ |
| 467 | p->zDest = zAltDest; |
| 468 | }else{ |
| 469 | p->zDest = db_get("email-send-method","off"); |
| 470 | } |
| @@ -499,13 +518,149 @@ | |
| 499 | emailerGetSetting(p, &p->zCmd, "email-send-command"); |
| 500 | }else if( fossil_strcmp(p->zDest, "dir")==0 ){ |
| 501 | emailerGetSetting(p, &p->zDir, "email-send-dir"); |
| 502 | }else if( fossil_strcmp(p->zDest, "blob")==0 ){ |
| 503 | blob_init(&p->out, 0, 0); |
| 504 | } |
| 505 | return p; |
| 506 | } |
| 507 | |
| 508 | /* |
| 509 | ** Send a single email message. |
| 510 | ** |
| 511 | ** The recepient(s) must be specified using "To:" or "Cc:" or "Bcc:" fields |
| @@ -579,15 +734,31 @@ | |
| 579 | } |
| 580 | }else if( p->zDir ){ |
| 581 | char *zFile = emailTempFilename(p->zDir); |
| 582 | blob_write_to_file(&all, zFile); |
| 583 | fossil_free(zFile); |
| 584 | }else if( strcmp(p->zDest, "stdout")==0 ){ |
| 585 | blob_add_final_newline(&all); |
| 586 | fossil_print("%s", blob_str(&all)); |
| 587 | } |
| 588 | blob_zero(&all); |
| 589 | } |
| 590 | |
| 591 | /* |
| 592 | ** Analyze and act on a received email. |
| 593 | ** |
| @@ -597,11 +768,11 @@ | |
| 597 | ** This routine acts on all email messages received from the |
| 598 | ** "fossil email inbound" command. |
| 599 | */ |
| 600 | void email_receive(Blob *pMsg){ |
| 601 | /* To Do: Look for bounce messages and possibly disable subscriptions */ |
| 602 | blob_zero(pMsg); |
| 603 | } |
| 604 | |
| 605 | /* |
| 606 | ** SETTING: email-send-method width=5 default=off |
| 607 | ** Determine the method used to send email. Allowed values are |
| @@ -640,10 +811,17 @@ | |
| 640 | ** SETTING: email-receive-dir width=40 |
| 641 | ** Inbound email messages are saved as separate files in this directory, |
| 642 | ** for debugging analysis. Disable saving of inbound emails omitting |
| 643 | ** this setting, or making it an empty string. |
| 644 | */ |
| 645 | |
| 646 | |
| 647 | /* |
| 648 | ** COMMAND: email |
| 649 | ** |
| @@ -672,10 +850,11 @@ | |
| 672 | ** email sending mechanism is currently configured. |
| 673 | ** Use this for testing the email configuration. |
| 674 | ** Options: |
| 675 | ** |
| 676 | ** --body FILENAME |
| 677 | ** --stdout |
| 678 | ** --subject|-S SUBJECT |
| 679 | ** |
| 680 | ** settings [NAME VALUE] With no arguments, list all email settings. |
| 681 | ** Or change the value of a single email setting. |
| @@ -727,11 +906,11 @@ | |
| 727 | "This will erase all content in the repository tables, thus\n" |
| 728 | "deleting all subscriber information. The information will be\n" |
| 729 | "unrecoverable.\n"); |
| 730 | prompt_user("Continue? (y/N) ", &yn); |
| 731 | c = blob_str(&yn)[0]; |
| 732 | blob_zero(&yn); |
| 733 | } |
| 734 | if( c=='y' ){ |
| 735 | email_triggers_disable(); |
| 736 | db_multi_exec( |
| 737 | "DROP TABLE IF EXISTS subscriber;\n" |
| @@ -746,13 +925,15 @@ | |
| 746 | }else |
| 747 | if( strncmp(zCmd, "send", nCmd)==0 ){ |
| 748 | Blob prompt, body, hdr; |
| 749 | const char *zDest = find_option("stdout",0,0)!=0 ? "stdout" : 0; |
| 750 | int i; |
| 751 | const char *zSubject = find_option("subject", "S", 1); |
| 752 | const char *zSource = find_option("body", 0, 1); |
| 753 | EmailSender *pSender; |
| 754 | verify_all_options(); |
| 755 | blob_init(&prompt, 0, 0); |
| 756 | blob_init(&body, 0, 0); |
| 757 | blob_init(&hdr, 0, 0); |
| 758 | blob_appendf(&hdr,"To: "); |
| @@ -768,16 +949,16 @@ | |
| 768 | blob_read_from_file(&body, zSource, ExtFILE); |
| 769 | }else{ |
| 770 | prompt_for_user_comment(&body, &prompt); |
| 771 | } |
| 772 | blob_add_final_newline(&body); |
| 773 | pSender = email_sender_new(zDest, 1); |
| 774 | email_send(pSender, &hdr, &body); |
| 775 | email_sender_free(pSender); |
| 776 | blob_zero(&hdr); |
| 777 | blob_zero(&body); |
| 778 | blob_zero(&prompt); |
| 779 | }else |
| 780 | if( strncmp(zCmd, "settings", nCmd)==0 ){ |
| 781 | int isGlobal = find_option("global",0,0)!=0; |
| 782 | int nSetting; |
| 783 | const Setting *pSetting = setting_info(&nSetting); |
| @@ -1018,11 +1199,11 @@ | |
| 1018 | /* We need to send a verification email */ |
| 1019 | Blob hdr, body; |
| 1020 | EmailSender *pSender = email_sender_new(0,0); |
| 1021 | blob_init(&hdr,0,0); |
| 1022 | blob_init(&body,0,0); |
| 1023 | blob_appendf(&hdr, "To: %s\n", zEAddr); |
| 1024 | blob_appendf(&hdr, "Subject: Subscription verification\n"); |
| 1025 | blob_appendf(&body, zConfirmMsg/*works-like:"%s%s%s"*/, |
| 1026 | g.zBaseURL, g.zBaseURL, zCode); |
| 1027 | email_send(pSender, &hdr, &body); |
| 1028 | style_header("Email Alert Verification"); |
| @@ -1582,11 +1763,11 @@ | |
| 1582 | ** Free a linked list of EmailEvent objects |
| 1583 | */ |
| 1584 | void email_free_eventlist(EmailEvent *p){ |
| 1585 | while( p ){ |
| 1586 | EmailEvent *pNext = p->pNext; |
| 1587 | blob_zero(&p->txt); |
| 1588 | fossil_free(p); |
| 1589 | p = pNext; |
| 1590 | } |
| 1591 | } |
| 1592 | |
| @@ -1715,11 +1896,11 @@ | |
| 1715 | blob_append(&out, blob_buffer(&p->txt), blob_size(&p->txt)); |
| 1716 | } |
| 1717 | email_free_eventlist(pEvent); |
| 1718 | email_footer(&out); |
| 1719 | fossil_print("%s", blob_str(&out)); |
| 1720 | blob_zero(&out); |
| 1721 | db_end_transaction(0); |
| 1722 | } |
| 1723 | |
| 1724 | /* |
| 1725 | ** COMMAND: test-add-alerts |
| @@ -1837,12 +2018,12 @@ | |
| 1837 | zUrl, zCode); |
| 1838 | email_send(pSender,&hdr,&body); |
| 1839 | blob_truncate(&hdr, 0); |
| 1840 | blob_truncate(&body, 0); |
| 1841 | } |
| 1842 | blob_zero(&hdr); |
| 1843 | blob_zero(&body); |
| 1844 | db_finalize(&q); |
| 1845 | email_free_eventlist(pEvents); |
| 1846 | if( (flags & SENDALERT_PRESERVE)==0 ){ |
| 1847 | if( flags & SENDALERT_DIGEST ){ |
| 1848 | db_multi_exec("UPDATE pending_alert SET sentDigest=true"); |
| 1849 |
| --- src/email.c | |
| +++ src/email.c | |
| @@ -13,11 +13,11 @@ | |
| 13 | ** [email protected] |
| 14 | ** http://www.hwaci.com/drh/ |
| 15 | ** |
| 16 | ******************************************************************************* |
| 17 | ** |
| 18 | ** Logic for email notification, also known as "alerts". |
| 19 | */ |
| 20 | #include "config.h" |
| 21 | #include "email.h" |
| 22 | #include <assert.h> |
| 23 | #include <time.h> |
| @@ -181,21 +181,22 @@ | |
| 181 | } |
| 182 | } |
| 183 | |
| 184 | |
| 185 | /* |
| 186 | ** WEBPAGE: setup_notification |
| 187 | ** |
| 188 | ** Administrative page for configuring and controlling email notification. |
| 189 | ** Normally accessible via the /Admin/Notification menu. |
| 190 | */ |
| 191 | void setup_notification(void){ |
| 192 | static const char *const azSendMethods[] = { |
| 193 | "off", "Disabled", |
| 194 | "pipe", "Pipe to a command", |
| 195 | "db", "Store in a database", |
| 196 | "dir", "Store in a directory", |
| 197 | "relay", "SMTP relay" |
| 198 | }; |
| 199 | login_check_credentials(); |
| 200 | if( !g.perm.Setup ){ |
| 201 | login_needed(0); |
| 202 | return; |
| @@ -202,11 +203,11 @@ | |
| 203 | } |
| 204 | db_begin_transaction(); |
| 205 | |
| 206 | email_submenu_common(); |
| 207 | style_header("Email Notification Setup"); |
| 208 | @ <form action="%R/setup_notification" method="post"><div> |
| 209 | @ <input type="submit" name="submit" value="Apply Changes" /><hr> |
| 210 | login_insert_csrf_secret(); |
| 211 | |
| 212 | entry_attribute("Canonical Server URL", 40, "email-url", |
| 213 | "eurl", "", 0); |
| @@ -244,17 +245,14 @@ | |
| 245 | @ (Property: "email-autoexec")</p> |
| 246 | @ <hr> |
| 247 | |
| 248 | multiple_choice_attribute("Email Send Method", "email-send-method", "esm", |
| 249 | "off", count(azSendMethods)/2, azSendMethods); |
| 250 | @ <p>How to send email. Requires auxiliary information from the fields |
| 251 | @ that follow. (Property: "email-send-method")</p> |
| 252 | email_schema(1); |
| 253 | entry_attribute("Command To Pipe Email To", 60, "email-send-command", |
| 254 | "ecmd", "sendmail -t", 0); |
| 255 | @ <p>When the send method is "pipe to a command", this is the command |
| 256 | @ that is run. Email messages are piped into the standard input of this |
| 257 | @ command. The command is expected to extract the sender address, |
| 258 | @ recepient addresses, and subject from the header of the piped email |
| @@ -269,10 +267,19 @@ | |
| 267 | entry_attribute("Directory In Which To Store Email", 60, "email-send-dir", |
| 268 | "esdir", "", 0); |
| 269 | @ <p>When the send method is "store in a directory", each email message is |
| 270 | @ stored as a separate file in the directory shown here. |
| 271 | @ (Property: "email-send-dir")</p> |
| 272 | |
| 273 | entry_attribute("SMTP relay host", 60, "email-send-relayhost", |
| 274 | "esrh", "", 0); |
| 275 | @ <p>When the send method is "SMTP relay", each email message is |
| 276 | @ transmitted via the SMTP protocol (rfc5321) to a "Mail Submission |
| 277 | @ Agent" or "MSA" (rfc4409) at the hostname shown here. Optionally |
| 278 | @ append a colon and TCP port number (ex: smtp.example.com:587). |
| 279 | @ The default TCP port number is 25. |
| 280 | @ (Property: "email-send-relayhost")</p> |
| 281 | @ <hr> |
| 282 | |
| 283 | entry_attribute("Administrator email address", 40, "email-admin", |
| 284 | "eadmin", "", 0); |
| 285 | @ <p>This is the email for the human administrator for the system. |
| @@ -376,14 +383,21 @@ | |
| 383 | const char *zDest; /* How to send email. */ |
| 384 | const char *zDb; /* Name of database file */ |
| 385 | const char *zDir; /* Directory in which to store as email files */ |
| 386 | const char *zCmd; /* Command to run for each email */ |
| 387 | const char *zFrom; /* Emails come from here */ |
| 388 | SmtpSession *pSmtp; /* SMTP relay connection */ |
| 389 | Blob out; /* For zDest=="blob" */ |
| 390 | char *zErr; /* Error message */ |
| 391 | u32 mFlags; /* Flags */ |
| 392 | int bImmediateFail; /* On any error, call fossil_fatal() */ |
| 393 | }; |
| 394 | |
| 395 | /* Allowed values for EmailSender flags */ |
| 396 | #define EMAIL_IMMEDIATE_FAIL 0x0001 /* Call fossil_fatal() on any error */ |
| 397 | #define EMAIL_SMTP_TRACE 0x0002 /* Write SMTP transcript to console */ |
| 398 | |
| 399 | #endif /* INTERFACE */ |
| 400 | |
| 401 | /* |
| 402 | ** Shutdown an emailer. Clear all information other than the error message. |
| 403 | */ |
| @@ -393,12 +407,16 @@ | |
| 407 | sqlite3_close(p->db); |
| 408 | p->db = 0; |
| 409 | p->zDb = 0; |
| 410 | p->zDir = 0; |
| 411 | p->zCmd = 0; |
| 412 | if( p->pSmtp ){ |
| 413 | smtp_client_quit(p->pSmtp); |
| 414 | smtp_session_free(p->pSmtp); |
| 415 | p->pSmtp = 0; |
| 416 | } |
| 417 | blob_reset(&p->out); |
| 418 | } |
| 419 | |
| 420 | /* |
| 421 | ** Put the EmailSender into an error state. |
| 422 | */ |
| @@ -407,11 +425,11 @@ | |
| 425 | fossil_free(p->zErr); |
| 426 | va_start(ap, zFormat); |
| 427 | p->zErr = vmprintf(zFormat, ap); |
| 428 | va_end(ap); |
| 429 | emailerShutdown(p); |
| 430 | if( p->mFlags & EMAIL_IMMEDIATE_FAIL ){ |
| 431 | fossil_fatal("%s", p->zErr); |
| 432 | } |
| 433 | } |
| 434 | |
| 435 | /* |
| @@ -455,16 +473,17 @@ | |
| 473 | ** zAltDest to cause all emails to be printed to the console for |
| 474 | ** debugging purposes. |
| 475 | ** |
| 476 | ** The EmailSender object returned must be freed using email_sender_free(). |
| 477 | */ |
| 478 | EmailSender *email_sender_new(const char *zAltDest, u32 mFlags){ |
| 479 | EmailSender *p; |
| 480 | |
| 481 | p = fossil_malloc(sizeof(*p)); |
| 482 | memset(p, 0, sizeof(*p)); |
| 483 | blob_init(&p->out, 0, 0); |
| 484 | p->mFlags = mFlags; |
| 485 | if( zAltDest ){ |
| 486 | p->zDest = zAltDest; |
| 487 | }else{ |
| 488 | p->zDest = db_get("email-send-method","off"); |
| 489 | } |
| @@ -499,13 +518,149 @@ | |
| 518 | emailerGetSetting(p, &p->zCmd, "email-send-command"); |
| 519 | }else if( fossil_strcmp(p->zDest, "dir")==0 ){ |
| 520 | emailerGetSetting(p, &p->zDir, "email-send-dir"); |
| 521 | }else if( fossil_strcmp(p->zDest, "blob")==0 ){ |
| 522 | blob_init(&p->out, 0, 0); |
| 523 | }else if( fossil_strcmp(p->zDest, "relay")==0 ){ |
| 524 | const char *zRelay = 0; |
| 525 | emailerGetSetting(p, &zRelay, "email-send-relayhost"); |
| 526 | if( zRelay ){ |
| 527 | u32 smtpFlags = SMTP_DIRECT; |
| 528 | if( mFlags & EMAIL_SMTP_TRACE ) smtpFlags |= SMTP_TRACE_STDOUT; |
| 529 | p->pSmtp = smtp_session_new(p->zFrom, zRelay, smtpFlags); |
| 530 | smtp_client_startup(p->pSmtp); |
| 531 | } |
| 532 | } |
| 533 | return p; |
| 534 | } |
| 535 | |
| 536 | /* |
| 537 | ** Scan the header of the email message in pMsg looking for the |
| 538 | ** (first) occurrance of zField. Fill pValue with the content of |
| 539 | ** that field. |
| 540 | ** |
| 541 | ** This routine initializes pValue. Any prior content of pValue is |
| 542 | ** discarded (leaked). |
| 543 | ** |
| 544 | ** Return non-zero on success. Return 0 if no instance of the header |
| 545 | ** is found. |
| 546 | */ |
| 547 | int email_header_value(Blob *pMsg, const char *zField, Blob *pValue){ |
| 548 | int nField = (int)strlen(zField); |
| 549 | Blob line; |
| 550 | blob_rewind(pMsg); |
| 551 | blob_init(pValue,0,0); |
| 552 | while( blob_line(pMsg, &line) ){ |
| 553 | int n, i; |
| 554 | char *z; |
| 555 | blob_trim(&line); |
| 556 | n = blob_size(&line); |
| 557 | if( n==0 ) return 0; |
| 558 | if( n<nField+1 ) continue; |
| 559 | z = blob_buffer(&line); |
| 560 | if( sqlite3_strnicmp(z, zField, nField)==0 && z[nField]==':' ){ |
| 561 | for(i=nField+1; i<n && fossil_isspace(z[i]); i++){} |
| 562 | blob_init(pValue, z+i, n-i); |
| 563 | while( blob_line(pMsg, &line) ){ |
| 564 | blob_trim(&line); |
| 565 | n = blob_size(&line); |
| 566 | if( n==0 ) break; |
| 567 | z = blob_buffer(&line); |
| 568 | if( !fossil_isspace(z[0]) ) break; |
| 569 | for(i=1; i<n && fossil_isspace(z[i]); i++){} |
| 570 | blob_append(pValue, " ", 1); |
| 571 | blob_append(pValue, z+i, n-i); |
| 572 | } |
| 573 | return 1; |
| 574 | } |
| 575 | } |
| 576 | return 0; |
| 577 | } |
| 578 | |
| 579 | /* |
| 580 | ** Make a copy of the input string up to but not including the |
| 581 | ** first ">" character. |
| 582 | ** |
| 583 | ** Verify that the string really that is to be copied really is a |
| 584 | ** valid email address. If it is not, then return NULL. |
| 585 | ** |
| 586 | ** This routine is more restrictive than necessary. It does not |
| 587 | ** allow comments, IP address, quoted strings, or certain uncommon |
| 588 | ** characters. The only non-alphanumerics allowed in the local |
| 589 | ** part are "_", "+", "-" and "+". |
| 590 | */ |
| 591 | char *email_copy_addr(const char *z){ |
| 592 | int i; |
| 593 | int nAt = 0; |
| 594 | int nDot = 0; |
| 595 | char c; |
| 596 | if( z[0]=='.' ) return 0; /* Local part cannot begin with "." */ |
| 597 | for(i=0; (c = z[i])!=0 && c!='>'; i++){ |
| 598 | if( fossil_isalnum(c) ){ |
| 599 | /* Alphanumerics are always ok */ |
| 600 | }else if( c=='@' ){ |
| 601 | if( nAt ) return 0; /* Only a single "@" allowed */ |
| 602 | if( i>64 ) return 0; /* Local part too big */ |
| 603 | nAt = 1; |
| 604 | nDot = 0; |
| 605 | if( i==0 ) return 0; /* Disallow empty local part */ |
| 606 | if( z[i-1]=='.' ) return 0; /* Last char of local cannot be "." */ |
| 607 | if( z[i+1]=='.' || z[i+1]=='-' ){ |
| 608 | return 0; /* Domain cannot begin with "." or "-" */ |
| 609 | } |
| 610 | }else if( c=='-' ){ |
| 611 | if( z[i+1]=='>' ) return 0; /* Last character cannot be "-" */ |
| 612 | }else if( c=='.' ){ |
| 613 | if( z[i+1]=='.' ) return 0; /* Do not allow ".." */ |
| 614 | if( z[i+1]=='>' ) return 0; /* Domain may not end with . */ |
| 615 | nDot++; |
| 616 | }else if( (c=='_' || c=='+') && nAt==0 ){ |
| 617 | /* _ and + are ok in the local part */ |
| 618 | }else{ |
| 619 | return 0; /* Anything else is an error */ |
| 620 | } |
| 621 | } |
| 622 | if( c!='>' ) return 0; /* Missing final ">" */ |
| 623 | if( nAt==0 ) return 0; /* No "@" found anywhere */ |
| 624 | if( nDot==0 ) return 0; /* No "." in the domain */ |
| 625 | |
| 626 | /* If we reach this point, the email address is valid */ |
| 627 | return mprintf("%.*s", i, z); |
| 628 | } |
| 629 | |
| 630 | /* |
| 631 | ** Extract all To: header values from the email header supplied. |
| 632 | ** Store them in the array list. |
| 633 | */ |
| 634 | void email_header_to(Blob *pMsg, int *pnTo, char ***pazTo){ |
| 635 | int nTo = 0; |
| 636 | char **azTo = 0; |
| 637 | Blob v; |
| 638 | char *z, *zAddr; |
| 639 | int i; |
| 640 | |
| 641 | email_header_value(pMsg, "to", &v); |
| 642 | z = blob_str(&v); |
| 643 | for(i=0; z[i]; i++){ |
| 644 | if( z[i]=='<' && (zAddr = email_copy_addr(&z[i+1]))!=0 ){ |
| 645 | azTo = fossil_realloc(azTo, sizeof(azTo[0])*(nTo+1) ); |
| 646 | azTo[nTo++] = zAddr; |
| 647 | } |
| 648 | } |
| 649 | *pnTo = nTo; |
| 650 | *pazTo = azTo; |
| 651 | } |
| 652 | |
| 653 | /* |
| 654 | ** Free a list of To addresses obtained from a prior call to |
| 655 | ** email_header_to() |
| 656 | */ |
| 657 | void email_header_to_free(int nTo, char **azTo){ |
| 658 | int i; |
| 659 | for(i=0; i<nTo; i++) fossil_free(azTo[i]); |
| 660 | fossil_free(azTo); |
| 661 | } |
| 662 | |
| 663 | /* |
| 664 | ** Send a single email message. |
| 665 | ** |
| 666 | ** The recepient(s) must be specified using "To:" or "Cc:" or "Bcc:" fields |
| @@ -579,15 +734,31 @@ | |
| 734 | } |
| 735 | }else if( p->zDir ){ |
| 736 | char *zFile = emailTempFilename(p->zDir); |
| 737 | blob_write_to_file(&all, zFile); |
| 738 | fossil_free(zFile); |
| 739 | }else if( p->pSmtp ){ |
| 740 | char **azTo = 0; |
| 741 | int nTo = 0; |
| 742 | email_header_to(pHdr, &nTo, &azTo); |
| 743 | if( nTo>0 ){ |
| 744 | smtp_send_msg(p->pSmtp, p->zFrom, nTo, (const char**)azTo,blob_str(&all)); |
| 745 | email_header_to_free(nTo, azTo); |
| 746 | } |
| 747 | }else if( strcmp(p->zDest, "stdout")==0 ){ |
| 748 | char **azTo = 0; |
| 749 | int nTo = 0; |
| 750 | int i; |
| 751 | email_header_to(pHdr, &nTo, &azTo); |
| 752 | for(i=0; i<nTo; i++){ |
| 753 | fossil_print("X-To-Test-%d: [%s]\r\n", i, azTo[i]); |
| 754 | } |
| 755 | email_header_to_free(nTo, azTo); |
| 756 | blob_add_final_newline(&all); |
| 757 | fossil_print("%s", blob_str(&all)); |
| 758 | } |
| 759 | blob_reset(&all); |
| 760 | } |
| 761 | |
| 762 | /* |
| 763 | ** Analyze and act on a received email. |
| 764 | ** |
| @@ -597,11 +768,11 @@ | |
| 768 | ** This routine acts on all email messages received from the |
| 769 | ** "fossil email inbound" command. |
| 770 | */ |
| 771 | void email_receive(Blob *pMsg){ |
| 772 | /* To Do: Look for bounce messages and possibly disable subscriptions */ |
| 773 | blob_reset(pMsg); |
| 774 | } |
| 775 | |
| 776 | /* |
| 777 | ** SETTING: email-send-method width=5 default=off |
| 778 | ** Determine the method used to send email. Allowed values are |
| @@ -640,10 +811,17 @@ | |
| 811 | ** SETTING: email-receive-dir width=40 |
| 812 | ** Inbound email messages are saved as separate files in this directory, |
| 813 | ** for debugging analysis. Disable saving of inbound emails omitting |
| 814 | ** this setting, or making it an empty string. |
| 815 | */ |
| 816 | /* |
| 817 | ** SETTING: email-send-relayhost width=40 |
| 818 | ** This is the hostname and TCP port to which output email messages |
| 819 | ** are sent when email-send-method is "relay". There should be an |
| 820 | ** SMTP server configured as a Mail Submission Agent listening on the |
| 821 | ** designated host and port and all times. |
| 822 | */ |
| 823 | |
| 824 | |
| 825 | /* |
| 826 | ** COMMAND: email |
| 827 | ** |
| @@ -672,10 +850,11 @@ | |
| 850 | ** email sending mechanism is currently configured. |
| 851 | ** Use this for testing the email configuration. |
| 852 | ** Options: |
| 853 | ** |
| 854 | ** --body FILENAME |
| 855 | ** --smtp-trace |
| 856 | ** --stdout |
| 857 | ** --subject|-S SUBJECT |
| 858 | ** |
| 859 | ** settings [NAME VALUE] With no arguments, list all email settings. |
| 860 | ** Or change the value of a single email setting. |
| @@ -727,11 +906,11 @@ | |
| 906 | "This will erase all content in the repository tables, thus\n" |
| 907 | "deleting all subscriber information. The information will be\n" |
| 908 | "unrecoverable.\n"); |
| 909 | prompt_user("Continue? (y/N) ", &yn); |
| 910 | c = blob_str(&yn)[0]; |
| 911 | blob_reset(&yn); |
| 912 | } |
| 913 | if( c=='y' ){ |
| 914 | email_triggers_disable(); |
| 915 | db_multi_exec( |
| 916 | "DROP TABLE IF EXISTS subscriber;\n" |
| @@ -746,13 +925,15 @@ | |
| 925 | }else |
| 926 | if( strncmp(zCmd, "send", nCmd)==0 ){ |
| 927 | Blob prompt, body, hdr; |
| 928 | const char *zDest = find_option("stdout",0,0)!=0 ? "stdout" : 0; |
| 929 | int i; |
| 930 | u32 mFlags = EMAIL_IMMEDIATE_FAIL; |
| 931 | const char *zSubject = find_option("subject", "S", 1); |
| 932 | const char *zSource = find_option("body", 0, 1); |
| 933 | EmailSender *pSender; |
| 934 | if( find_option("smtp-trace",0,0)!=0 ) mFlags |= EMAIL_SMTP_TRACE; |
| 935 | verify_all_options(); |
| 936 | blob_init(&prompt, 0, 0); |
| 937 | blob_init(&body, 0, 0); |
| 938 | blob_init(&hdr, 0, 0); |
| 939 | blob_appendf(&hdr,"To: "); |
| @@ -768,16 +949,16 @@ | |
| 949 | blob_read_from_file(&body, zSource, ExtFILE); |
| 950 | }else{ |
| 951 | prompt_for_user_comment(&body, &prompt); |
| 952 | } |
| 953 | blob_add_final_newline(&body); |
| 954 | pSender = email_sender_new(zDest, mFlags); |
| 955 | email_send(pSender, &hdr, &body); |
| 956 | email_sender_free(pSender); |
| 957 | blob_reset(&hdr); |
| 958 | blob_reset(&body); |
| 959 | blob_reset(&prompt); |
| 960 | }else |
| 961 | if( strncmp(zCmd, "settings", nCmd)==0 ){ |
| 962 | int isGlobal = find_option("global",0,0)!=0; |
| 963 | int nSetting; |
| 964 | const Setting *pSetting = setting_info(&nSetting); |
| @@ -1018,11 +1199,11 @@ | |
| 1199 | /* We need to send a verification email */ |
| 1200 | Blob hdr, body; |
| 1201 | EmailSender *pSender = email_sender_new(0,0); |
| 1202 | blob_init(&hdr,0,0); |
| 1203 | blob_init(&body,0,0); |
| 1204 | blob_appendf(&hdr, "To: <%s>\n", zEAddr); |
| 1205 | blob_appendf(&hdr, "Subject: Subscription verification\n"); |
| 1206 | blob_appendf(&body, zConfirmMsg/*works-like:"%s%s%s"*/, |
| 1207 | g.zBaseURL, g.zBaseURL, zCode); |
| 1208 | email_send(pSender, &hdr, &body); |
| 1209 | style_header("Email Alert Verification"); |
| @@ -1582,11 +1763,11 @@ | |
| 1763 | ** Free a linked list of EmailEvent objects |
| 1764 | */ |
| 1765 | void email_free_eventlist(EmailEvent *p){ |
| 1766 | while( p ){ |
| 1767 | EmailEvent *pNext = p->pNext; |
| 1768 | blob_reset(&p->txt); |
| 1769 | fossil_free(p); |
| 1770 | p = pNext; |
| 1771 | } |
| 1772 | } |
| 1773 | |
| @@ -1715,11 +1896,11 @@ | |
| 1896 | blob_append(&out, blob_buffer(&p->txt), blob_size(&p->txt)); |
| 1897 | } |
| 1898 | email_free_eventlist(pEvent); |
| 1899 | email_footer(&out); |
| 1900 | fossil_print("%s", blob_str(&out)); |
| 1901 | blob_reset(&out); |
| 1902 | db_end_transaction(0); |
| 1903 | } |
| 1904 | |
| 1905 | /* |
| 1906 | ** COMMAND: test-add-alerts |
| @@ -1837,12 +2018,12 @@ | |
| 2018 | zUrl, zCode); |
| 2019 | email_send(pSender,&hdr,&body); |
| 2020 | blob_truncate(&hdr, 0); |
| 2021 | blob_truncate(&body, 0); |
| 2022 | } |
| 2023 | blob_reset(&hdr); |
| 2024 | blob_reset(&body); |
| 2025 | db_finalize(&q); |
| 2026 | email_free_eventlist(pEvents); |
| 2027 | if( (flags & SENDALERT_PRESERVE)==0 ){ |
| 2028 | if( flags & SENDALERT_DIGEST ){ |
| 2029 | db_multi_exec("UPDATE pending_alert SET sentDigest=true"); |
| 2030 |
+17
-7
| --- src/http_socket.c | ||
| +++ src/http_socket.c | ||
| @@ -79,12 +79,14 @@ | ||
| 79 | 79 | } |
| 80 | 80 | |
| 81 | 81 | /* |
| 82 | 82 | ** Return the current socket error message |
| 83 | 83 | */ |
| 84 | -const char *socket_errmsg(void){ | |
| 85 | - return socketErrMsg; | |
| 84 | +char *socket_errmsg(void){ | |
| 85 | + char *zResult = socketErrMsg; | |
| 86 | + socketErrMsg = 0; | |
| 87 | + return zResult; | |
| 86 | 88 | } |
| 87 | 89 | |
| 88 | 90 | /* |
| 89 | 91 | ** Call this routine once before any other use of the socket interface. |
| 90 | 92 | ** This routine does initial configuration of the socket module. |
| @@ -132,12 +134,12 @@ | ||
| 132 | 134 | |
| 133 | 135 | /* |
| 134 | 136 | ** Open a socket connection. The identify of the server is determined |
| 135 | 137 | ** by pUrlData |
| 136 | 138 | ** |
| 137 | -** pUrlDAta->name Name of the server. Ex: www.fossil-scm.org | |
| 138 | -** pUrlDAta->port TCP/IP port to use. Ex: 80 | |
| 139 | +** pUrlData->name Name of the server. Ex: www.fossil-scm.org | |
| 140 | +** pUrlData->port TCP/IP port to use. Ex: 80 | |
| 139 | 141 | ** |
| 140 | 142 | ** Return the number of errors. |
| 141 | 143 | */ |
| 142 | 144 | int socket_open(UrlData *pUrlData){ |
| 143 | 145 | int rc = 0; |
| @@ -190,11 +192,11 @@ | ||
| 190 | 192 | } |
| 191 | 193 | |
| 192 | 194 | /* |
| 193 | 195 | ** Send content out over the open socket connection. |
| 194 | 196 | */ |
| 195 | -size_t socket_send(void *NotUsed, void *pContent, size_t N){ | |
| 197 | +size_t socket_send(void *NotUsed, const void *pContent, size_t N){ | |
| 196 | 198 | size_t sent; |
| 197 | 199 | size_t total = 0; |
| 198 | 200 | while( N>0 ){ |
| 199 | 201 | sent = send(iSocket, pContent, N, 0); |
| 200 | 202 | if( sent<=0 ) break; |
| @@ -205,17 +207,25 @@ | ||
| 205 | 207 | return total; |
| 206 | 208 | } |
| 207 | 209 | |
| 208 | 210 | /* |
| 209 | 211 | ** Receive content back from the open socket connection. |
| 212 | +** Return the number of bytes read. | |
| 213 | +** | |
| 214 | +** When bDontBlock is false, this function blocks until all N bytes | |
| 215 | +** have been read. | |
| 210 | 216 | */ |
| 211 | -size_t socket_receive(void *NotUsed, void *pContent, size_t N){ | |
| 217 | +size_t socket_receive(void *NotUsed, void *pContent, size_t N, int bDontBlock){ | |
| 212 | 218 | ssize_t got; |
| 213 | 219 | size_t total = 0; |
| 220 | + int flags = 0; | |
| 221 | +#ifdef MSG_DONTWAIT | |
| 222 | + if( bDontBlock ) flags |= MSG_DONTWAIT; | |
| 223 | +#endif | |
| 214 | 224 | while( N>0 ){ |
| 215 | 225 | /* WinXP fails for large values of N. So limit it to 64KiB. */ |
| 216 | - got = recv(iSocket, pContent, N>65536 ? 65536 : N, 0); | |
| 226 | + got = recv(iSocket, pContent, N>65536 ? 65536 : N, flags); | |
| 217 | 227 | if( got<=0 ) break; |
| 218 | 228 | total += (size_t)got; |
| 219 | 229 | N -= (size_t)got; |
| 220 | 230 | pContent = (void*)&((char*)pContent)[got]; |
| 221 | 231 | } |
| 222 | 232 |
| --- src/http_socket.c | |
| +++ src/http_socket.c | |
| @@ -79,12 +79,14 @@ | |
| 79 | } |
| 80 | |
| 81 | /* |
| 82 | ** Return the current socket error message |
| 83 | */ |
| 84 | const char *socket_errmsg(void){ |
| 85 | return socketErrMsg; |
| 86 | } |
| 87 | |
| 88 | /* |
| 89 | ** Call this routine once before any other use of the socket interface. |
| 90 | ** This routine does initial configuration of the socket module. |
| @@ -132,12 +134,12 @@ | |
| 132 | |
| 133 | /* |
| 134 | ** Open a socket connection. The identify of the server is determined |
| 135 | ** by pUrlData |
| 136 | ** |
| 137 | ** pUrlDAta->name Name of the server. Ex: www.fossil-scm.org |
| 138 | ** pUrlDAta->port TCP/IP port to use. Ex: 80 |
| 139 | ** |
| 140 | ** Return the number of errors. |
| 141 | */ |
| 142 | int socket_open(UrlData *pUrlData){ |
| 143 | int rc = 0; |
| @@ -190,11 +192,11 @@ | |
| 190 | } |
| 191 | |
| 192 | /* |
| 193 | ** Send content out over the open socket connection. |
| 194 | */ |
| 195 | size_t socket_send(void *NotUsed, void *pContent, size_t N){ |
| 196 | size_t sent; |
| 197 | size_t total = 0; |
| 198 | while( N>0 ){ |
| 199 | sent = send(iSocket, pContent, N, 0); |
| 200 | if( sent<=0 ) break; |
| @@ -205,17 +207,25 @@ | |
| 205 | return total; |
| 206 | } |
| 207 | |
| 208 | /* |
| 209 | ** Receive content back from the open socket connection. |
| 210 | */ |
| 211 | size_t socket_receive(void *NotUsed, void *pContent, size_t N){ |
| 212 | ssize_t got; |
| 213 | size_t total = 0; |
| 214 | while( N>0 ){ |
| 215 | /* WinXP fails for large values of N. So limit it to 64KiB. */ |
| 216 | got = recv(iSocket, pContent, N>65536 ? 65536 : N, 0); |
| 217 | if( got<=0 ) break; |
| 218 | total += (size_t)got; |
| 219 | N -= (size_t)got; |
| 220 | pContent = (void*)&((char*)pContent)[got]; |
| 221 | } |
| 222 |
| --- src/http_socket.c | |
| +++ src/http_socket.c | |
| @@ -79,12 +79,14 @@ | |
| 79 | } |
| 80 | |
| 81 | /* |
| 82 | ** Return the current socket error message |
| 83 | */ |
| 84 | char *socket_errmsg(void){ |
| 85 | char *zResult = socketErrMsg; |
| 86 | socketErrMsg = 0; |
| 87 | return zResult; |
| 88 | } |
| 89 | |
| 90 | /* |
| 91 | ** Call this routine once before any other use of the socket interface. |
| 92 | ** This routine does initial configuration of the socket module. |
| @@ -132,12 +134,12 @@ | |
| 134 | |
| 135 | /* |
| 136 | ** Open a socket connection. The identify of the server is determined |
| 137 | ** by pUrlData |
| 138 | ** |
| 139 | ** pUrlData->name Name of the server. Ex: www.fossil-scm.org |
| 140 | ** pUrlData->port TCP/IP port to use. Ex: 80 |
| 141 | ** |
| 142 | ** Return the number of errors. |
| 143 | */ |
| 144 | int socket_open(UrlData *pUrlData){ |
| 145 | int rc = 0; |
| @@ -190,11 +192,11 @@ | |
| 192 | } |
| 193 | |
| 194 | /* |
| 195 | ** Send content out over the open socket connection. |
| 196 | */ |
| 197 | size_t socket_send(void *NotUsed, const void *pContent, size_t N){ |
| 198 | size_t sent; |
| 199 | size_t total = 0; |
| 200 | while( N>0 ){ |
| 201 | sent = send(iSocket, pContent, N, 0); |
| 202 | if( sent<=0 ) break; |
| @@ -205,17 +207,25 @@ | |
| 207 | return total; |
| 208 | } |
| 209 | |
| 210 | /* |
| 211 | ** Receive content back from the open socket connection. |
| 212 | ** Return the number of bytes read. |
| 213 | ** |
| 214 | ** When bDontBlock is false, this function blocks until all N bytes |
| 215 | ** have been read. |
| 216 | */ |
| 217 | size_t socket_receive(void *NotUsed, void *pContent, size_t N, int bDontBlock){ |
| 218 | ssize_t got; |
| 219 | size_t total = 0; |
| 220 | int flags = 0; |
| 221 | #ifdef MSG_DONTWAIT |
| 222 | if( bDontBlock ) flags |= MSG_DONTWAIT; |
| 223 | #endif |
| 224 | while( N>0 ){ |
| 225 | /* WinXP fails for large values of N. So limit it to 64KiB. */ |
| 226 | got = recv(iSocket, pContent, N>65536 ? 65536 : N, flags); |
| 227 | if( got<=0 ) break; |
| 228 | total += (size_t)got; |
| 229 | N -= (size_t)got; |
| 230 | pContent = (void*)&((char*)pContent)[got]; |
| 231 | } |
| 232 |
+1
-1
| --- src/http_transport.c | ||
| +++ src/http_transport.c | ||
| @@ -325,11 +325,11 @@ | ||
| 325 | 325 | got = 0; |
| 326 | 326 | #endif |
| 327 | 327 | }else if( pUrlData->isFile ){ |
| 328 | 328 | got = fread(zBuf, 1, N, transport.pFile); |
| 329 | 329 | }else{ |
| 330 | - got = socket_receive(0, zBuf, N); | |
| 330 | + got = socket_receive(0, zBuf, N, 0); | |
| 331 | 331 | } |
| 332 | 332 | /* printf("received %d of %d bytes\n", got, N); fflush(stdout); */ |
| 333 | 333 | if( transport.pLog ){ |
| 334 | 334 | fwrite(zBuf, 1, got, transport.pLog); |
| 335 | 335 | fflush(transport.pLog); |
| 336 | 336 |
| --- src/http_transport.c | |
| +++ src/http_transport.c | |
| @@ -325,11 +325,11 @@ | |
| 325 | got = 0; |
| 326 | #endif |
| 327 | }else if( pUrlData->isFile ){ |
| 328 | got = fread(zBuf, 1, N, transport.pFile); |
| 329 | }else{ |
| 330 | got = socket_receive(0, zBuf, N); |
| 331 | } |
| 332 | /* printf("received %d of %d bytes\n", got, N); fflush(stdout); */ |
| 333 | if( transport.pLog ){ |
| 334 | fwrite(zBuf, 1, got, transport.pLog); |
| 335 | fflush(transport.pLog); |
| 336 |
| --- src/http_transport.c | |
| +++ src/http_transport.c | |
| @@ -325,11 +325,11 @@ | |
| 325 | got = 0; |
| 326 | #endif |
| 327 | }else if( pUrlData->isFile ){ |
| 328 | got = fread(zBuf, 1, N, transport.pFile); |
| 329 | }else{ |
| 330 | got = socket_receive(0, zBuf, N, 0); |
| 331 | } |
| 332 | /* printf("received %d of %d bytes\n", got, N); fflush(stdout); */ |
| 333 | if( transport.pLog ){ |
| 334 | fwrite(zBuf, 1, got, transport.pLog); |
| 335 | fflush(transport.pLog); |
| 336 |
+24
| --- src/main.mk | ||
| +++ src/main.mk | ||
| @@ -113,10 +113,11 @@ | ||
| 113 | 113 | $(SRCDIR)/sha1hard.c \ |
| 114 | 114 | $(SRCDIR)/sha3.c \ |
| 115 | 115 | $(SRCDIR)/shun.c \ |
| 116 | 116 | $(SRCDIR)/sitemap.c \ |
| 117 | 117 | $(SRCDIR)/skins.c \ |
| 118 | + $(SRCDIR)/smtp.c \ | |
| 118 | 119 | $(SRCDIR)/sqlcmd.c \ |
| 119 | 120 | $(SRCDIR)/stash.c \ |
| 120 | 121 | $(SRCDIR)/stat.c \ |
| 121 | 122 | $(SRCDIR)/statrep.c \ |
| 122 | 123 | $(SRCDIR)/style.c \ |
| @@ -135,10 +136,11 @@ | ||
| 135 | 136 | $(SRCDIR)/user.c \ |
| 136 | 137 | $(SRCDIR)/utf8.c \ |
| 137 | 138 | $(SRCDIR)/util.c \ |
| 138 | 139 | $(SRCDIR)/verify.c \ |
| 139 | 140 | $(SRCDIR)/vfile.c \ |
| 141 | + $(SRCDIR)/webmail.c \ | |
| 140 | 142 | $(SRCDIR)/wiki.c \ |
| 141 | 143 | $(SRCDIR)/wikiformat.c \ |
| 142 | 144 | $(SRCDIR)/winfile.c \ |
| 143 | 145 | $(SRCDIR)/winhttp.c \ |
| 144 | 146 | $(SRCDIR)/wysiwyg.c \ |
| @@ -316,10 +318,11 @@ | ||
| 316 | 318 | $(OBJDIR)/sha1hard_.c \ |
| 317 | 319 | $(OBJDIR)/sha3_.c \ |
| 318 | 320 | $(OBJDIR)/shun_.c \ |
| 319 | 321 | $(OBJDIR)/sitemap_.c \ |
| 320 | 322 | $(OBJDIR)/skins_.c \ |
| 323 | + $(OBJDIR)/smtp_.c \ | |
| 321 | 324 | $(OBJDIR)/sqlcmd_.c \ |
| 322 | 325 | $(OBJDIR)/stash_.c \ |
| 323 | 326 | $(OBJDIR)/stat_.c \ |
| 324 | 327 | $(OBJDIR)/statrep_.c \ |
| 325 | 328 | $(OBJDIR)/style_.c \ |
| @@ -338,10 +341,11 @@ | ||
| 338 | 341 | $(OBJDIR)/user_.c \ |
| 339 | 342 | $(OBJDIR)/utf8_.c \ |
| 340 | 343 | $(OBJDIR)/util_.c \ |
| 341 | 344 | $(OBJDIR)/verify_.c \ |
| 342 | 345 | $(OBJDIR)/vfile_.c \ |
| 346 | + $(OBJDIR)/webmail_.c \ | |
| 343 | 347 | $(OBJDIR)/wiki_.c \ |
| 344 | 348 | $(OBJDIR)/wikiformat_.c \ |
| 345 | 349 | $(OBJDIR)/winfile_.c \ |
| 346 | 350 | $(OBJDIR)/winhttp_.c \ |
| 347 | 351 | $(OBJDIR)/wysiwyg_.c \ |
| @@ -448,10 +452,11 @@ | ||
| 448 | 452 | $(OBJDIR)/sha1hard.o \ |
| 449 | 453 | $(OBJDIR)/sha3.o \ |
| 450 | 454 | $(OBJDIR)/shun.o \ |
| 451 | 455 | $(OBJDIR)/sitemap.o \ |
| 452 | 456 | $(OBJDIR)/skins.o \ |
| 457 | + $(OBJDIR)/smtp.o \ | |
| 453 | 458 | $(OBJDIR)/sqlcmd.o \ |
| 454 | 459 | $(OBJDIR)/stash.o \ |
| 455 | 460 | $(OBJDIR)/stat.o \ |
| 456 | 461 | $(OBJDIR)/statrep.o \ |
| 457 | 462 | $(OBJDIR)/style.o \ |
| @@ -470,10 +475,11 @@ | ||
| 470 | 475 | $(OBJDIR)/user.o \ |
| 471 | 476 | $(OBJDIR)/utf8.o \ |
| 472 | 477 | $(OBJDIR)/util.o \ |
| 473 | 478 | $(OBJDIR)/verify.o \ |
| 474 | 479 | $(OBJDIR)/vfile.o \ |
| 480 | + $(OBJDIR)/webmail.o \ | |
| 475 | 481 | $(OBJDIR)/wiki.o \ |
| 476 | 482 | $(OBJDIR)/wikiformat.o \ |
| 477 | 483 | $(OBJDIR)/winfile.o \ |
| 478 | 484 | $(OBJDIR)/winhttp.o \ |
| 479 | 485 | $(OBJDIR)/wysiwyg.o \ |
| @@ -778,10 +784,11 @@ | ||
| 778 | 784 | $(OBJDIR)/sha1hard_.c:$(OBJDIR)/sha1hard.h \ |
| 779 | 785 | $(OBJDIR)/sha3_.c:$(OBJDIR)/sha3.h \ |
| 780 | 786 | $(OBJDIR)/shun_.c:$(OBJDIR)/shun.h \ |
| 781 | 787 | $(OBJDIR)/sitemap_.c:$(OBJDIR)/sitemap.h \ |
| 782 | 788 | $(OBJDIR)/skins_.c:$(OBJDIR)/skins.h \ |
| 789 | + $(OBJDIR)/smtp_.c:$(OBJDIR)/smtp.h \ | |
| 783 | 790 | $(OBJDIR)/sqlcmd_.c:$(OBJDIR)/sqlcmd.h \ |
| 784 | 791 | $(OBJDIR)/stash_.c:$(OBJDIR)/stash.h \ |
| 785 | 792 | $(OBJDIR)/stat_.c:$(OBJDIR)/stat.h \ |
| 786 | 793 | $(OBJDIR)/statrep_.c:$(OBJDIR)/statrep.h \ |
| 787 | 794 | $(OBJDIR)/style_.c:$(OBJDIR)/style.h \ |
| @@ -800,10 +807,11 @@ | ||
| 800 | 807 | $(OBJDIR)/user_.c:$(OBJDIR)/user.h \ |
| 801 | 808 | $(OBJDIR)/utf8_.c:$(OBJDIR)/utf8.h \ |
| 802 | 809 | $(OBJDIR)/util_.c:$(OBJDIR)/util.h \ |
| 803 | 810 | $(OBJDIR)/verify_.c:$(OBJDIR)/verify.h \ |
| 804 | 811 | $(OBJDIR)/vfile_.c:$(OBJDIR)/vfile.h \ |
| 812 | + $(OBJDIR)/webmail_.c:$(OBJDIR)/webmail.h \ | |
| 805 | 813 | $(OBJDIR)/wiki_.c:$(OBJDIR)/wiki.h \ |
| 806 | 814 | $(OBJDIR)/wikiformat_.c:$(OBJDIR)/wikiformat.h \ |
| 807 | 815 | $(OBJDIR)/winfile_.c:$(OBJDIR)/winfile.h \ |
| 808 | 816 | $(OBJDIR)/winhttp_.c:$(OBJDIR)/winhttp.h \ |
| 809 | 817 | $(OBJDIR)/wysiwyg_.c:$(OBJDIR)/wysiwyg.h \ |
| @@ -1614,10 +1622,18 @@ | ||
| 1614 | 1622 | |
| 1615 | 1623 | $(OBJDIR)/skins.o: $(OBJDIR)/skins_.c $(OBJDIR)/skins.h $(SRCDIR)/config.h |
| 1616 | 1624 | $(XTCC) -o $(OBJDIR)/skins.o -c $(OBJDIR)/skins_.c |
| 1617 | 1625 | |
| 1618 | 1626 | $(OBJDIR)/skins.h: $(OBJDIR)/headers |
| 1627 | + | |
| 1628 | +$(OBJDIR)/smtp_.c: $(SRCDIR)/smtp.c $(OBJDIR)/translate | |
| 1629 | + $(OBJDIR)/translate $(SRCDIR)/smtp.c >$@ | |
| 1630 | + | |
| 1631 | +$(OBJDIR)/smtp.o: $(OBJDIR)/smtp_.c $(OBJDIR)/smtp.h $(SRCDIR)/config.h | |
| 1632 | + $(XTCC) -o $(OBJDIR)/smtp.o -c $(OBJDIR)/smtp_.c | |
| 1633 | + | |
| 1634 | +$(OBJDIR)/smtp.h: $(OBJDIR)/headers | |
| 1619 | 1635 | |
| 1620 | 1636 | $(OBJDIR)/sqlcmd_.c: $(SRCDIR)/sqlcmd.c $(OBJDIR)/translate |
| 1621 | 1637 | $(OBJDIR)/translate $(SRCDIR)/sqlcmd.c >$@ |
| 1622 | 1638 | |
| 1623 | 1639 | $(OBJDIR)/sqlcmd.o: $(OBJDIR)/sqlcmd_.c $(OBJDIR)/sqlcmd.h $(SRCDIR)/config.h |
| @@ -1790,10 +1806,18 @@ | ||
| 1790 | 1806 | |
| 1791 | 1807 | $(OBJDIR)/vfile.o: $(OBJDIR)/vfile_.c $(OBJDIR)/vfile.h $(SRCDIR)/config.h |
| 1792 | 1808 | $(XTCC) -o $(OBJDIR)/vfile.o -c $(OBJDIR)/vfile_.c |
| 1793 | 1809 | |
| 1794 | 1810 | $(OBJDIR)/vfile.h: $(OBJDIR)/headers |
| 1811 | + | |
| 1812 | +$(OBJDIR)/webmail_.c: $(SRCDIR)/webmail.c $(OBJDIR)/translate | |
| 1813 | + $(OBJDIR)/translate $(SRCDIR)/webmail.c >$@ | |
| 1814 | + | |
| 1815 | +$(OBJDIR)/webmail.o: $(OBJDIR)/webmail_.c $(OBJDIR)/webmail.h $(SRCDIR)/config.h | |
| 1816 | + $(XTCC) -o $(OBJDIR)/webmail.o -c $(OBJDIR)/webmail_.c | |
| 1817 | + | |
| 1818 | +$(OBJDIR)/webmail.h: $(OBJDIR)/headers | |
| 1795 | 1819 | |
| 1796 | 1820 | $(OBJDIR)/wiki_.c: $(SRCDIR)/wiki.c $(OBJDIR)/translate |
| 1797 | 1821 | $(OBJDIR)/translate $(SRCDIR)/wiki.c >$@ |
| 1798 | 1822 | |
| 1799 | 1823 | $(OBJDIR)/wiki.o: $(OBJDIR)/wiki_.c $(OBJDIR)/wiki.h $(SRCDIR)/config.h |
| 1800 | 1824 |
| --- src/main.mk | |
| +++ src/main.mk | |
| @@ -113,10 +113,11 @@ | |
| 113 | $(SRCDIR)/sha1hard.c \ |
| 114 | $(SRCDIR)/sha3.c \ |
| 115 | $(SRCDIR)/shun.c \ |
| 116 | $(SRCDIR)/sitemap.c \ |
| 117 | $(SRCDIR)/skins.c \ |
| 118 | $(SRCDIR)/sqlcmd.c \ |
| 119 | $(SRCDIR)/stash.c \ |
| 120 | $(SRCDIR)/stat.c \ |
| 121 | $(SRCDIR)/statrep.c \ |
| 122 | $(SRCDIR)/style.c \ |
| @@ -135,10 +136,11 @@ | |
| 135 | $(SRCDIR)/user.c \ |
| 136 | $(SRCDIR)/utf8.c \ |
| 137 | $(SRCDIR)/util.c \ |
| 138 | $(SRCDIR)/verify.c \ |
| 139 | $(SRCDIR)/vfile.c \ |
| 140 | $(SRCDIR)/wiki.c \ |
| 141 | $(SRCDIR)/wikiformat.c \ |
| 142 | $(SRCDIR)/winfile.c \ |
| 143 | $(SRCDIR)/winhttp.c \ |
| 144 | $(SRCDIR)/wysiwyg.c \ |
| @@ -316,10 +318,11 @@ | |
| 316 | $(OBJDIR)/sha1hard_.c \ |
| 317 | $(OBJDIR)/sha3_.c \ |
| 318 | $(OBJDIR)/shun_.c \ |
| 319 | $(OBJDIR)/sitemap_.c \ |
| 320 | $(OBJDIR)/skins_.c \ |
| 321 | $(OBJDIR)/sqlcmd_.c \ |
| 322 | $(OBJDIR)/stash_.c \ |
| 323 | $(OBJDIR)/stat_.c \ |
| 324 | $(OBJDIR)/statrep_.c \ |
| 325 | $(OBJDIR)/style_.c \ |
| @@ -338,10 +341,11 @@ | |
| 338 | $(OBJDIR)/user_.c \ |
| 339 | $(OBJDIR)/utf8_.c \ |
| 340 | $(OBJDIR)/util_.c \ |
| 341 | $(OBJDIR)/verify_.c \ |
| 342 | $(OBJDIR)/vfile_.c \ |
| 343 | $(OBJDIR)/wiki_.c \ |
| 344 | $(OBJDIR)/wikiformat_.c \ |
| 345 | $(OBJDIR)/winfile_.c \ |
| 346 | $(OBJDIR)/winhttp_.c \ |
| 347 | $(OBJDIR)/wysiwyg_.c \ |
| @@ -448,10 +452,11 @@ | |
| 448 | $(OBJDIR)/sha1hard.o \ |
| 449 | $(OBJDIR)/sha3.o \ |
| 450 | $(OBJDIR)/shun.o \ |
| 451 | $(OBJDIR)/sitemap.o \ |
| 452 | $(OBJDIR)/skins.o \ |
| 453 | $(OBJDIR)/sqlcmd.o \ |
| 454 | $(OBJDIR)/stash.o \ |
| 455 | $(OBJDIR)/stat.o \ |
| 456 | $(OBJDIR)/statrep.o \ |
| 457 | $(OBJDIR)/style.o \ |
| @@ -470,10 +475,11 @@ | |
| 470 | $(OBJDIR)/user.o \ |
| 471 | $(OBJDIR)/utf8.o \ |
| 472 | $(OBJDIR)/util.o \ |
| 473 | $(OBJDIR)/verify.o \ |
| 474 | $(OBJDIR)/vfile.o \ |
| 475 | $(OBJDIR)/wiki.o \ |
| 476 | $(OBJDIR)/wikiformat.o \ |
| 477 | $(OBJDIR)/winfile.o \ |
| 478 | $(OBJDIR)/winhttp.o \ |
| 479 | $(OBJDIR)/wysiwyg.o \ |
| @@ -778,10 +784,11 @@ | |
| 778 | $(OBJDIR)/sha1hard_.c:$(OBJDIR)/sha1hard.h \ |
| 779 | $(OBJDIR)/sha3_.c:$(OBJDIR)/sha3.h \ |
| 780 | $(OBJDIR)/shun_.c:$(OBJDIR)/shun.h \ |
| 781 | $(OBJDIR)/sitemap_.c:$(OBJDIR)/sitemap.h \ |
| 782 | $(OBJDIR)/skins_.c:$(OBJDIR)/skins.h \ |
| 783 | $(OBJDIR)/sqlcmd_.c:$(OBJDIR)/sqlcmd.h \ |
| 784 | $(OBJDIR)/stash_.c:$(OBJDIR)/stash.h \ |
| 785 | $(OBJDIR)/stat_.c:$(OBJDIR)/stat.h \ |
| 786 | $(OBJDIR)/statrep_.c:$(OBJDIR)/statrep.h \ |
| 787 | $(OBJDIR)/style_.c:$(OBJDIR)/style.h \ |
| @@ -800,10 +807,11 @@ | |
| 800 | $(OBJDIR)/user_.c:$(OBJDIR)/user.h \ |
| 801 | $(OBJDIR)/utf8_.c:$(OBJDIR)/utf8.h \ |
| 802 | $(OBJDIR)/util_.c:$(OBJDIR)/util.h \ |
| 803 | $(OBJDIR)/verify_.c:$(OBJDIR)/verify.h \ |
| 804 | $(OBJDIR)/vfile_.c:$(OBJDIR)/vfile.h \ |
| 805 | $(OBJDIR)/wiki_.c:$(OBJDIR)/wiki.h \ |
| 806 | $(OBJDIR)/wikiformat_.c:$(OBJDIR)/wikiformat.h \ |
| 807 | $(OBJDIR)/winfile_.c:$(OBJDIR)/winfile.h \ |
| 808 | $(OBJDIR)/winhttp_.c:$(OBJDIR)/winhttp.h \ |
| 809 | $(OBJDIR)/wysiwyg_.c:$(OBJDIR)/wysiwyg.h \ |
| @@ -1614,10 +1622,18 @@ | |
| 1614 | |
| 1615 | $(OBJDIR)/skins.o: $(OBJDIR)/skins_.c $(OBJDIR)/skins.h $(SRCDIR)/config.h |
| 1616 | $(XTCC) -o $(OBJDIR)/skins.o -c $(OBJDIR)/skins_.c |
| 1617 | |
| 1618 | $(OBJDIR)/skins.h: $(OBJDIR)/headers |
| 1619 | |
| 1620 | $(OBJDIR)/sqlcmd_.c: $(SRCDIR)/sqlcmd.c $(OBJDIR)/translate |
| 1621 | $(OBJDIR)/translate $(SRCDIR)/sqlcmd.c >$@ |
| 1622 | |
| 1623 | $(OBJDIR)/sqlcmd.o: $(OBJDIR)/sqlcmd_.c $(OBJDIR)/sqlcmd.h $(SRCDIR)/config.h |
| @@ -1790,10 +1806,18 @@ | |
| 1790 | |
| 1791 | $(OBJDIR)/vfile.o: $(OBJDIR)/vfile_.c $(OBJDIR)/vfile.h $(SRCDIR)/config.h |
| 1792 | $(XTCC) -o $(OBJDIR)/vfile.o -c $(OBJDIR)/vfile_.c |
| 1793 | |
| 1794 | $(OBJDIR)/vfile.h: $(OBJDIR)/headers |
| 1795 | |
| 1796 | $(OBJDIR)/wiki_.c: $(SRCDIR)/wiki.c $(OBJDIR)/translate |
| 1797 | $(OBJDIR)/translate $(SRCDIR)/wiki.c >$@ |
| 1798 | |
| 1799 | $(OBJDIR)/wiki.o: $(OBJDIR)/wiki_.c $(OBJDIR)/wiki.h $(SRCDIR)/config.h |
| 1800 |
| --- src/main.mk | |
| +++ src/main.mk | |
| @@ -113,10 +113,11 @@ | |
| 113 | $(SRCDIR)/sha1hard.c \ |
| 114 | $(SRCDIR)/sha3.c \ |
| 115 | $(SRCDIR)/shun.c \ |
| 116 | $(SRCDIR)/sitemap.c \ |
| 117 | $(SRCDIR)/skins.c \ |
| 118 | $(SRCDIR)/smtp.c \ |
| 119 | $(SRCDIR)/sqlcmd.c \ |
| 120 | $(SRCDIR)/stash.c \ |
| 121 | $(SRCDIR)/stat.c \ |
| 122 | $(SRCDIR)/statrep.c \ |
| 123 | $(SRCDIR)/style.c \ |
| @@ -135,10 +136,11 @@ | |
| 136 | $(SRCDIR)/user.c \ |
| 137 | $(SRCDIR)/utf8.c \ |
| 138 | $(SRCDIR)/util.c \ |
| 139 | $(SRCDIR)/verify.c \ |
| 140 | $(SRCDIR)/vfile.c \ |
| 141 | $(SRCDIR)/webmail.c \ |
| 142 | $(SRCDIR)/wiki.c \ |
| 143 | $(SRCDIR)/wikiformat.c \ |
| 144 | $(SRCDIR)/winfile.c \ |
| 145 | $(SRCDIR)/winhttp.c \ |
| 146 | $(SRCDIR)/wysiwyg.c \ |
| @@ -316,10 +318,11 @@ | |
| 318 | $(OBJDIR)/sha1hard_.c \ |
| 319 | $(OBJDIR)/sha3_.c \ |
| 320 | $(OBJDIR)/shun_.c \ |
| 321 | $(OBJDIR)/sitemap_.c \ |
| 322 | $(OBJDIR)/skins_.c \ |
| 323 | $(OBJDIR)/smtp_.c \ |
| 324 | $(OBJDIR)/sqlcmd_.c \ |
| 325 | $(OBJDIR)/stash_.c \ |
| 326 | $(OBJDIR)/stat_.c \ |
| 327 | $(OBJDIR)/statrep_.c \ |
| 328 | $(OBJDIR)/style_.c \ |
| @@ -338,10 +341,11 @@ | |
| 341 | $(OBJDIR)/user_.c \ |
| 342 | $(OBJDIR)/utf8_.c \ |
| 343 | $(OBJDIR)/util_.c \ |
| 344 | $(OBJDIR)/verify_.c \ |
| 345 | $(OBJDIR)/vfile_.c \ |
| 346 | $(OBJDIR)/webmail_.c \ |
| 347 | $(OBJDIR)/wiki_.c \ |
| 348 | $(OBJDIR)/wikiformat_.c \ |
| 349 | $(OBJDIR)/winfile_.c \ |
| 350 | $(OBJDIR)/winhttp_.c \ |
| 351 | $(OBJDIR)/wysiwyg_.c \ |
| @@ -448,10 +452,11 @@ | |
| 452 | $(OBJDIR)/sha1hard.o \ |
| 453 | $(OBJDIR)/sha3.o \ |
| 454 | $(OBJDIR)/shun.o \ |
| 455 | $(OBJDIR)/sitemap.o \ |
| 456 | $(OBJDIR)/skins.o \ |
| 457 | $(OBJDIR)/smtp.o \ |
| 458 | $(OBJDIR)/sqlcmd.o \ |
| 459 | $(OBJDIR)/stash.o \ |
| 460 | $(OBJDIR)/stat.o \ |
| 461 | $(OBJDIR)/statrep.o \ |
| 462 | $(OBJDIR)/style.o \ |
| @@ -470,10 +475,11 @@ | |
| 475 | $(OBJDIR)/user.o \ |
| 476 | $(OBJDIR)/utf8.o \ |
| 477 | $(OBJDIR)/util.o \ |
| 478 | $(OBJDIR)/verify.o \ |
| 479 | $(OBJDIR)/vfile.o \ |
| 480 | $(OBJDIR)/webmail.o \ |
| 481 | $(OBJDIR)/wiki.o \ |
| 482 | $(OBJDIR)/wikiformat.o \ |
| 483 | $(OBJDIR)/winfile.o \ |
| 484 | $(OBJDIR)/winhttp.o \ |
| 485 | $(OBJDIR)/wysiwyg.o \ |
| @@ -778,10 +784,11 @@ | |
| 784 | $(OBJDIR)/sha1hard_.c:$(OBJDIR)/sha1hard.h \ |
| 785 | $(OBJDIR)/sha3_.c:$(OBJDIR)/sha3.h \ |
| 786 | $(OBJDIR)/shun_.c:$(OBJDIR)/shun.h \ |
| 787 | $(OBJDIR)/sitemap_.c:$(OBJDIR)/sitemap.h \ |
| 788 | $(OBJDIR)/skins_.c:$(OBJDIR)/skins.h \ |
| 789 | $(OBJDIR)/smtp_.c:$(OBJDIR)/smtp.h \ |
| 790 | $(OBJDIR)/sqlcmd_.c:$(OBJDIR)/sqlcmd.h \ |
| 791 | $(OBJDIR)/stash_.c:$(OBJDIR)/stash.h \ |
| 792 | $(OBJDIR)/stat_.c:$(OBJDIR)/stat.h \ |
| 793 | $(OBJDIR)/statrep_.c:$(OBJDIR)/statrep.h \ |
| 794 | $(OBJDIR)/style_.c:$(OBJDIR)/style.h \ |
| @@ -800,10 +807,11 @@ | |
| 807 | $(OBJDIR)/user_.c:$(OBJDIR)/user.h \ |
| 808 | $(OBJDIR)/utf8_.c:$(OBJDIR)/utf8.h \ |
| 809 | $(OBJDIR)/util_.c:$(OBJDIR)/util.h \ |
| 810 | $(OBJDIR)/verify_.c:$(OBJDIR)/verify.h \ |
| 811 | $(OBJDIR)/vfile_.c:$(OBJDIR)/vfile.h \ |
| 812 | $(OBJDIR)/webmail_.c:$(OBJDIR)/webmail.h \ |
| 813 | $(OBJDIR)/wiki_.c:$(OBJDIR)/wiki.h \ |
| 814 | $(OBJDIR)/wikiformat_.c:$(OBJDIR)/wikiformat.h \ |
| 815 | $(OBJDIR)/winfile_.c:$(OBJDIR)/winfile.h \ |
| 816 | $(OBJDIR)/winhttp_.c:$(OBJDIR)/winhttp.h \ |
| 817 | $(OBJDIR)/wysiwyg_.c:$(OBJDIR)/wysiwyg.h \ |
| @@ -1614,10 +1622,18 @@ | |
| 1622 | |
| 1623 | $(OBJDIR)/skins.o: $(OBJDIR)/skins_.c $(OBJDIR)/skins.h $(SRCDIR)/config.h |
| 1624 | $(XTCC) -o $(OBJDIR)/skins.o -c $(OBJDIR)/skins_.c |
| 1625 | |
| 1626 | $(OBJDIR)/skins.h: $(OBJDIR)/headers |
| 1627 | |
| 1628 | $(OBJDIR)/smtp_.c: $(SRCDIR)/smtp.c $(OBJDIR)/translate |
| 1629 | $(OBJDIR)/translate $(SRCDIR)/smtp.c >$@ |
| 1630 | |
| 1631 | $(OBJDIR)/smtp.o: $(OBJDIR)/smtp_.c $(OBJDIR)/smtp.h $(SRCDIR)/config.h |
| 1632 | $(XTCC) -o $(OBJDIR)/smtp.o -c $(OBJDIR)/smtp_.c |
| 1633 | |
| 1634 | $(OBJDIR)/smtp.h: $(OBJDIR)/headers |
| 1635 | |
| 1636 | $(OBJDIR)/sqlcmd_.c: $(SRCDIR)/sqlcmd.c $(OBJDIR)/translate |
| 1637 | $(OBJDIR)/translate $(SRCDIR)/sqlcmd.c >$@ |
| 1638 | |
| 1639 | $(OBJDIR)/sqlcmd.o: $(OBJDIR)/sqlcmd_.c $(OBJDIR)/sqlcmd.h $(SRCDIR)/config.h |
| @@ -1790,10 +1806,18 @@ | |
| 1806 | |
| 1807 | $(OBJDIR)/vfile.o: $(OBJDIR)/vfile_.c $(OBJDIR)/vfile.h $(SRCDIR)/config.h |
| 1808 | $(XTCC) -o $(OBJDIR)/vfile.o -c $(OBJDIR)/vfile_.c |
| 1809 | |
| 1810 | $(OBJDIR)/vfile.h: $(OBJDIR)/headers |
| 1811 | |
| 1812 | $(OBJDIR)/webmail_.c: $(SRCDIR)/webmail.c $(OBJDIR)/translate |
| 1813 | $(OBJDIR)/translate $(SRCDIR)/webmail.c >$@ |
| 1814 | |
| 1815 | $(OBJDIR)/webmail.o: $(OBJDIR)/webmail_.c $(OBJDIR)/webmail.h $(SRCDIR)/config.h |
| 1816 | $(XTCC) -o $(OBJDIR)/webmail.o -c $(OBJDIR)/webmail_.c |
| 1817 | |
| 1818 | $(OBJDIR)/webmail.h: $(OBJDIR)/headers |
| 1819 | |
| 1820 | $(OBJDIR)/wiki_.c: $(SRCDIR)/wiki.c $(OBJDIR)/translate |
| 1821 | $(OBJDIR)/translate $(SRCDIR)/wiki.c >$@ |
| 1822 | |
| 1823 | $(OBJDIR)/wiki.o: $(OBJDIR)/wiki_.c $(OBJDIR)/wiki.h $(SRCDIR)/config.h |
| 1824 |
+2
| --- src/makemake.tcl | ||
| +++ src/makemake.tcl | ||
| @@ -124,10 +124,11 @@ | ||
| 124 | 124 | sha1hard |
| 125 | 125 | sha3 |
| 126 | 126 | shun |
| 127 | 127 | sitemap |
| 128 | 128 | skins |
| 129 | + smtp | |
| 129 | 130 | sqlcmd |
| 130 | 131 | stash |
| 131 | 132 | stat |
| 132 | 133 | statrep |
| 133 | 134 | style |
| @@ -146,10 +147,11 @@ | ||
| 146 | 147 | user |
| 147 | 148 | utf8 |
| 148 | 149 | util |
| 149 | 150 | verify |
| 150 | 151 | vfile |
| 152 | + webmail | |
| 151 | 153 | wiki |
| 152 | 154 | wikiformat |
| 153 | 155 | winfile |
| 154 | 156 | winhttp |
| 155 | 157 | wysiwyg |
| 156 | 158 |
| --- src/makemake.tcl | |
| +++ src/makemake.tcl | |
| @@ -124,10 +124,11 @@ | |
| 124 | sha1hard |
| 125 | sha3 |
| 126 | shun |
| 127 | sitemap |
| 128 | skins |
| 129 | sqlcmd |
| 130 | stash |
| 131 | stat |
| 132 | statrep |
| 133 | style |
| @@ -146,10 +147,11 @@ | |
| 146 | user |
| 147 | utf8 |
| 148 | util |
| 149 | verify |
| 150 | vfile |
| 151 | wiki |
| 152 | wikiformat |
| 153 | winfile |
| 154 | winhttp |
| 155 | wysiwyg |
| 156 |
| --- src/makemake.tcl | |
| +++ src/makemake.tcl | |
| @@ -124,10 +124,11 @@ | |
| 124 | sha1hard |
| 125 | sha3 |
| 126 | shun |
| 127 | sitemap |
| 128 | skins |
| 129 | smtp |
| 130 | sqlcmd |
| 131 | stash |
| 132 | stat |
| 133 | statrep |
| 134 | style |
| @@ -146,10 +147,11 @@ | |
| 147 | user |
| 148 | utf8 |
| 149 | util |
| 150 | verify |
| 151 | vfile |
| 152 | webmail |
| 153 | wiki |
| 154 | wikiformat |
| 155 | winfile |
| 156 | winhttp |
| 157 | wysiwyg |
| 158 |
+4
-1
| --- src/setup.c | ||
| +++ src/setup.c | ||
| @@ -114,11 +114,14 @@ | ||
| 114 | 114 | "Configure the trouble-ticketing system for this repository"); |
| 115 | 115 | setup_menu_entry("Search","srchsetup", |
| 116 | 116 | "Configure the built-in search engine"); |
| 117 | 117 | setup_menu_entry("URL Aliases", "waliassetup", |
| 118 | 118 | "Configure URL aliases"); |
| 119 | - setup_menu_entry("Email", "setup_email", "Email notifications"); | |
| 119 | + setup_menu_entry("Notification", "setup_notification", | |
| 120 | + "Automatic notifications of changes via outbound email"); | |
| 121 | + setup_menu_entry("Email-Server", "setup_smtp", | |
| 122 | + "Activate and configure the built-in email server"); | |
| 120 | 123 | setup_menu_entry("Transfers", "xfersetup", |
| 121 | 124 | "Configure the transfer system for this repository"); |
| 122 | 125 | setup_menu_entry("Skins", "setup_skin", |
| 123 | 126 | "Select and/or modify the web interface \"skins\""); |
| 124 | 127 | setup_menu_entry("Moderation", "setup_modreq", |
| 125 | 128 | |
| 126 | 129 | ADDED src/smtp.c |
| 127 | 130 | ADDED src/webmail.c |
| --- src/setup.c | |
| +++ src/setup.c | |
| @@ -114,11 +114,14 @@ | |
| 114 | "Configure the trouble-ticketing system for this repository"); |
| 115 | setup_menu_entry("Search","srchsetup", |
| 116 | "Configure the built-in search engine"); |
| 117 | setup_menu_entry("URL Aliases", "waliassetup", |
| 118 | "Configure URL aliases"); |
| 119 | setup_menu_entry("Email", "setup_email", "Email notifications"); |
| 120 | setup_menu_entry("Transfers", "xfersetup", |
| 121 | "Configure the transfer system for this repository"); |
| 122 | setup_menu_entry("Skins", "setup_skin", |
| 123 | "Select and/or modify the web interface \"skins\""); |
| 124 | setup_menu_entry("Moderation", "setup_modreq", |
| 125 | |
| 126 | DDED src/smtp.c |
| 127 | DDED src/webmail.c |
| --- src/setup.c | |
| +++ src/setup.c | |
| @@ -114,11 +114,14 @@ | |
| 114 | "Configure the trouble-ticketing system for this repository"); |
| 115 | setup_menu_entry("Search","srchsetup", |
| 116 | "Configure the built-in search engine"); |
| 117 | setup_menu_entry("URL Aliases", "waliassetup", |
| 118 | "Configure URL aliases"); |
| 119 | setup_menu_entry("Notification", "setup_notification", |
| 120 | "Automatic notifications of changes via outbound email"); |
| 121 | setup_menu_entry("Email-Server", "setup_smtp", |
| 122 | "Activate and configure the built-in email server"); |
| 123 | setup_menu_entry("Transfers", "xfersetup", |
| 124 | "Configure the transfer system for this repository"); |
| 125 | setup_menu_entry("Skins", "setup_skin", |
| 126 | "Select and/or modify the web interface \"skins\""); |
| 127 | setup_menu_entry("Moderation", "setup_modreq", |
| 128 | |
| 129 | DDED src/smtp.c |
| 130 | DDED src/webmail.c |
+6
| --- a/src/smtp.c | ||
| +++ b/src/smtp.c | ||
| @@ -0,0 +1,6 @@ | ||
| 1 | + | |
| 2 | +#ifdef __linux__ | |
| 3 | +# define FOSSIL_ENABLE_DNS_LOOKUP | |
| 4 | +#endif | |
| 5 | + | |
| 6 | +#if defined(FOSSIL_ENABLE_DNS_LOOKUPndif /* defined(Fdefined(FOSSIL_EN#endif /* defined(Ffind-mx |
| --- a/src/smtp.c | |
| +++ b/src/smtp.c | |
| @@ -0,0 +1,6 @@ | |
| --- a/src/smtp.c | |
| +++ b/src/smtp.c | |
| @@ -0,0 +1,6 @@ | |
| 1 | |
| 2 | #ifdef __linux__ |
| 3 | # define FOSSIL_ENABLE_DNS_LOOKUP |
| 4 | #endif |
| 5 | |
| 6 | #if defined(FOSSIL_ENABLE_DNS_LOOKUPndif /* defined(Fdefined(FOSSIL_EN#endif /* defined(Ffind-mx |
+4
| --- a/src/webmail.c | ||
| +++ b/src/webmail.c | ||
| @@ -0,0 +1,4 @@ | ||
| 1 | +=UBlob content; /* Encodint *aHdr; /* Two integers for each hdr line, offset and length blob_reset(&p->aBody[i].contentpNew->content = empty_blobint iOfst, int nAmtHdrHdr, sizeof(int)*2Hdr[p->nHdr*2-2] = iOfst; | |
| 2 | + , int n){ | |
| 3 | + while( n>0 &&n--; | |
| 4 | + z+ |
| --- a/src/webmail.c | |
| +++ b/src/webmail.c | |
| @@ -0,0 +1,4 @@ | |
| --- a/src/webmail.c | |
| +++ b/src/webmail.c | |
| @@ -0,0 +1,4 @@ | |
| 1 | =UBlob content; /* Encodint *aHdr; /* Two integers for each hdr line, offset and length blob_reset(&p->aBody[i].contentpNew->content = empty_blobint iOfst, int nAmtHdrHdr, sizeof(int)*2Hdr[p->nHdr*2-2] = iOfst; |
| 2 | , int n){ |
| 3 | while( n>0 &&n--; |
| 4 | z+ |
+16
-4
| --- win/Makefile.dmc | ||
| +++ win/Makefile.dmc | ||
| @@ -28,13 +28,13 @@ | ||
| 28 | 28 | |
| 29 | 29 | SQLITE_OPTIONS = -DNDEBUG=1 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_MEMSTATUS=0 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS -DSQLITE_OMIT_DECLTYPE -DSQLITE_OMIT_DEPRECATED -DSQLITE_OMIT_GET_TABLE -DSQLITE_OMIT_PROGRESS_CALLBACK -DSQLITE_OMIT_SHARED_CACHE -DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_MAX_EXPR_DEPTH=0 -DSQLITE_USE_ALLOCA -DSQLITE_ENABLE_LOCKING_STYLE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_FTS3_PARENTHESIS -DSQLITE_ENABLE_DBSTAT_VTAB -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_STMTVTAB -DSQLITE_HAVE_ZLIB -DSQLITE_INTROSPECTION_PRAGMAS -DSQLITE_ENABLE_DBPAGE_VTAB |
| 30 | 30 | |
| 31 | 31 | SHELL_OPTIONS = -DNDEBUG=1 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_MEMSTATUS=0 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS -DSQLITE_OMIT_DECLTYPE -DSQLITE_OMIT_DEPRECATED -DSQLITE_OMIT_GET_TABLE -DSQLITE_OMIT_PROGRESS_CALLBACK -DSQLITE_OMIT_SHARED_CACHE -DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_MAX_EXPR_DEPTH=0 -DSQLITE_USE_ALLOCA -DSQLITE_ENABLE_LOCKING_STYLE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_FTS3_PARENTHESIS -DSQLITE_ENABLE_DBSTAT_VTAB -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_STMTVTAB -DSQLITE_HAVE_ZLIB -DSQLITE_INTROSPECTION_PRAGMAS -DSQLITE_ENABLE_DBPAGE_VTAB -Dmain=sqlite3_shell -DSQLITE_SHELL_IS_UTF8=1 -DSQLITE_OMIT_LOAD_EXTENSION=1 -DUSE_SYSTEM_SQLITE=$(USE_SYSTEM_SQLITE) -DSQLITE_SHELL_DBNAME_PROC=sqlcmd_get_dbname -DSQLITE_SHELL_INIT_PROC=sqlcmd_init_proc -Daccess=file_access -Dsystem=fossil_system -Dgetenv=fossil_getenv -Dfopen=fossil_fopen |
| 32 | 32 | |
| 33 | -SRC = add_.c allrepo_.c attach_.c bag_.c bisect_.c blob_.c branch_.c browse_.c builtin_.c bundle_.c cache_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c cookies_.c db_.c delta_.c deltacmd_.c descendants_.c diff_.c diffcmd_.c dispatch_.c doc_.c email_.c encode_.c etag_.c event_.c export_.c file_.c finfo_.c foci_.c forum_.c fshell_.c fusefs_.c glob_.c graph_.c gzip_.c hname_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c json_.c json_artifact_.c json_branch_.c json_config_.c json_diff_.c json_dir_.c json_finfo_.c json_login_.c json_query_.c json_report_.c json_status_.c json_tag_.c json_timeline_.c json_user_.c json_wiki_.c leaf_.c loadctrl_.c login_.c lookslike_.c main_.c manifest_.c markdown_.c markdown_html_.c md5_.c merge_.c merge3_.c moderate_.c name_.c path_.c piechart_.c pivot_.c popen_.c pqueue_.c printf_.c publish_.c purge_.c rebuild_.c regexp_.c report_.c rss_.c schema_.c search_.c security_audit_.c setup_.c sha1_.c sha1hard_.c sha3_.c shun_.c sitemap_.c skins_.c sqlcmd_.c stash_.c stat_.c statrep_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c unicode_.c unversioned_.c update_.c url_.c user_.c utf8_.c util_.c verify_.c vfile_.c wiki_.c wikiformat_.c winfile_.c winhttp_.c wysiwyg_.c xfer_.c xfersetup_.c zip_.c | |
| 33 | +SRC = add_.c allrepo_.c attach_.c bag_.c bisect_.c blob_.c branch_.c browse_.c builtin_.c bundle_.c cache_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c cookies_.c db_.c delta_.c deltacmd_.c descendants_.c diff_.c diffcmd_.c dispatch_.c doc_.c email_.c encode_.c etag_.c event_.c export_.c file_.c finfo_.c foci_.c forum_.c fshell_.c fusefs_.c glob_.c graph_.c gzip_.c hname_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c json_.c json_artifact_.c json_branch_.c json_config_.c json_diff_.c json_dir_.c json_finfo_.c json_login_.c json_query_.c json_report_.c json_status_.c json_tag_.c json_timeline_.c json_user_.c json_wiki_.c leaf_.c loadctrl_.c login_.c lookslike_.c main_.c manifest_.c markdown_.c markdown_html_.c md5_.c merge_.c merge3_.c moderate_.c name_.c path_.c piechart_.c pivot_.c popen_.c pqueue_.c printf_.c publish_.c purge_.c rebuild_.c regexp_.c report_.c rss_.c schema_.c search_.c security_audit_.c setup_.c sha1_.c sha1hard_.c sha3_.c shun_.c sitemap_.c skins_.c smtp_.c sqlcmd_.c stash_.c stat_.c statrep_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c unicode_.c unversioned_.c update_.c url_.c user_.c utf8_.c util_.c verify_.c vfile_.c webmail_.c wiki_.c wikiformat_.c winfile_.c winhttp_.c wysiwyg_.c xfer_.c xfersetup_.c zip_.c | |
| 34 | 34 | |
| 35 | -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)\builtin$O $(OBJDIR)\bundle$O $(OBJDIR)\cache$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)\cookies$O $(OBJDIR)\db$O $(OBJDIR)\delta$O $(OBJDIR)\deltacmd$O $(OBJDIR)\descendants$O $(OBJDIR)\diff$O $(OBJDIR)\diffcmd$O $(OBJDIR)\dispatch$O $(OBJDIR)\doc$O $(OBJDIR)\email$O $(OBJDIR)\encode$O $(OBJDIR)\etag$O $(OBJDIR)\event$O $(OBJDIR)\export$O $(OBJDIR)\file$O $(OBJDIR)\finfo$O $(OBJDIR)\foci$O $(OBJDIR)\forum$O $(OBJDIR)\fshell$O $(OBJDIR)\fusefs$O $(OBJDIR)\glob$O $(OBJDIR)\graph$O $(OBJDIR)\gzip$O $(OBJDIR)\hname$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_artifact$O $(OBJDIR)\json_branch$O $(OBJDIR)\json_config$O $(OBJDIR)\json_diff$O $(OBJDIR)\json_dir$O $(OBJDIR)\json_finfo$O $(OBJDIR)\json_login$O $(OBJDIR)\json_query$O $(OBJDIR)\json_report$O $(OBJDIR)\json_status$O $(OBJDIR)\json_tag$O $(OBJDIR)\json_timeline$O $(OBJDIR)\json_user$O $(OBJDIR)\json_wiki$O $(OBJDIR)\leaf$O $(OBJDIR)\loadctrl$O $(OBJDIR)\login$O $(OBJDIR)\lookslike$O $(OBJDIR)\main$O $(OBJDIR)\manifest$O $(OBJDIR)\markdown$O $(OBJDIR)\markdown_html$O $(OBJDIR)\md5$O $(OBJDIR)\merge$O $(OBJDIR)\merge3$O $(OBJDIR)\moderate$O $(OBJDIR)\name$O $(OBJDIR)\path$O $(OBJDIR)\piechart$O $(OBJDIR)\pivot$O $(OBJDIR)\popen$O $(OBJDIR)\pqueue$O $(OBJDIR)\printf$O $(OBJDIR)\publish$O $(OBJDIR)\purge$O $(OBJDIR)\rebuild$O $(OBJDIR)\regexp$O $(OBJDIR)\report$O $(OBJDIR)\rss$O $(OBJDIR)\schema$O $(OBJDIR)\search$O $(OBJDIR)\security_audit$O $(OBJDIR)\setup$O $(OBJDIR)\sha1$O $(OBJDIR)\sha1hard$O $(OBJDIR)\sha3$O $(OBJDIR)\shun$O $(OBJDIR)\sitemap$O $(OBJDIR)\skins$O $(OBJDIR)\sqlcmd$O $(OBJDIR)\stash$O $(OBJDIR)\stat$O $(OBJDIR)\statrep$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)\unicode$O $(OBJDIR)\unversioned$O $(OBJDIR)\update$O $(OBJDIR)\url$O $(OBJDIR)\user$O $(OBJDIR)\utf8$O $(OBJDIR)\util$O $(OBJDIR)\verify$O $(OBJDIR)\vfile$O $(OBJDIR)\wiki$O $(OBJDIR)\wikiformat$O $(OBJDIR)\winfile$O $(OBJDIR)\winhttp$O $(OBJDIR)\wysiwyg$O $(OBJDIR)\xfer$O $(OBJDIR)\xfersetup$O $(OBJDIR)\zip$O $(OBJDIR)\shell$O $(OBJDIR)\sqlite3$O $(OBJDIR)\th$O $(OBJDIR)\th_lang$O | |
| 35 | +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)\builtin$O $(OBJDIR)\bundle$O $(OBJDIR)\cache$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)\cookies$O $(OBJDIR)\db$O $(OBJDIR)\delta$O $(OBJDIR)\deltacmd$O $(OBJDIR)\descendants$O $(OBJDIR)\diff$O $(OBJDIR)\diffcmd$O $(OBJDIR)\dispatch$O $(OBJDIR)\doc$O $(OBJDIR)\email$O $(OBJDIR)\encode$O $(OBJDIR)\etag$O $(OBJDIR)\event$O $(OBJDIR)\export$O $(OBJDIR)\file$O $(OBJDIR)\finfo$O $(OBJDIR)\foci$O $(OBJDIR)\forum$O $(OBJDIR)\fshell$O $(OBJDIR)\fusefs$O $(OBJDIR)\glob$O $(OBJDIR)\graph$O $(OBJDIR)\gzip$O $(OBJDIR)\hname$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_artifact$O $(OBJDIR)\json_branch$O $(OBJDIR)\json_config$O $(OBJDIR)\json_diff$O $(OBJDIR)\json_dir$O $(OBJDIR)\json_finfo$O $(OBJDIR)\json_login$O $(OBJDIR)\json_query$O $(OBJDIR)\json_report$O $(OBJDIR)\json_status$O $(OBJDIR)\json_tag$O $(OBJDIR)\json_timeline$O $(OBJDIR)\json_user$O $(OBJDIR)\json_wiki$O $(OBJDIR)\leaf$O $(OBJDIR)\loadctrl$O $(OBJDIR)\login$O $(OBJDIR)\lookslike$O $(OBJDIR)\main$O $(OBJDIR)\manifest$O $(OBJDIR)\markdown$O $(OBJDIR)\markdown_html$O $(OBJDIR)\md5$O $(OBJDIR)\merge$O $(OBJDIR)\merge3$O $(OBJDIR)\moderate$O $(OBJDIR)\name$O $(OBJDIR)\path$O $(OBJDIR)\piechart$O $(OBJDIR)\pivot$O $(OBJDIR)\popen$O $(OBJDIR)\pqueue$O $(OBJDIR)\printf$O $(OBJDIR)\publish$O $(OBJDIR)\purge$O $(OBJDIR)\rebuild$O $(OBJDIR)\regexp$O $(OBJDIR)\report$O $(OBJDIR)\rss$O $(OBJDIR)\schema$O $(OBJDIR)\search$O $(OBJDIR)\security_audit$O $(OBJDIR)\setup$O $(OBJDIR)\sha1$O $(OBJDIR)\sha1hard$O $(OBJDIR)\sha3$O $(OBJDIR)\shun$O $(OBJDIR)\sitemap$O $(OBJDIR)\skins$O $(OBJDIR)\smtp$O $(OBJDIR)\sqlcmd$O $(OBJDIR)\stash$O $(OBJDIR)\stat$O $(OBJDIR)\statrep$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)\unicode$O $(OBJDIR)\unversioned$O $(OBJDIR)\update$O $(OBJDIR)\url$O $(OBJDIR)\user$O $(OBJDIR)\utf8$O $(OBJDIR)\util$O $(OBJDIR)\verify$O $(OBJDIR)\vfile$O $(OBJDIR)\webmail$O $(OBJDIR)\wiki$O $(OBJDIR)\wikiformat$O $(OBJDIR)\winfile$O $(OBJDIR)\winhttp$O $(OBJDIR)\wysiwyg$O $(OBJDIR)\xfer$O $(OBJDIR)\xfersetup$O $(OBJDIR)\zip$O $(OBJDIR)\shell$O $(OBJDIR)\sqlite3$O $(OBJDIR)\th$O $(OBJDIR)\th_lang$O | |
| 36 | 36 | |
| 37 | 37 | |
| 38 | 38 | RC=$(DMDIR)\bin\rcc |
| 39 | 39 | RCFLAGS=-32 -w1 -I$(SRCDIR) /D__DMC__ |
| 40 | 40 | |
| @@ -49,11 +49,11 @@ | ||
| 49 | 49 | |
| 50 | 50 | $(OBJDIR)\fossil.res: $B\win\fossil.rc |
| 51 | 51 | $(RC) $(RCFLAGS) -o$@ $** |
| 52 | 52 | |
| 53 | 53 | $(OBJDIR)\link: $B\win\Makefile.dmc $(OBJDIR)\fossil.res |
| 54 | - +echo add allrepo attach bag bisect blob branch browse builtin bundle cache captcha cgi checkin checkout clearsign clone comformat configure content cookies db delta deltacmd descendants diff diffcmd dispatch doc email encode etag event export file finfo foci forum fshell fusefs glob graph gzip hname http http_socket http_ssl http_transport import info json json_artifact json_branch json_config json_diff json_dir json_finfo json_login json_query json_report json_status json_tag json_timeline json_user json_wiki leaf loadctrl login lookslike main manifest markdown markdown_html md5 merge merge3 moderate name path piechart pivot popen pqueue printf publish purge rebuild regexp report rss schema search security_audit setup sha1 sha1hard sha3 shun sitemap skins sqlcmd stash stat statrep style sync tag tar th_main timeline tkt tktsetup undo unicode unversioned update url user utf8 util verify vfile wiki wikiformat winfile winhttp wysiwyg xfer xfersetup zip shell sqlite3 th th_lang > $@ | |
| 54 | + +echo add allrepo attach bag bisect blob branch browse builtin bundle cache captcha cgi checkin checkout clearsign clone comformat configure content cookies db delta deltacmd descendants diff diffcmd dispatch doc email encode etag event export file finfo foci forum fshell fusefs glob graph gzip hname http http_socket http_ssl http_transport import info json json_artifact json_branch json_config json_diff json_dir json_finfo json_login json_query json_report json_status json_tag json_timeline json_user json_wiki leaf loadctrl login lookslike main manifest markdown markdown_html md5 merge merge3 moderate name path piechart pivot popen pqueue printf publish purge rebuild regexp report rss schema search security_audit setup sha1 sha1hard sha3 shun sitemap skins smtp sqlcmd stash stat statrep style sync tag tar th_main timeline tkt tktsetup undo unicode unversioned update url user utf8 util verify vfile webmail wiki wikiformat winfile winhttp wysiwyg xfer xfersetup zip shell sqlite3 th th_lang > $@ | |
| 55 | 55 | +echo fossil >> $@ |
| 56 | 56 | +echo fossil >> $@ |
| 57 | 57 | +echo $(LIBS) >> $@ |
| 58 | 58 | +echo. >> $@ |
| 59 | 59 | +echo fossil >> $@ |
| @@ -728,10 +728,16 @@ | ||
| 728 | 728 | $(OBJDIR)\skins$O : skins_.c skins.h |
| 729 | 729 | $(TCC) -o$@ -c skins_.c |
| 730 | 730 | |
| 731 | 731 | skins_.c : $(SRCDIR)\skins.c |
| 732 | 732 | +translate$E $** > $@ |
| 733 | + | |
| 734 | +$(OBJDIR)\smtp$O : smtp_.c smtp.h | |
| 735 | + $(TCC) -o$@ -c smtp_.c | |
| 736 | + | |
| 737 | +smtp_.c : $(SRCDIR)\smtp.c | |
| 738 | + +translate$E $** > $@ | |
| 733 | 739 | |
| 734 | 740 | $(OBJDIR)\sqlcmd$O : sqlcmd_.c sqlcmd.h |
| 735 | 741 | $(TCC) -o$@ -c sqlcmd_.c |
| 736 | 742 | |
| 737 | 743 | sqlcmd_.c : $(SRCDIR)\sqlcmd.c |
| @@ -860,10 +866,16 @@ | ||
| 860 | 866 | $(OBJDIR)\vfile$O : vfile_.c vfile.h |
| 861 | 867 | $(TCC) -o$@ -c vfile_.c |
| 862 | 868 | |
| 863 | 869 | vfile_.c : $(SRCDIR)\vfile.c |
| 864 | 870 | +translate$E $** > $@ |
| 871 | + | |
| 872 | +$(OBJDIR)\webmail$O : webmail_.c webmail.h | |
| 873 | + $(TCC) -o$@ -c webmail_.c | |
| 874 | + | |
| 875 | +webmail_.c : $(SRCDIR)\webmail.c | |
| 876 | + +translate$E $** > $@ | |
| 865 | 877 | |
| 866 | 878 | $(OBJDIR)\wiki$O : wiki_.c wiki.h |
| 867 | 879 | $(TCC) -o$@ -c wiki_.c |
| 868 | 880 | |
| 869 | 881 | wiki_.c : $(SRCDIR)\wiki.c |
| @@ -910,7 +922,7 @@ | ||
| 910 | 922 | |
| 911 | 923 | zip_.c : $(SRCDIR)\zip.c |
| 912 | 924 | +translate$E $** > $@ |
| 913 | 925 | |
| 914 | 926 | headers: makeheaders$E page_index.h builtin_data.h default_css.h VERSION.h |
| 915 | - +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 builtin_.c:builtin.h bundle_.c:bundle.h cache_.c:cache.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 cookies_.c:cookies.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 dispatch_.c:dispatch.h doc_.c:doc.h email_.c:email.h encode_.c:encode.h etag_.c:etag.h event_.c:event.h export_.c:export.h file_.c:file.h finfo_.c:finfo.h foci_.c:foci.h forum_.c:forum.h fshell_.c:fshell.h fusefs_.c:fusefs.h glob_.c:glob.h graph_.c:graph.h gzip_.c:gzip.h hname_.c:hname.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_artifact_.c:json_artifact.h json_branch_.c:json_branch.h json_config_.c:json_config.h json_diff_.c:json_diff.h json_dir_.c:json_dir.h json_finfo_.c:json_finfo.h json_login_.c:json_login.h json_query_.c:json_query.h json_report_.c:json_report.h json_status_.c:json_status.h json_tag_.c:json_tag.h json_timeline_.c:json_timeline.h json_user_.c:json_user.h json_wiki_.c:json_wiki.h leaf_.c:leaf.h loadctrl_.c:loadctrl.h login_.c:login.h lookslike_.c:lookslike.h main_.c:main.h manifest_.c:manifest.h markdown_.c:markdown.h markdown_html_.c:markdown_html.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h moderate_.c:moderate.h name_.c:name.h path_.c:path.h piechart_.c:piechart.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h publish_.c:publish.h purge_.c:purge.h rebuild_.c:rebuild.h regexp_.c:regexp.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h security_audit_.c:security_audit.h setup_.c:setup.h sha1_.c:sha1.h sha1hard_.c:sha1hard.h sha3_.c:sha3.h shun_.c:shun.h sitemap_.c:sitemap.h skins_.c:skins.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h statrep_.c:statrep.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 unicode_.c:unicode.h unversioned_.c:unversioned.h update_.c:update.h url_.c:url.h user_.c:user.h utf8_.c:utf8.h util_.c:util.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h winfile_.c:winfile.h winhttp_.c:winhttp.h wysiwyg_.c:wysiwyg.h xfer_.c:xfer.h xfersetup_.c:xfersetup.h zip_.c:zip.h $(SRCDIR)\sqlite3.h $(SRCDIR)\th.h VERSION.h $(SRCDIR)\cson_amalgamation.h | |
| 927 | + +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 builtin_.c:builtin.h bundle_.c:bundle.h cache_.c:cache.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 cookies_.c:cookies.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 dispatch_.c:dispatch.h doc_.c:doc.h email_.c:email.h encode_.c:encode.h etag_.c:etag.h event_.c:event.h export_.c:export.h file_.c:file.h finfo_.c:finfo.h foci_.c:foci.h forum_.c:forum.h fshell_.c:fshell.h fusefs_.c:fusefs.h glob_.c:glob.h graph_.c:graph.h gzip_.c:gzip.h hname_.c:hname.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_artifact_.c:json_artifact.h json_branch_.c:json_branch.h json_config_.c:json_config.h json_diff_.c:json_diff.h json_dir_.c:json_dir.h json_finfo_.c:json_finfo.h json_login_.c:json_login.h json_query_.c:json_query.h json_report_.c:json_report.h json_status_.c:json_status.h json_tag_.c:json_tag.h json_timeline_.c:json_timeline.h json_user_.c:json_user.h json_wiki_.c:json_wiki.h leaf_.c:leaf.h loadctrl_.c:loadctrl.h login_.c:login.h lookslike_.c:lookslike.h main_.c:main.h manifest_.c:manifest.h markdown_.c:markdown.h markdown_html_.c:markdown_html.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h moderate_.c:moderate.h name_.c:name.h path_.c:path.h piechart_.c:piechart.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h publish_.c:publish.h purge_.c:purge.h rebuild_.c:rebuild.h regexp_.c:regexp.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h security_audit_.c:security_audit.h setup_.c:setup.h sha1_.c:sha1.h sha1hard_.c:sha1hard.h sha3_.c:sha3.h shun_.c:shun.h sitemap_.c:sitemap.h skins_.c:skins.h smtp_.c:smtp.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h statrep_.c:statrep.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 unicode_.c:unicode.h unversioned_.c:unversioned.h update_.c:update.h url_.c:url.h user_.c:user.h utf8_.c:utf8.h util_.c:util.h verify_.c:verify.h vfile_.c:vfile.h webmail_.c:webmail.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h winfile_.c:winfile.h winhttp_.c:winhttp.h wysiwyg_.c:wysiwyg.h xfer_.c:xfer.h xfersetup_.c:xfersetup.h zip_.c:zip.h $(SRCDIR)\sqlite3.h $(SRCDIR)\th.h VERSION.h $(SRCDIR)\cson_amalgamation.h | |
| 916 | 928 | @copy /Y nul: headers |
| 917 | 929 |
| --- win/Makefile.dmc | |
| +++ win/Makefile.dmc | |
| @@ -28,13 +28,13 @@ | |
| 28 | |
| 29 | SQLITE_OPTIONS = -DNDEBUG=1 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_MEMSTATUS=0 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS -DSQLITE_OMIT_DECLTYPE -DSQLITE_OMIT_DEPRECATED -DSQLITE_OMIT_GET_TABLE -DSQLITE_OMIT_PROGRESS_CALLBACK -DSQLITE_OMIT_SHARED_CACHE -DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_MAX_EXPR_DEPTH=0 -DSQLITE_USE_ALLOCA -DSQLITE_ENABLE_LOCKING_STYLE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_FTS3_PARENTHESIS -DSQLITE_ENABLE_DBSTAT_VTAB -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_STMTVTAB -DSQLITE_HAVE_ZLIB -DSQLITE_INTROSPECTION_PRAGMAS -DSQLITE_ENABLE_DBPAGE_VTAB |
| 30 | |
| 31 | SHELL_OPTIONS = -DNDEBUG=1 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_MEMSTATUS=0 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS -DSQLITE_OMIT_DECLTYPE -DSQLITE_OMIT_DEPRECATED -DSQLITE_OMIT_GET_TABLE -DSQLITE_OMIT_PROGRESS_CALLBACK -DSQLITE_OMIT_SHARED_CACHE -DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_MAX_EXPR_DEPTH=0 -DSQLITE_USE_ALLOCA -DSQLITE_ENABLE_LOCKING_STYLE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_FTS3_PARENTHESIS -DSQLITE_ENABLE_DBSTAT_VTAB -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_STMTVTAB -DSQLITE_HAVE_ZLIB -DSQLITE_INTROSPECTION_PRAGMAS -DSQLITE_ENABLE_DBPAGE_VTAB -Dmain=sqlite3_shell -DSQLITE_SHELL_IS_UTF8=1 -DSQLITE_OMIT_LOAD_EXTENSION=1 -DUSE_SYSTEM_SQLITE=$(USE_SYSTEM_SQLITE) -DSQLITE_SHELL_DBNAME_PROC=sqlcmd_get_dbname -DSQLITE_SHELL_INIT_PROC=sqlcmd_init_proc -Daccess=file_access -Dsystem=fossil_system -Dgetenv=fossil_getenv -Dfopen=fossil_fopen |
| 32 | |
| 33 | SRC = add_.c allrepo_.c attach_.c bag_.c bisect_.c blob_.c branch_.c browse_.c builtin_.c bundle_.c cache_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c cookies_.c db_.c delta_.c deltacmd_.c descendants_.c diff_.c diffcmd_.c dispatch_.c doc_.c email_.c encode_.c etag_.c event_.c export_.c file_.c finfo_.c foci_.c forum_.c fshell_.c fusefs_.c glob_.c graph_.c gzip_.c hname_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c json_.c json_artifact_.c json_branch_.c json_config_.c json_diff_.c json_dir_.c json_finfo_.c json_login_.c json_query_.c json_report_.c json_status_.c json_tag_.c json_timeline_.c json_user_.c json_wiki_.c leaf_.c loadctrl_.c login_.c lookslike_.c main_.c manifest_.c markdown_.c markdown_html_.c md5_.c merge_.c merge3_.c moderate_.c name_.c path_.c piechart_.c pivot_.c popen_.c pqueue_.c printf_.c publish_.c purge_.c rebuild_.c regexp_.c report_.c rss_.c schema_.c search_.c security_audit_.c setup_.c sha1_.c sha1hard_.c sha3_.c shun_.c sitemap_.c skins_.c sqlcmd_.c stash_.c stat_.c statrep_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c unicode_.c unversioned_.c update_.c url_.c user_.c utf8_.c util_.c verify_.c vfile_.c wiki_.c wikiformat_.c winfile_.c winhttp_.c wysiwyg_.c xfer_.c xfersetup_.c zip_.c |
| 34 | |
| 35 | 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)\builtin$O $(OBJDIR)\bundle$O $(OBJDIR)\cache$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)\cookies$O $(OBJDIR)\db$O $(OBJDIR)\delta$O $(OBJDIR)\deltacmd$O $(OBJDIR)\descendants$O $(OBJDIR)\diff$O $(OBJDIR)\diffcmd$O $(OBJDIR)\dispatch$O $(OBJDIR)\doc$O $(OBJDIR)\email$O $(OBJDIR)\encode$O $(OBJDIR)\etag$O $(OBJDIR)\event$O $(OBJDIR)\export$O $(OBJDIR)\file$O $(OBJDIR)\finfo$O $(OBJDIR)\foci$O $(OBJDIR)\forum$O $(OBJDIR)\fshell$O $(OBJDIR)\fusefs$O $(OBJDIR)\glob$O $(OBJDIR)\graph$O $(OBJDIR)\gzip$O $(OBJDIR)\hname$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_artifact$O $(OBJDIR)\json_branch$O $(OBJDIR)\json_config$O $(OBJDIR)\json_diff$O $(OBJDIR)\json_dir$O $(OBJDIR)\json_finfo$O $(OBJDIR)\json_login$O $(OBJDIR)\json_query$O $(OBJDIR)\json_report$O $(OBJDIR)\json_status$O $(OBJDIR)\json_tag$O $(OBJDIR)\json_timeline$O $(OBJDIR)\json_user$O $(OBJDIR)\json_wiki$O $(OBJDIR)\leaf$O $(OBJDIR)\loadctrl$O $(OBJDIR)\login$O $(OBJDIR)\lookslike$O $(OBJDIR)\main$O $(OBJDIR)\manifest$O $(OBJDIR)\markdown$O $(OBJDIR)\markdown_html$O $(OBJDIR)\md5$O $(OBJDIR)\merge$O $(OBJDIR)\merge3$O $(OBJDIR)\moderate$O $(OBJDIR)\name$O $(OBJDIR)\path$O $(OBJDIR)\piechart$O $(OBJDIR)\pivot$O $(OBJDIR)\popen$O $(OBJDIR)\pqueue$O $(OBJDIR)\printf$O $(OBJDIR)\publish$O $(OBJDIR)\purge$O $(OBJDIR)\rebuild$O $(OBJDIR)\regexp$O $(OBJDIR)\report$O $(OBJDIR)\rss$O $(OBJDIR)\schema$O $(OBJDIR)\search$O $(OBJDIR)\security_audit$O $(OBJDIR)\setup$O $(OBJDIR)\sha1$O $(OBJDIR)\sha1hard$O $(OBJDIR)\sha3$O $(OBJDIR)\shun$O $(OBJDIR)\sitemap$O $(OBJDIR)\skins$O $(OBJDIR)\sqlcmd$O $(OBJDIR)\stash$O $(OBJDIR)\stat$O $(OBJDIR)\statrep$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)\unicode$O $(OBJDIR)\unversioned$O $(OBJDIR)\update$O $(OBJDIR)\url$O $(OBJDIR)\user$O $(OBJDIR)\utf8$O $(OBJDIR)\util$O $(OBJDIR)\verify$O $(OBJDIR)\vfile$O $(OBJDIR)\wiki$O $(OBJDIR)\wikiformat$O $(OBJDIR)\winfile$O $(OBJDIR)\winhttp$O $(OBJDIR)\wysiwyg$O $(OBJDIR)\xfer$O $(OBJDIR)\xfersetup$O $(OBJDIR)\zip$O $(OBJDIR)\shell$O $(OBJDIR)\sqlite3$O $(OBJDIR)\th$O $(OBJDIR)\th_lang$O |
| 36 | |
| 37 | |
| 38 | RC=$(DMDIR)\bin\rcc |
| 39 | RCFLAGS=-32 -w1 -I$(SRCDIR) /D__DMC__ |
| 40 | |
| @@ -49,11 +49,11 @@ | |
| 49 | |
| 50 | $(OBJDIR)\fossil.res: $B\win\fossil.rc |
| 51 | $(RC) $(RCFLAGS) -o$@ $** |
| 52 | |
| 53 | $(OBJDIR)\link: $B\win\Makefile.dmc $(OBJDIR)\fossil.res |
| 54 | +echo add allrepo attach bag bisect blob branch browse builtin bundle cache captcha cgi checkin checkout clearsign clone comformat configure content cookies db delta deltacmd descendants diff diffcmd dispatch doc email encode etag event export file finfo foci forum fshell fusefs glob graph gzip hname http http_socket http_ssl http_transport import info json json_artifact json_branch json_config json_diff json_dir json_finfo json_login json_query json_report json_status json_tag json_timeline json_user json_wiki leaf loadctrl login lookslike main manifest markdown markdown_html md5 merge merge3 moderate name path piechart pivot popen pqueue printf publish purge rebuild regexp report rss schema search security_audit setup sha1 sha1hard sha3 shun sitemap skins sqlcmd stash stat statrep style sync tag tar th_main timeline tkt tktsetup undo unicode unversioned update url user utf8 util verify vfile wiki wikiformat winfile winhttp wysiwyg xfer xfersetup zip shell sqlite3 th th_lang > $@ |
| 55 | +echo fossil >> $@ |
| 56 | +echo fossil >> $@ |
| 57 | +echo $(LIBS) >> $@ |
| 58 | +echo. >> $@ |
| 59 | +echo fossil >> $@ |
| @@ -728,10 +728,16 @@ | |
| 728 | $(OBJDIR)\skins$O : skins_.c skins.h |
| 729 | $(TCC) -o$@ -c skins_.c |
| 730 | |
| 731 | skins_.c : $(SRCDIR)\skins.c |
| 732 | +translate$E $** > $@ |
| 733 | |
| 734 | $(OBJDIR)\sqlcmd$O : sqlcmd_.c sqlcmd.h |
| 735 | $(TCC) -o$@ -c sqlcmd_.c |
| 736 | |
| 737 | sqlcmd_.c : $(SRCDIR)\sqlcmd.c |
| @@ -860,10 +866,16 @@ | |
| 860 | $(OBJDIR)\vfile$O : vfile_.c vfile.h |
| 861 | $(TCC) -o$@ -c vfile_.c |
| 862 | |
| 863 | vfile_.c : $(SRCDIR)\vfile.c |
| 864 | +translate$E $** > $@ |
| 865 | |
| 866 | $(OBJDIR)\wiki$O : wiki_.c wiki.h |
| 867 | $(TCC) -o$@ -c wiki_.c |
| 868 | |
| 869 | wiki_.c : $(SRCDIR)\wiki.c |
| @@ -910,7 +922,7 @@ | |
| 910 | |
| 911 | zip_.c : $(SRCDIR)\zip.c |
| 912 | +translate$E $** > $@ |
| 913 | |
| 914 | headers: makeheaders$E page_index.h builtin_data.h default_css.h VERSION.h |
| 915 | +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 builtin_.c:builtin.h bundle_.c:bundle.h cache_.c:cache.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 cookies_.c:cookies.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 dispatch_.c:dispatch.h doc_.c:doc.h email_.c:email.h encode_.c:encode.h etag_.c:etag.h event_.c:event.h export_.c:export.h file_.c:file.h finfo_.c:finfo.h foci_.c:foci.h forum_.c:forum.h fshell_.c:fshell.h fusefs_.c:fusefs.h glob_.c:glob.h graph_.c:graph.h gzip_.c:gzip.h hname_.c:hname.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_artifact_.c:json_artifact.h json_branch_.c:json_branch.h json_config_.c:json_config.h json_diff_.c:json_diff.h json_dir_.c:json_dir.h json_finfo_.c:json_finfo.h json_login_.c:json_login.h json_query_.c:json_query.h json_report_.c:json_report.h json_status_.c:json_status.h json_tag_.c:json_tag.h json_timeline_.c:json_timeline.h json_user_.c:json_user.h json_wiki_.c:json_wiki.h leaf_.c:leaf.h loadctrl_.c:loadctrl.h login_.c:login.h lookslike_.c:lookslike.h main_.c:main.h manifest_.c:manifest.h markdown_.c:markdown.h markdown_html_.c:markdown_html.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h moderate_.c:moderate.h name_.c:name.h path_.c:path.h piechart_.c:piechart.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h publish_.c:publish.h purge_.c:purge.h rebuild_.c:rebuild.h regexp_.c:regexp.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h security_audit_.c:security_audit.h setup_.c:setup.h sha1_.c:sha1.h sha1hard_.c:sha1hard.h sha3_.c:sha3.h shun_.c:shun.h sitemap_.c:sitemap.h skins_.c:skins.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h statrep_.c:statrep.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 unicode_.c:unicode.h unversioned_.c:unversioned.h update_.c:update.h url_.c:url.h user_.c:user.h utf8_.c:utf8.h util_.c:util.h verify_.c:verify.h vfile_.c:vfile.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h winfile_.c:winfile.h winhttp_.c:winhttp.h wysiwyg_.c:wysiwyg.h xfer_.c:xfer.h xfersetup_.c:xfersetup.h zip_.c:zip.h $(SRCDIR)\sqlite3.h $(SRCDIR)\th.h VERSION.h $(SRCDIR)\cson_amalgamation.h |
| 916 | @copy /Y nul: headers |
| 917 |
| --- win/Makefile.dmc | |
| +++ win/Makefile.dmc | |
| @@ -28,13 +28,13 @@ | |
| 28 | |
| 29 | SQLITE_OPTIONS = -DNDEBUG=1 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_MEMSTATUS=0 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS -DSQLITE_OMIT_DECLTYPE -DSQLITE_OMIT_DEPRECATED -DSQLITE_OMIT_GET_TABLE -DSQLITE_OMIT_PROGRESS_CALLBACK -DSQLITE_OMIT_SHARED_CACHE -DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_MAX_EXPR_DEPTH=0 -DSQLITE_USE_ALLOCA -DSQLITE_ENABLE_LOCKING_STYLE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_FTS3_PARENTHESIS -DSQLITE_ENABLE_DBSTAT_VTAB -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_STMTVTAB -DSQLITE_HAVE_ZLIB -DSQLITE_INTROSPECTION_PRAGMAS -DSQLITE_ENABLE_DBPAGE_VTAB |
| 30 | |
| 31 | SHELL_OPTIONS = -DNDEBUG=1 -DSQLITE_THREADSAFE=0 -DSQLITE_DEFAULT_MEMSTATUS=0 -DSQLITE_DEFAULT_WAL_SYNCHRONOUS=1 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS -DSQLITE_OMIT_DECLTYPE -DSQLITE_OMIT_DEPRECATED -DSQLITE_OMIT_GET_TABLE -DSQLITE_OMIT_PROGRESS_CALLBACK -DSQLITE_OMIT_SHARED_CACHE -DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_MAX_EXPR_DEPTH=0 -DSQLITE_USE_ALLOCA -DSQLITE_ENABLE_LOCKING_STYLE=0 -DSQLITE_DEFAULT_FILE_FORMAT=4 -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_FTS4 -DSQLITE_ENABLE_FTS3_PARENTHESIS -DSQLITE_ENABLE_DBSTAT_VTAB -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_STMTVTAB -DSQLITE_HAVE_ZLIB -DSQLITE_INTROSPECTION_PRAGMAS -DSQLITE_ENABLE_DBPAGE_VTAB -Dmain=sqlite3_shell -DSQLITE_SHELL_IS_UTF8=1 -DSQLITE_OMIT_LOAD_EXTENSION=1 -DUSE_SYSTEM_SQLITE=$(USE_SYSTEM_SQLITE) -DSQLITE_SHELL_DBNAME_PROC=sqlcmd_get_dbname -DSQLITE_SHELL_INIT_PROC=sqlcmd_init_proc -Daccess=file_access -Dsystem=fossil_system -Dgetenv=fossil_getenv -Dfopen=fossil_fopen |
| 32 | |
| 33 | SRC = add_.c allrepo_.c attach_.c bag_.c bisect_.c blob_.c branch_.c browse_.c builtin_.c bundle_.c cache_.c captcha_.c cgi_.c checkin_.c checkout_.c clearsign_.c clone_.c comformat_.c configure_.c content_.c cookies_.c db_.c delta_.c deltacmd_.c descendants_.c diff_.c diffcmd_.c dispatch_.c doc_.c email_.c encode_.c etag_.c event_.c export_.c file_.c finfo_.c foci_.c forum_.c fshell_.c fusefs_.c glob_.c graph_.c gzip_.c hname_.c http_.c http_socket_.c http_ssl_.c http_transport_.c import_.c info_.c json_.c json_artifact_.c json_branch_.c json_config_.c json_diff_.c json_dir_.c json_finfo_.c json_login_.c json_query_.c json_report_.c json_status_.c json_tag_.c json_timeline_.c json_user_.c json_wiki_.c leaf_.c loadctrl_.c login_.c lookslike_.c main_.c manifest_.c markdown_.c markdown_html_.c md5_.c merge_.c merge3_.c moderate_.c name_.c path_.c piechart_.c pivot_.c popen_.c pqueue_.c printf_.c publish_.c purge_.c rebuild_.c regexp_.c report_.c rss_.c schema_.c search_.c security_audit_.c setup_.c sha1_.c sha1hard_.c sha3_.c shun_.c sitemap_.c skins_.c smtp_.c sqlcmd_.c stash_.c stat_.c statrep_.c style_.c sync_.c tag_.c tar_.c th_main_.c timeline_.c tkt_.c tktsetup_.c undo_.c unicode_.c unversioned_.c update_.c url_.c user_.c utf8_.c util_.c verify_.c vfile_.c webmail_.c wiki_.c wikiformat_.c winfile_.c winhttp_.c wysiwyg_.c xfer_.c xfersetup_.c zip_.c |
| 34 | |
| 35 | 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)\builtin$O $(OBJDIR)\bundle$O $(OBJDIR)\cache$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)\cookies$O $(OBJDIR)\db$O $(OBJDIR)\delta$O $(OBJDIR)\deltacmd$O $(OBJDIR)\descendants$O $(OBJDIR)\diff$O $(OBJDIR)\diffcmd$O $(OBJDIR)\dispatch$O $(OBJDIR)\doc$O $(OBJDIR)\email$O $(OBJDIR)\encode$O $(OBJDIR)\etag$O $(OBJDIR)\event$O $(OBJDIR)\export$O $(OBJDIR)\file$O $(OBJDIR)\finfo$O $(OBJDIR)\foci$O $(OBJDIR)\forum$O $(OBJDIR)\fshell$O $(OBJDIR)\fusefs$O $(OBJDIR)\glob$O $(OBJDIR)\graph$O $(OBJDIR)\gzip$O $(OBJDIR)\hname$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_artifact$O $(OBJDIR)\json_branch$O $(OBJDIR)\json_config$O $(OBJDIR)\json_diff$O $(OBJDIR)\json_dir$O $(OBJDIR)\json_finfo$O $(OBJDIR)\json_login$O $(OBJDIR)\json_query$O $(OBJDIR)\json_report$O $(OBJDIR)\json_status$O $(OBJDIR)\json_tag$O $(OBJDIR)\json_timeline$O $(OBJDIR)\json_user$O $(OBJDIR)\json_wiki$O $(OBJDIR)\leaf$O $(OBJDIR)\loadctrl$O $(OBJDIR)\login$O $(OBJDIR)\lookslike$O $(OBJDIR)\main$O $(OBJDIR)\manifest$O $(OBJDIR)\markdown$O $(OBJDIR)\markdown_html$O $(OBJDIR)\md5$O $(OBJDIR)\merge$O $(OBJDIR)\merge3$O $(OBJDIR)\moderate$O $(OBJDIR)\name$O $(OBJDIR)\path$O $(OBJDIR)\piechart$O $(OBJDIR)\pivot$O $(OBJDIR)\popen$O $(OBJDIR)\pqueue$O $(OBJDIR)\printf$O $(OBJDIR)\publish$O $(OBJDIR)\purge$O $(OBJDIR)\rebuild$O $(OBJDIR)\regexp$O $(OBJDIR)\report$O $(OBJDIR)\rss$O $(OBJDIR)\schema$O $(OBJDIR)\search$O $(OBJDIR)\security_audit$O $(OBJDIR)\setup$O $(OBJDIR)\sha1$O $(OBJDIR)\sha1hard$O $(OBJDIR)\sha3$O $(OBJDIR)\shun$O $(OBJDIR)\sitemap$O $(OBJDIR)\skins$O $(OBJDIR)\smtp$O $(OBJDIR)\sqlcmd$O $(OBJDIR)\stash$O $(OBJDIR)\stat$O $(OBJDIR)\statrep$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)\unicode$O $(OBJDIR)\unversioned$O $(OBJDIR)\update$O $(OBJDIR)\url$O $(OBJDIR)\user$O $(OBJDIR)\utf8$O $(OBJDIR)\util$O $(OBJDIR)\verify$O $(OBJDIR)\vfile$O $(OBJDIR)\webmail$O $(OBJDIR)\wiki$O $(OBJDIR)\wikiformat$O $(OBJDIR)\winfile$O $(OBJDIR)\winhttp$O $(OBJDIR)\wysiwyg$O $(OBJDIR)\xfer$O $(OBJDIR)\xfersetup$O $(OBJDIR)\zip$O $(OBJDIR)\shell$O $(OBJDIR)\sqlite3$O $(OBJDIR)\th$O $(OBJDIR)\th_lang$O |
| 36 | |
| 37 | |
| 38 | RC=$(DMDIR)\bin\rcc |
| 39 | RCFLAGS=-32 -w1 -I$(SRCDIR) /D__DMC__ |
| 40 | |
| @@ -49,11 +49,11 @@ | |
| 49 | |
| 50 | $(OBJDIR)\fossil.res: $B\win\fossil.rc |
| 51 | $(RC) $(RCFLAGS) -o$@ $** |
| 52 | |
| 53 | $(OBJDIR)\link: $B\win\Makefile.dmc $(OBJDIR)\fossil.res |
| 54 | +echo add allrepo attach bag bisect blob branch browse builtin bundle cache captcha cgi checkin checkout clearsign clone comformat configure content cookies db delta deltacmd descendants diff diffcmd dispatch doc email encode etag event export file finfo foci forum fshell fusefs glob graph gzip hname http http_socket http_ssl http_transport import info json json_artifact json_branch json_config json_diff json_dir json_finfo json_login json_query json_report json_status json_tag json_timeline json_user json_wiki leaf loadctrl login lookslike main manifest markdown markdown_html md5 merge merge3 moderate name path piechart pivot popen pqueue printf publish purge rebuild regexp report rss schema search security_audit setup sha1 sha1hard sha3 shun sitemap skins smtp sqlcmd stash stat statrep style sync tag tar th_main timeline tkt tktsetup undo unicode unversioned update url user utf8 util verify vfile webmail wiki wikiformat winfile winhttp wysiwyg xfer xfersetup zip shell sqlite3 th th_lang > $@ |
| 55 | +echo fossil >> $@ |
| 56 | +echo fossil >> $@ |
| 57 | +echo $(LIBS) >> $@ |
| 58 | +echo. >> $@ |
| 59 | +echo fossil >> $@ |
| @@ -728,10 +728,16 @@ | |
| 728 | $(OBJDIR)\skins$O : skins_.c skins.h |
| 729 | $(TCC) -o$@ -c skins_.c |
| 730 | |
| 731 | skins_.c : $(SRCDIR)\skins.c |
| 732 | +translate$E $** > $@ |
| 733 | |
| 734 | $(OBJDIR)\smtp$O : smtp_.c smtp.h |
| 735 | $(TCC) -o$@ -c smtp_.c |
| 736 | |
| 737 | smtp_.c : $(SRCDIR)\smtp.c |
| 738 | +translate$E $** > $@ |
| 739 | |
| 740 | $(OBJDIR)\sqlcmd$O : sqlcmd_.c sqlcmd.h |
| 741 | $(TCC) -o$@ -c sqlcmd_.c |
| 742 | |
| 743 | sqlcmd_.c : $(SRCDIR)\sqlcmd.c |
| @@ -860,10 +866,16 @@ | |
| 866 | $(OBJDIR)\vfile$O : vfile_.c vfile.h |
| 867 | $(TCC) -o$@ -c vfile_.c |
| 868 | |
| 869 | vfile_.c : $(SRCDIR)\vfile.c |
| 870 | +translate$E $** > $@ |
| 871 | |
| 872 | $(OBJDIR)\webmail$O : webmail_.c webmail.h |
| 873 | $(TCC) -o$@ -c webmail_.c |
| 874 | |
| 875 | webmail_.c : $(SRCDIR)\webmail.c |
| 876 | +translate$E $** > $@ |
| 877 | |
| 878 | $(OBJDIR)\wiki$O : wiki_.c wiki.h |
| 879 | $(TCC) -o$@ -c wiki_.c |
| 880 | |
| 881 | wiki_.c : $(SRCDIR)\wiki.c |
| @@ -910,7 +922,7 @@ | |
| 922 | |
| 923 | zip_.c : $(SRCDIR)\zip.c |
| 924 | +translate$E $** > $@ |
| 925 | |
| 926 | headers: makeheaders$E page_index.h builtin_data.h default_css.h VERSION.h |
| 927 | +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 builtin_.c:builtin.h bundle_.c:bundle.h cache_.c:cache.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 cookies_.c:cookies.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 dispatch_.c:dispatch.h doc_.c:doc.h email_.c:email.h encode_.c:encode.h etag_.c:etag.h event_.c:event.h export_.c:export.h file_.c:file.h finfo_.c:finfo.h foci_.c:foci.h forum_.c:forum.h fshell_.c:fshell.h fusefs_.c:fusefs.h glob_.c:glob.h graph_.c:graph.h gzip_.c:gzip.h hname_.c:hname.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_artifact_.c:json_artifact.h json_branch_.c:json_branch.h json_config_.c:json_config.h json_diff_.c:json_diff.h json_dir_.c:json_dir.h json_finfo_.c:json_finfo.h json_login_.c:json_login.h json_query_.c:json_query.h json_report_.c:json_report.h json_status_.c:json_status.h json_tag_.c:json_tag.h json_timeline_.c:json_timeline.h json_user_.c:json_user.h json_wiki_.c:json_wiki.h leaf_.c:leaf.h loadctrl_.c:loadctrl.h login_.c:login.h lookslike_.c:lookslike.h main_.c:main.h manifest_.c:manifest.h markdown_.c:markdown.h markdown_html_.c:markdown_html.h md5_.c:md5.h merge_.c:merge.h merge3_.c:merge3.h moderate_.c:moderate.h name_.c:name.h path_.c:path.h piechart_.c:piechart.h pivot_.c:pivot.h popen_.c:popen.h pqueue_.c:pqueue.h printf_.c:printf.h publish_.c:publish.h purge_.c:purge.h rebuild_.c:rebuild.h regexp_.c:regexp.h report_.c:report.h rss_.c:rss.h schema_.c:schema.h search_.c:search.h security_audit_.c:security_audit.h setup_.c:setup.h sha1_.c:sha1.h sha1hard_.c:sha1hard.h sha3_.c:sha3.h shun_.c:shun.h sitemap_.c:sitemap.h skins_.c:skins.h smtp_.c:smtp.h sqlcmd_.c:sqlcmd.h stash_.c:stash.h stat_.c:stat.h statrep_.c:statrep.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 unicode_.c:unicode.h unversioned_.c:unversioned.h update_.c:update.h url_.c:url.h user_.c:user.h utf8_.c:utf8.h util_.c:util.h verify_.c:verify.h vfile_.c:vfile.h webmail_.c:webmail.h wiki_.c:wiki.h wikiformat_.c:wikiformat.h winfile_.c:winfile.h winhttp_.c:winhttp.h wysiwyg_.c:wysiwyg.h xfer_.c:xfer.h xfersetup_.c:xfersetup.h zip_.c:zip.h $(SRCDIR)\sqlite3.h $(SRCDIR)\th.h VERSION.h $(SRCDIR)\cson_amalgamation.h |
| 928 | @copy /Y nul: headers |
| 929 |
+24
| --- win/Makefile.mingw | ||
| +++ win/Makefile.mingw | ||
| @@ -532,10 +532,11 @@ | ||
| 532 | 532 | $(SRCDIR)/sha1hard.c \ |
| 533 | 533 | $(SRCDIR)/sha3.c \ |
| 534 | 534 | $(SRCDIR)/shun.c \ |
| 535 | 535 | $(SRCDIR)/sitemap.c \ |
| 536 | 536 | $(SRCDIR)/skins.c \ |
| 537 | + $(SRCDIR)/smtp.c \ | |
| 537 | 538 | $(SRCDIR)/sqlcmd.c \ |
| 538 | 539 | $(SRCDIR)/stash.c \ |
| 539 | 540 | $(SRCDIR)/stat.c \ |
| 540 | 541 | $(SRCDIR)/statrep.c \ |
| 541 | 542 | $(SRCDIR)/style.c \ |
| @@ -554,10 +555,11 @@ | ||
| 554 | 555 | $(SRCDIR)/user.c \ |
| 555 | 556 | $(SRCDIR)/utf8.c \ |
| 556 | 557 | $(SRCDIR)/util.c \ |
| 557 | 558 | $(SRCDIR)/verify.c \ |
| 558 | 559 | $(SRCDIR)/vfile.c \ |
| 560 | + $(SRCDIR)/webmail.c \ | |
| 559 | 561 | $(SRCDIR)/wiki.c \ |
| 560 | 562 | $(SRCDIR)/wikiformat.c \ |
| 561 | 563 | $(SRCDIR)/winfile.c \ |
| 562 | 564 | $(SRCDIR)/winhttp.c \ |
| 563 | 565 | $(SRCDIR)/wysiwyg.c \ |
| @@ -735,10 +737,11 @@ | ||
| 735 | 737 | $(OBJDIR)/sha1hard_.c \ |
| 736 | 738 | $(OBJDIR)/sha3_.c \ |
| 737 | 739 | $(OBJDIR)/shun_.c \ |
| 738 | 740 | $(OBJDIR)/sitemap_.c \ |
| 739 | 741 | $(OBJDIR)/skins_.c \ |
| 742 | + $(OBJDIR)/smtp_.c \ | |
| 740 | 743 | $(OBJDIR)/sqlcmd_.c \ |
| 741 | 744 | $(OBJDIR)/stash_.c \ |
| 742 | 745 | $(OBJDIR)/stat_.c \ |
| 743 | 746 | $(OBJDIR)/statrep_.c \ |
| 744 | 747 | $(OBJDIR)/style_.c \ |
| @@ -757,10 +760,11 @@ | ||
| 757 | 760 | $(OBJDIR)/user_.c \ |
| 758 | 761 | $(OBJDIR)/utf8_.c \ |
| 759 | 762 | $(OBJDIR)/util_.c \ |
| 760 | 763 | $(OBJDIR)/verify_.c \ |
| 761 | 764 | $(OBJDIR)/vfile_.c \ |
| 765 | + $(OBJDIR)/webmail_.c \ | |
| 762 | 766 | $(OBJDIR)/wiki_.c \ |
| 763 | 767 | $(OBJDIR)/wikiformat_.c \ |
| 764 | 768 | $(OBJDIR)/winfile_.c \ |
| 765 | 769 | $(OBJDIR)/winhttp_.c \ |
| 766 | 770 | $(OBJDIR)/wysiwyg_.c \ |
| @@ -867,10 +871,11 @@ | ||
| 867 | 871 | $(OBJDIR)/sha1hard.o \ |
| 868 | 872 | $(OBJDIR)/sha3.o \ |
| 869 | 873 | $(OBJDIR)/shun.o \ |
| 870 | 874 | $(OBJDIR)/sitemap.o \ |
| 871 | 875 | $(OBJDIR)/skins.o \ |
| 876 | + $(OBJDIR)/smtp.o \ | |
| 872 | 877 | $(OBJDIR)/sqlcmd.o \ |
| 873 | 878 | $(OBJDIR)/stash.o \ |
| 874 | 879 | $(OBJDIR)/stat.o \ |
| 875 | 880 | $(OBJDIR)/statrep.o \ |
| 876 | 881 | $(OBJDIR)/style.o \ |
| @@ -889,10 +894,11 @@ | ||
| 889 | 894 | $(OBJDIR)/user.o \ |
| 890 | 895 | $(OBJDIR)/utf8.o \ |
| 891 | 896 | $(OBJDIR)/util.o \ |
| 892 | 897 | $(OBJDIR)/verify.o \ |
| 893 | 898 | $(OBJDIR)/vfile.o \ |
| 899 | + $(OBJDIR)/webmail.o \ | |
| 894 | 900 | $(OBJDIR)/wiki.o \ |
| 895 | 901 | $(OBJDIR)/wikiformat.o \ |
| 896 | 902 | $(OBJDIR)/winfile.o \ |
| 897 | 903 | $(OBJDIR)/winhttp.o \ |
| 898 | 904 | $(OBJDIR)/wysiwyg.o \ |
| @@ -1218,10 +1224,11 @@ | ||
| 1218 | 1224 | $(OBJDIR)/sha1hard_.c:$(OBJDIR)/sha1hard.h \ |
| 1219 | 1225 | $(OBJDIR)/sha3_.c:$(OBJDIR)/sha3.h \ |
| 1220 | 1226 | $(OBJDIR)/shun_.c:$(OBJDIR)/shun.h \ |
| 1221 | 1227 | $(OBJDIR)/sitemap_.c:$(OBJDIR)/sitemap.h \ |
| 1222 | 1228 | $(OBJDIR)/skins_.c:$(OBJDIR)/skins.h \ |
| 1229 | + $(OBJDIR)/smtp_.c:$(OBJDIR)/smtp.h \ | |
| 1223 | 1230 | $(OBJDIR)/sqlcmd_.c:$(OBJDIR)/sqlcmd.h \ |
| 1224 | 1231 | $(OBJDIR)/stash_.c:$(OBJDIR)/stash.h \ |
| 1225 | 1232 | $(OBJDIR)/stat_.c:$(OBJDIR)/stat.h \ |
| 1226 | 1233 | $(OBJDIR)/statrep_.c:$(OBJDIR)/statrep.h \ |
| 1227 | 1234 | $(OBJDIR)/style_.c:$(OBJDIR)/style.h \ |
| @@ -1240,10 +1247,11 @@ | ||
| 1240 | 1247 | $(OBJDIR)/user_.c:$(OBJDIR)/user.h \ |
| 1241 | 1248 | $(OBJDIR)/utf8_.c:$(OBJDIR)/utf8.h \ |
| 1242 | 1249 | $(OBJDIR)/util_.c:$(OBJDIR)/util.h \ |
| 1243 | 1250 | $(OBJDIR)/verify_.c:$(OBJDIR)/verify.h \ |
| 1244 | 1251 | $(OBJDIR)/vfile_.c:$(OBJDIR)/vfile.h \ |
| 1252 | + $(OBJDIR)/webmail_.c:$(OBJDIR)/webmail.h \ | |
| 1245 | 1253 | $(OBJDIR)/wiki_.c:$(OBJDIR)/wiki.h \ |
| 1246 | 1254 | $(OBJDIR)/wikiformat_.c:$(OBJDIR)/wikiformat.h \ |
| 1247 | 1255 | $(OBJDIR)/winfile_.c:$(OBJDIR)/winfile.h \ |
| 1248 | 1256 | $(OBJDIR)/winhttp_.c:$(OBJDIR)/winhttp.h \ |
| 1249 | 1257 | $(OBJDIR)/wysiwyg_.c:$(OBJDIR)/wysiwyg.h \ |
| @@ -2056,10 +2064,18 @@ | ||
| 2056 | 2064 | |
| 2057 | 2065 | $(OBJDIR)/skins.o: $(OBJDIR)/skins_.c $(OBJDIR)/skins.h $(SRCDIR)/config.h |
| 2058 | 2066 | $(XTCC) -o $(OBJDIR)/skins.o -c $(OBJDIR)/skins_.c |
| 2059 | 2067 | |
| 2060 | 2068 | $(OBJDIR)/skins.h: $(OBJDIR)/headers |
| 2069 | + | |
| 2070 | +$(OBJDIR)/smtp_.c: $(SRCDIR)/smtp.c $(TRANSLATE) | |
| 2071 | + $(TRANSLATE) $(SRCDIR)/smtp.c >$@ | |
| 2072 | + | |
| 2073 | +$(OBJDIR)/smtp.o: $(OBJDIR)/smtp_.c $(OBJDIR)/smtp.h $(SRCDIR)/config.h | |
| 2074 | + $(XTCC) -o $(OBJDIR)/smtp.o -c $(OBJDIR)/smtp_.c | |
| 2075 | + | |
| 2076 | +$(OBJDIR)/smtp.h: $(OBJDIR)/headers | |
| 2061 | 2077 | |
| 2062 | 2078 | $(OBJDIR)/sqlcmd_.c: $(SRCDIR)/sqlcmd.c $(TRANSLATE) |
| 2063 | 2079 | $(TRANSLATE) $(SRCDIR)/sqlcmd.c >$@ |
| 2064 | 2080 | |
| 2065 | 2081 | $(OBJDIR)/sqlcmd.o: $(OBJDIR)/sqlcmd_.c $(OBJDIR)/sqlcmd.h $(SRCDIR)/config.h |
| @@ -2232,10 +2248,18 @@ | ||
| 2232 | 2248 | |
| 2233 | 2249 | $(OBJDIR)/vfile.o: $(OBJDIR)/vfile_.c $(OBJDIR)/vfile.h $(SRCDIR)/config.h |
| 2234 | 2250 | $(XTCC) -o $(OBJDIR)/vfile.o -c $(OBJDIR)/vfile_.c |
| 2235 | 2251 | |
| 2236 | 2252 | $(OBJDIR)/vfile.h: $(OBJDIR)/headers |
| 2253 | + | |
| 2254 | +$(OBJDIR)/webmail_.c: $(SRCDIR)/webmail.c $(TRANSLATE) | |
| 2255 | + $(TRANSLATE) $(SRCDIR)/webmail.c >$@ | |
| 2256 | + | |
| 2257 | +$(OBJDIR)/webmail.o: $(OBJDIR)/webmail_.c $(OBJDIR)/webmail.h $(SRCDIR)/config.h | |
| 2258 | + $(XTCC) -o $(OBJDIR)/webmail.o -c $(OBJDIR)/webmail_.c | |
| 2259 | + | |
| 2260 | +$(OBJDIR)/webmail.h: $(OBJDIR)/headers | |
| 2237 | 2261 | |
| 2238 | 2262 | $(OBJDIR)/wiki_.c: $(SRCDIR)/wiki.c $(TRANSLATE) |
| 2239 | 2263 | $(TRANSLATE) $(SRCDIR)/wiki.c >$@ |
| 2240 | 2264 | |
| 2241 | 2265 | $(OBJDIR)/wiki.o: $(OBJDIR)/wiki_.c $(OBJDIR)/wiki.h $(SRCDIR)/config.h |
| 2242 | 2266 |
| --- win/Makefile.mingw | |
| +++ win/Makefile.mingw | |
| @@ -532,10 +532,11 @@ | |
| 532 | $(SRCDIR)/sha1hard.c \ |
| 533 | $(SRCDIR)/sha3.c \ |
| 534 | $(SRCDIR)/shun.c \ |
| 535 | $(SRCDIR)/sitemap.c \ |
| 536 | $(SRCDIR)/skins.c \ |
| 537 | $(SRCDIR)/sqlcmd.c \ |
| 538 | $(SRCDIR)/stash.c \ |
| 539 | $(SRCDIR)/stat.c \ |
| 540 | $(SRCDIR)/statrep.c \ |
| 541 | $(SRCDIR)/style.c \ |
| @@ -554,10 +555,11 @@ | |
| 554 | $(SRCDIR)/user.c \ |
| 555 | $(SRCDIR)/utf8.c \ |
| 556 | $(SRCDIR)/util.c \ |
| 557 | $(SRCDIR)/verify.c \ |
| 558 | $(SRCDIR)/vfile.c \ |
| 559 | $(SRCDIR)/wiki.c \ |
| 560 | $(SRCDIR)/wikiformat.c \ |
| 561 | $(SRCDIR)/winfile.c \ |
| 562 | $(SRCDIR)/winhttp.c \ |
| 563 | $(SRCDIR)/wysiwyg.c \ |
| @@ -735,10 +737,11 @@ | |
| 735 | $(OBJDIR)/sha1hard_.c \ |
| 736 | $(OBJDIR)/sha3_.c \ |
| 737 | $(OBJDIR)/shun_.c \ |
| 738 | $(OBJDIR)/sitemap_.c \ |
| 739 | $(OBJDIR)/skins_.c \ |
| 740 | $(OBJDIR)/sqlcmd_.c \ |
| 741 | $(OBJDIR)/stash_.c \ |
| 742 | $(OBJDIR)/stat_.c \ |
| 743 | $(OBJDIR)/statrep_.c \ |
| 744 | $(OBJDIR)/style_.c \ |
| @@ -757,10 +760,11 @@ | |
| 757 | $(OBJDIR)/user_.c \ |
| 758 | $(OBJDIR)/utf8_.c \ |
| 759 | $(OBJDIR)/util_.c \ |
| 760 | $(OBJDIR)/verify_.c \ |
| 761 | $(OBJDIR)/vfile_.c \ |
| 762 | $(OBJDIR)/wiki_.c \ |
| 763 | $(OBJDIR)/wikiformat_.c \ |
| 764 | $(OBJDIR)/winfile_.c \ |
| 765 | $(OBJDIR)/winhttp_.c \ |
| 766 | $(OBJDIR)/wysiwyg_.c \ |
| @@ -867,10 +871,11 @@ | |
| 867 | $(OBJDIR)/sha1hard.o \ |
| 868 | $(OBJDIR)/sha3.o \ |
| 869 | $(OBJDIR)/shun.o \ |
| 870 | $(OBJDIR)/sitemap.o \ |
| 871 | $(OBJDIR)/skins.o \ |
| 872 | $(OBJDIR)/sqlcmd.o \ |
| 873 | $(OBJDIR)/stash.o \ |
| 874 | $(OBJDIR)/stat.o \ |
| 875 | $(OBJDIR)/statrep.o \ |
| 876 | $(OBJDIR)/style.o \ |
| @@ -889,10 +894,11 @@ | |
| 889 | $(OBJDIR)/user.o \ |
| 890 | $(OBJDIR)/utf8.o \ |
| 891 | $(OBJDIR)/util.o \ |
| 892 | $(OBJDIR)/verify.o \ |
| 893 | $(OBJDIR)/vfile.o \ |
| 894 | $(OBJDIR)/wiki.o \ |
| 895 | $(OBJDIR)/wikiformat.o \ |
| 896 | $(OBJDIR)/winfile.o \ |
| 897 | $(OBJDIR)/winhttp.o \ |
| 898 | $(OBJDIR)/wysiwyg.o \ |
| @@ -1218,10 +1224,11 @@ | |
| 1218 | $(OBJDIR)/sha1hard_.c:$(OBJDIR)/sha1hard.h \ |
| 1219 | $(OBJDIR)/sha3_.c:$(OBJDIR)/sha3.h \ |
| 1220 | $(OBJDIR)/shun_.c:$(OBJDIR)/shun.h \ |
| 1221 | $(OBJDIR)/sitemap_.c:$(OBJDIR)/sitemap.h \ |
| 1222 | $(OBJDIR)/skins_.c:$(OBJDIR)/skins.h \ |
| 1223 | $(OBJDIR)/sqlcmd_.c:$(OBJDIR)/sqlcmd.h \ |
| 1224 | $(OBJDIR)/stash_.c:$(OBJDIR)/stash.h \ |
| 1225 | $(OBJDIR)/stat_.c:$(OBJDIR)/stat.h \ |
| 1226 | $(OBJDIR)/statrep_.c:$(OBJDIR)/statrep.h \ |
| 1227 | $(OBJDIR)/style_.c:$(OBJDIR)/style.h \ |
| @@ -1240,10 +1247,11 @@ | |
| 1240 | $(OBJDIR)/user_.c:$(OBJDIR)/user.h \ |
| 1241 | $(OBJDIR)/utf8_.c:$(OBJDIR)/utf8.h \ |
| 1242 | $(OBJDIR)/util_.c:$(OBJDIR)/util.h \ |
| 1243 | $(OBJDIR)/verify_.c:$(OBJDIR)/verify.h \ |
| 1244 | $(OBJDIR)/vfile_.c:$(OBJDIR)/vfile.h \ |
| 1245 | $(OBJDIR)/wiki_.c:$(OBJDIR)/wiki.h \ |
| 1246 | $(OBJDIR)/wikiformat_.c:$(OBJDIR)/wikiformat.h \ |
| 1247 | $(OBJDIR)/winfile_.c:$(OBJDIR)/winfile.h \ |
| 1248 | $(OBJDIR)/winhttp_.c:$(OBJDIR)/winhttp.h \ |
| 1249 | $(OBJDIR)/wysiwyg_.c:$(OBJDIR)/wysiwyg.h \ |
| @@ -2056,10 +2064,18 @@ | |
| 2056 | |
| 2057 | $(OBJDIR)/skins.o: $(OBJDIR)/skins_.c $(OBJDIR)/skins.h $(SRCDIR)/config.h |
| 2058 | $(XTCC) -o $(OBJDIR)/skins.o -c $(OBJDIR)/skins_.c |
| 2059 | |
| 2060 | $(OBJDIR)/skins.h: $(OBJDIR)/headers |
| 2061 | |
| 2062 | $(OBJDIR)/sqlcmd_.c: $(SRCDIR)/sqlcmd.c $(TRANSLATE) |
| 2063 | $(TRANSLATE) $(SRCDIR)/sqlcmd.c >$@ |
| 2064 | |
| 2065 | $(OBJDIR)/sqlcmd.o: $(OBJDIR)/sqlcmd_.c $(OBJDIR)/sqlcmd.h $(SRCDIR)/config.h |
| @@ -2232,10 +2248,18 @@ | |
| 2232 | |
| 2233 | $(OBJDIR)/vfile.o: $(OBJDIR)/vfile_.c $(OBJDIR)/vfile.h $(SRCDIR)/config.h |
| 2234 | $(XTCC) -o $(OBJDIR)/vfile.o -c $(OBJDIR)/vfile_.c |
| 2235 | |
| 2236 | $(OBJDIR)/vfile.h: $(OBJDIR)/headers |
| 2237 | |
| 2238 | $(OBJDIR)/wiki_.c: $(SRCDIR)/wiki.c $(TRANSLATE) |
| 2239 | $(TRANSLATE) $(SRCDIR)/wiki.c >$@ |
| 2240 | |
| 2241 | $(OBJDIR)/wiki.o: $(OBJDIR)/wiki_.c $(OBJDIR)/wiki.h $(SRCDIR)/config.h |
| 2242 |
| --- win/Makefile.mingw | |
| +++ win/Makefile.mingw | |
| @@ -532,10 +532,11 @@ | |
| 532 | $(SRCDIR)/sha1hard.c \ |
| 533 | $(SRCDIR)/sha3.c \ |
| 534 | $(SRCDIR)/shun.c \ |
| 535 | $(SRCDIR)/sitemap.c \ |
| 536 | $(SRCDIR)/skins.c \ |
| 537 | $(SRCDIR)/smtp.c \ |
| 538 | $(SRCDIR)/sqlcmd.c \ |
| 539 | $(SRCDIR)/stash.c \ |
| 540 | $(SRCDIR)/stat.c \ |
| 541 | $(SRCDIR)/statrep.c \ |
| 542 | $(SRCDIR)/style.c \ |
| @@ -554,10 +555,11 @@ | |
| 555 | $(SRCDIR)/user.c \ |
| 556 | $(SRCDIR)/utf8.c \ |
| 557 | $(SRCDIR)/util.c \ |
| 558 | $(SRCDIR)/verify.c \ |
| 559 | $(SRCDIR)/vfile.c \ |
| 560 | $(SRCDIR)/webmail.c \ |
| 561 | $(SRCDIR)/wiki.c \ |
| 562 | $(SRCDIR)/wikiformat.c \ |
| 563 | $(SRCDIR)/winfile.c \ |
| 564 | $(SRCDIR)/winhttp.c \ |
| 565 | $(SRCDIR)/wysiwyg.c \ |
| @@ -735,10 +737,11 @@ | |
| 737 | $(OBJDIR)/sha1hard_.c \ |
| 738 | $(OBJDIR)/sha3_.c \ |
| 739 | $(OBJDIR)/shun_.c \ |
| 740 | $(OBJDIR)/sitemap_.c \ |
| 741 | $(OBJDIR)/skins_.c \ |
| 742 | $(OBJDIR)/smtp_.c \ |
| 743 | $(OBJDIR)/sqlcmd_.c \ |
| 744 | $(OBJDIR)/stash_.c \ |
| 745 | $(OBJDIR)/stat_.c \ |
| 746 | $(OBJDIR)/statrep_.c \ |
| 747 | $(OBJDIR)/style_.c \ |
| @@ -757,10 +760,11 @@ | |
| 760 | $(OBJDIR)/user_.c \ |
| 761 | $(OBJDIR)/utf8_.c \ |
| 762 | $(OBJDIR)/util_.c \ |
| 763 | $(OBJDIR)/verify_.c \ |
| 764 | $(OBJDIR)/vfile_.c \ |
| 765 | $(OBJDIR)/webmail_.c \ |
| 766 | $(OBJDIR)/wiki_.c \ |
| 767 | $(OBJDIR)/wikiformat_.c \ |
| 768 | $(OBJDIR)/winfile_.c \ |
| 769 | $(OBJDIR)/winhttp_.c \ |
| 770 | $(OBJDIR)/wysiwyg_.c \ |
| @@ -867,10 +871,11 @@ | |
| 871 | $(OBJDIR)/sha1hard.o \ |
| 872 | $(OBJDIR)/sha3.o \ |
| 873 | $(OBJDIR)/shun.o \ |
| 874 | $(OBJDIR)/sitemap.o \ |
| 875 | $(OBJDIR)/skins.o \ |
| 876 | $(OBJDIR)/smtp.o \ |
| 877 | $(OBJDIR)/sqlcmd.o \ |
| 878 | $(OBJDIR)/stash.o \ |
| 879 | $(OBJDIR)/stat.o \ |
| 880 | $(OBJDIR)/statrep.o \ |
| 881 | $(OBJDIR)/style.o \ |
| @@ -889,10 +894,11 @@ | |
| 894 | $(OBJDIR)/user.o \ |
| 895 | $(OBJDIR)/utf8.o \ |
| 896 | $(OBJDIR)/util.o \ |
| 897 | $(OBJDIR)/verify.o \ |
| 898 | $(OBJDIR)/vfile.o \ |
| 899 | $(OBJDIR)/webmail.o \ |
| 900 | $(OBJDIR)/wiki.o \ |
| 901 | $(OBJDIR)/wikiformat.o \ |
| 902 | $(OBJDIR)/winfile.o \ |
| 903 | $(OBJDIR)/winhttp.o \ |
| 904 | $(OBJDIR)/wysiwyg.o \ |
| @@ -1218,10 +1224,11 @@ | |
| 1224 | $(OBJDIR)/sha1hard_.c:$(OBJDIR)/sha1hard.h \ |
| 1225 | $(OBJDIR)/sha3_.c:$(OBJDIR)/sha3.h \ |
| 1226 | $(OBJDIR)/shun_.c:$(OBJDIR)/shun.h \ |
| 1227 | $(OBJDIR)/sitemap_.c:$(OBJDIR)/sitemap.h \ |
| 1228 | $(OBJDIR)/skins_.c:$(OBJDIR)/skins.h \ |
| 1229 | $(OBJDIR)/smtp_.c:$(OBJDIR)/smtp.h \ |
| 1230 | $(OBJDIR)/sqlcmd_.c:$(OBJDIR)/sqlcmd.h \ |
| 1231 | $(OBJDIR)/stash_.c:$(OBJDIR)/stash.h \ |
| 1232 | $(OBJDIR)/stat_.c:$(OBJDIR)/stat.h \ |
| 1233 | $(OBJDIR)/statrep_.c:$(OBJDIR)/statrep.h \ |
| 1234 | $(OBJDIR)/style_.c:$(OBJDIR)/style.h \ |
| @@ -1240,10 +1247,11 @@ | |
| 1247 | $(OBJDIR)/user_.c:$(OBJDIR)/user.h \ |
| 1248 | $(OBJDIR)/utf8_.c:$(OBJDIR)/utf8.h \ |
| 1249 | $(OBJDIR)/util_.c:$(OBJDIR)/util.h \ |
| 1250 | $(OBJDIR)/verify_.c:$(OBJDIR)/verify.h \ |
| 1251 | $(OBJDIR)/vfile_.c:$(OBJDIR)/vfile.h \ |
| 1252 | $(OBJDIR)/webmail_.c:$(OBJDIR)/webmail.h \ |
| 1253 | $(OBJDIR)/wiki_.c:$(OBJDIR)/wiki.h \ |
| 1254 | $(OBJDIR)/wikiformat_.c:$(OBJDIR)/wikiformat.h \ |
| 1255 | $(OBJDIR)/winfile_.c:$(OBJDIR)/winfile.h \ |
| 1256 | $(OBJDIR)/winhttp_.c:$(OBJDIR)/winhttp.h \ |
| 1257 | $(OBJDIR)/wysiwyg_.c:$(OBJDIR)/wysiwyg.h \ |
| @@ -2056,10 +2064,18 @@ | |
| 2064 | |
| 2065 | $(OBJDIR)/skins.o: $(OBJDIR)/skins_.c $(OBJDIR)/skins.h $(SRCDIR)/config.h |
| 2066 | $(XTCC) -o $(OBJDIR)/skins.o -c $(OBJDIR)/skins_.c |
| 2067 | |
| 2068 | $(OBJDIR)/skins.h: $(OBJDIR)/headers |
| 2069 | |
| 2070 | $(OBJDIR)/smtp_.c: $(SRCDIR)/smtp.c $(TRANSLATE) |
| 2071 | $(TRANSLATE) $(SRCDIR)/smtp.c >$@ |
| 2072 | |
| 2073 | $(OBJDIR)/smtp.o: $(OBJDIR)/smtp_.c $(OBJDIR)/smtp.h $(SRCDIR)/config.h |
| 2074 | $(XTCC) -o $(OBJDIR)/smtp.o -c $(OBJDIR)/smtp_.c |
| 2075 | |
| 2076 | $(OBJDIR)/smtp.h: $(OBJDIR)/headers |
| 2077 | |
| 2078 | $(OBJDIR)/sqlcmd_.c: $(SRCDIR)/sqlcmd.c $(TRANSLATE) |
| 2079 | $(TRANSLATE) $(SRCDIR)/sqlcmd.c >$@ |
| 2080 | |
| 2081 | $(OBJDIR)/sqlcmd.o: $(OBJDIR)/sqlcmd_.c $(OBJDIR)/sqlcmd.h $(SRCDIR)/config.h |
| @@ -2232,10 +2248,18 @@ | |
| 2248 | |
| 2249 | $(OBJDIR)/vfile.o: $(OBJDIR)/vfile_.c $(OBJDIR)/vfile.h $(SRCDIR)/config.h |
| 2250 | $(XTCC) -o $(OBJDIR)/vfile.o -c $(OBJDIR)/vfile_.c |
| 2251 | |
| 2252 | $(OBJDIR)/vfile.h: $(OBJDIR)/headers |
| 2253 | |
| 2254 | $(OBJDIR)/webmail_.c: $(SRCDIR)/webmail.c $(TRANSLATE) |
| 2255 | $(TRANSLATE) $(SRCDIR)/webmail.c >$@ |
| 2256 | |
| 2257 | $(OBJDIR)/webmail.o: $(OBJDIR)/webmail_.c $(OBJDIR)/webmail.h $(SRCDIR)/config.h |
| 2258 | $(XTCC) -o $(OBJDIR)/webmail.o -c $(OBJDIR)/webmail_.c |
| 2259 | |
| 2260 | $(OBJDIR)/webmail.h: $(OBJDIR)/headers |
| 2261 | |
| 2262 | $(OBJDIR)/wiki_.c: $(SRCDIR)/wiki.c $(TRANSLATE) |
| 2263 | $(TRANSLATE) $(SRCDIR)/wiki.c >$@ |
| 2264 | |
| 2265 | $(OBJDIR)/wiki.o: $(OBJDIR)/wiki_.c $(OBJDIR)/wiki.h $(SRCDIR)/config.h |
| 2266 |
+20
| --- win/Makefile.msc | ||
| +++ win/Makefile.msc | ||
| @@ -478,10 +478,11 @@ | ||
| 478 | 478 | sha1hard_.c \ |
| 479 | 479 | sha3_.c \ |
| 480 | 480 | shun_.c \ |
| 481 | 481 | sitemap_.c \ |
| 482 | 482 | skins_.c \ |
| 483 | + smtp_.c \ | |
| 483 | 484 | sqlcmd_.c \ |
| 484 | 485 | stash_.c \ |
| 485 | 486 | stat_.c \ |
| 486 | 487 | statrep_.c \ |
| 487 | 488 | style_.c \ |
| @@ -500,10 +501,11 @@ | ||
| 500 | 501 | user_.c \ |
| 501 | 502 | utf8_.c \ |
| 502 | 503 | util_.c \ |
| 503 | 504 | verify_.c \ |
| 504 | 505 | vfile_.c \ |
| 506 | + webmail_.c \ | |
| 505 | 507 | wiki_.c \ |
| 506 | 508 | wikiformat_.c \ |
| 507 | 509 | winfile_.c \ |
| 508 | 510 | winhttp_.c \ |
| 509 | 511 | wysiwyg_.c \ |
| @@ -681,10 +683,11 @@ | ||
| 681 | 683 | $(OX)\sha3$O \ |
| 682 | 684 | $(OX)\shell$O \ |
| 683 | 685 | $(OX)\shun$O \ |
| 684 | 686 | $(OX)\sitemap$O \ |
| 685 | 687 | $(OX)\skins$O \ |
| 688 | + $(OX)\smtp$O \ | |
| 686 | 689 | $(OX)\sqlcmd$O \ |
| 687 | 690 | $(OX)\sqlite3$O \ |
| 688 | 691 | $(OX)\stash$O \ |
| 689 | 692 | $(OX)\stat$O \ |
| 690 | 693 | $(OX)\statrep$O \ |
| @@ -707,10 +710,11 @@ | ||
| 707 | 710 | $(OX)\user$O \ |
| 708 | 711 | $(OX)\utf8$O \ |
| 709 | 712 | $(OX)\util$O \ |
| 710 | 713 | $(OX)\verify$O \ |
| 711 | 714 | $(OX)\vfile$O \ |
| 715 | + $(OX)\webmail$O \ | |
| 712 | 716 | $(OX)\wiki$O \ |
| 713 | 717 | $(OX)\wikiformat$O \ |
| 714 | 718 | $(OX)\winfile$O \ |
| 715 | 719 | $(OX)\winhttp$O \ |
| 716 | 720 | $(OX)\wysiwyg$O \ |
| @@ -872,10 +876,11 @@ | ||
| 872 | 876 | echo $(OX)\sha3.obj >> $@ |
| 873 | 877 | echo $(OX)\shell.obj >> $@ |
| 874 | 878 | echo $(OX)\shun.obj >> $@ |
| 875 | 879 | echo $(OX)\sitemap.obj >> $@ |
| 876 | 880 | echo $(OX)\skins.obj >> $@ |
| 881 | + echo $(OX)\smtp.obj >> $@ | |
| 877 | 882 | echo $(OX)\sqlcmd.obj >> $@ |
| 878 | 883 | echo $(OX)\sqlite3.obj >> $@ |
| 879 | 884 | echo $(OX)\stash.obj >> $@ |
| 880 | 885 | echo $(OX)\stat.obj >> $@ |
| 881 | 886 | echo $(OX)\statrep.obj >> $@ |
| @@ -898,10 +903,11 @@ | ||
| 898 | 903 | echo $(OX)\user.obj >> $@ |
| 899 | 904 | echo $(OX)\utf8.obj >> $@ |
| 900 | 905 | echo $(OX)\util.obj >> $@ |
| 901 | 906 | echo $(OX)\verify.obj >> $@ |
| 902 | 907 | echo $(OX)\vfile.obj >> $@ |
| 908 | + echo $(OX)\webmail.obj >> $@ | |
| 903 | 909 | echo $(OX)\wiki.obj >> $@ |
| 904 | 910 | echo $(OX)\wikiformat.obj >> $@ |
| 905 | 911 | echo $(OX)\winfile.obj >> $@ |
| 906 | 912 | echo $(OX)\winhttp.obj >> $@ |
| 907 | 913 | echo $(OX)\wysiwyg.obj >> $@ |
| @@ -1623,10 +1629,16 @@ | ||
| 1623 | 1629 | $(OX)\skins$O : skins_.c skins.h |
| 1624 | 1630 | $(TCC) /Fo$@ -c skins_.c |
| 1625 | 1631 | |
| 1626 | 1632 | skins_.c : $(SRCDIR)\skins.c |
| 1627 | 1633 | translate$E $** > $@ |
| 1634 | + | |
| 1635 | +$(OX)\smtp$O : smtp_.c smtp.h | |
| 1636 | + $(TCC) /Fo$@ -c smtp_.c | |
| 1637 | + | |
| 1638 | +smtp_.c : $(SRCDIR)\smtp.c | |
| 1639 | + translate$E $** > $@ | |
| 1628 | 1640 | |
| 1629 | 1641 | $(OX)\sqlcmd$O : sqlcmd_.c sqlcmd.h |
| 1630 | 1642 | $(TCC) /Fo$@ -c sqlcmd_.c |
| 1631 | 1643 | |
| 1632 | 1644 | sqlcmd_.c : $(SRCDIR)\sqlcmd.c |
| @@ -1755,10 +1767,16 @@ | ||
| 1755 | 1767 | $(OX)\vfile$O : vfile_.c vfile.h |
| 1756 | 1768 | $(TCC) /Fo$@ -c vfile_.c |
| 1757 | 1769 | |
| 1758 | 1770 | vfile_.c : $(SRCDIR)\vfile.c |
| 1759 | 1771 | translate$E $** > $@ |
| 1772 | + | |
| 1773 | +$(OX)\webmail$O : webmail_.c webmail.h | |
| 1774 | + $(TCC) /Fo$@ -c webmail_.c | |
| 1775 | + | |
| 1776 | +webmail_.c : $(SRCDIR)\webmail.c | |
| 1777 | + translate$E $** > $@ | |
| 1760 | 1778 | |
| 1761 | 1779 | $(OX)\wiki$O : wiki_.c wiki.h |
| 1762 | 1780 | $(TCC) /Fo$@ -c wiki_.c |
| 1763 | 1781 | |
| 1764 | 1782 | wiki_.c : $(SRCDIR)\wiki.c |
| @@ -1908,10 +1926,11 @@ | ||
| 1908 | 1926 | sha1hard_.c:sha1hard.h \ |
| 1909 | 1927 | sha3_.c:sha3.h \ |
| 1910 | 1928 | shun_.c:shun.h \ |
| 1911 | 1929 | sitemap_.c:sitemap.h \ |
| 1912 | 1930 | skins_.c:skins.h \ |
| 1931 | + smtp_.c:smtp.h \ | |
| 1913 | 1932 | sqlcmd_.c:sqlcmd.h \ |
| 1914 | 1933 | stash_.c:stash.h \ |
| 1915 | 1934 | stat_.c:stat.h \ |
| 1916 | 1935 | statrep_.c:statrep.h \ |
| 1917 | 1936 | style_.c:style.h \ |
| @@ -1930,10 +1949,11 @@ | ||
| 1930 | 1949 | user_.c:user.h \ |
| 1931 | 1950 | utf8_.c:utf8.h \ |
| 1932 | 1951 | util_.c:util.h \ |
| 1933 | 1952 | verify_.c:verify.h \ |
| 1934 | 1953 | vfile_.c:vfile.h \ |
| 1954 | + webmail_.c:webmail.h \ | |
| 1935 | 1955 | wiki_.c:wiki.h \ |
| 1936 | 1956 | wikiformat_.c:wikiformat.h \ |
| 1937 | 1957 | winfile_.c:winfile.h \ |
| 1938 | 1958 | winhttp_.c:winhttp.h \ |
| 1939 | 1959 | wysiwyg_.c:wysiwyg.h \ |
| 1940 | 1960 |
| --- win/Makefile.msc | |
| +++ win/Makefile.msc | |
| @@ -478,10 +478,11 @@ | |
| 478 | sha1hard_.c \ |
| 479 | sha3_.c \ |
| 480 | shun_.c \ |
| 481 | sitemap_.c \ |
| 482 | skins_.c \ |
| 483 | sqlcmd_.c \ |
| 484 | stash_.c \ |
| 485 | stat_.c \ |
| 486 | statrep_.c \ |
| 487 | style_.c \ |
| @@ -500,10 +501,11 @@ | |
| 500 | user_.c \ |
| 501 | utf8_.c \ |
| 502 | util_.c \ |
| 503 | verify_.c \ |
| 504 | vfile_.c \ |
| 505 | wiki_.c \ |
| 506 | wikiformat_.c \ |
| 507 | winfile_.c \ |
| 508 | winhttp_.c \ |
| 509 | wysiwyg_.c \ |
| @@ -681,10 +683,11 @@ | |
| 681 | $(OX)\sha3$O \ |
| 682 | $(OX)\shell$O \ |
| 683 | $(OX)\shun$O \ |
| 684 | $(OX)\sitemap$O \ |
| 685 | $(OX)\skins$O \ |
| 686 | $(OX)\sqlcmd$O \ |
| 687 | $(OX)\sqlite3$O \ |
| 688 | $(OX)\stash$O \ |
| 689 | $(OX)\stat$O \ |
| 690 | $(OX)\statrep$O \ |
| @@ -707,10 +710,11 @@ | |
| 707 | $(OX)\user$O \ |
| 708 | $(OX)\utf8$O \ |
| 709 | $(OX)\util$O \ |
| 710 | $(OX)\verify$O \ |
| 711 | $(OX)\vfile$O \ |
| 712 | $(OX)\wiki$O \ |
| 713 | $(OX)\wikiformat$O \ |
| 714 | $(OX)\winfile$O \ |
| 715 | $(OX)\winhttp$O \ |
| 716 | $(OX)\wysiwyg$O \ |
| @@ -872,10 +876,11 @@ | |
| 872 | echo $(OX)\sha3.obj >> $@ |
| 873 | echo $(OX)\shell.obj >> $@ |
| 874 | echo $(OX)\shun.obj >> $@ |
| 875 | echo $(OX)\sitemap.obj >> $@ |
| 876 | echo $(OX)\skins.obj >> $@ |
| 877 | echo $(OX)\sqlcmd.obj >> $@ |
| 878 | echo $(OX)\sqlite3.obj >> $@ |
| 879 | echo $(OX)\stash.obj >> $@ |
| 880 | echo $(OX)\stat.obj >> $@ |
| 881 | echo $(OX)\statrep.obj >> $@ |
| @@ -898,10 +903,11 @@ | |
| 898 | echo $(OX)\user.obj >> $@ |
| 899 | echo $(OX)\utf8.obj >> $@ |
| 900 | echo $(OX)\util.obj >> $@ |
| 901 | echo $(OX)\verify.obj >> $@ |
| 902 | echo $(OX)\vfile.obj >> $@ |
| 903 | echo $(OX)\wiki.obj >> $@ |
| 904 | echo $(OX)\wikiformat.obj >> $@ |
| 905 | echo $(OX)\winfile.obj >> $@ |
| 906 | echo $(OX)\winhttp.obj >> $@ |
| 907 | echo $(OX)\wysiwyg.obj >> $@ |
| @@ -1623,10 +1629,16 @@ | |
| 1623 | $(OX)\skins$O : skins_.c skins.h |
| 1624 | $(TCC) /Fo$@ -c skins_.c |
| 1625 | |
| 1626 | skins_.c : $(SRCDIR)\skins.c |
| 1627 | translate$E $** > $@ |
| 1628 | |
| 1629 | $(OX)\sqlcmd$O : sqlcmd_.c sqlcmd.h |
| 1630 | $(TCC) /Fo$@ -c sqlcmd_.c |
| 1631 | |
| 1632 | sqlcmd_.c : $(SRCDIR)\sqlcmd.c |
| @@ -1755,10 +1767,16 @@ | |
| 1755 | $(OX)\vfile$O : vfile_.c vfile.h |
| 1756 | $(TCC) /Fo$@ -c vfile_.c |
| 1757 | |
| 1758 | vfile_.c : $(SRCDIR)\vfile.c |
| 1759 | translate$E $** > $@ |
| 1760 | |
| 1761 | $(OX)\wiki$O : wiki_.c wiki.h |
| 1762 | $(TCC) /Fo$@ -c wiki_.c |
| 1763 | |
| 1764 | wiki_.c : $(SRCDIR)\wiki.c |
| @@ -1908,10 +1926,11 @@ | |
| 1908 | sha1hard_.c:sha1hard.h \ |
| 1909 | sha3_.c:sha3.h \ |
| 1910 | shun_.c:shun.h \ |
| 1911 | sitemap_.c:sitemap.h \ |
| 1912 | skins_.c:skins.h \ |
| 1913 | sqlcmd_.c:sqlcmd.h \ |
| 1914 | stash_.c:stash.h \ |
| 1915 | stat_.c:stat.h \ |
| 1916 | statrep_.c:statrep.h \ |
| 1917 | style_.c:style.h \ |
| @@ -1930,10 +1949,11 @@ | |
| 1930 | user_.c:user.h \ |
| 1931 | utf8_.c:utf8.h \ |
| 1932 | util_.c:util.h \ |
| 1933 | verify_.c:verify.h \ |
| 1934 | vfile_.c:vfile.h \ |
| 1935 | wiki_.c:wiki.h \ |
| 1936 | wikiformat_.c:wikiformat.h \ |
| 1937 | winfile_.c:winfile.h \ |
| 1938 | winhttp_.c:winhttp.h \ |
| 1939 | wysiwyg_.c:wysiwyg.h \ |
| 1940 |
| --- win/Makefile.msc | |
| +++ win/Makefile.msc | |
| @@ -478,10 +478,11 @@ | |
| 478 | sha1hard_.c \ |
| 479 | sha3_.c \ |
| 480 | shun_.c \ |
| 481 | sitemap_.c \ |
| 482 | skins_.c \ |
| 483 | smtp_.c \ |
| 484 | sqlcmd_.c \ |
| 485 | stash_.c \ |
| 486 | stat_.c \ |
| 487 | statrep_.c \ |
| 488 | style_.c \ |
| @@ -500,10 +501,11 @@ | |
| 501 | user_.c \ |
| 502 | utf8_.c \ |
| 503 | util_.c \ |
| 504 | verify_.c \ |
| 505 | vfile_.c \ |
| 506 | webmail_.c \ |
| 507 | wiki_.c \ |
| 508 | wikiformat_.c \ |
| 509 | winfile_.c \ |
| 510 | winhttp_.c \ |
| 511 | wysiwyg_.c \ |
| @@ -681,10 +683,11 @@ | |
| 683 | $(OX)\sha3$O \ |
| 684 | $(OX)\shell$O \ |
| 685 | $(OX)\shun$O \ |
| 686 | $(OX)\sitemap$O \ |
| 687 | $(OX)\skins$O \ |
| 688 | $(OX)\smtp$O \ |
| 689 | $(OX)\sqlcmd$O \ |
| 690 | $(OX)\sqlite3$O \ |
| 691 | $(OX)\stash$O \ |
| 692 | $(OX)\stat$O \ |
| 693 | $(OX)\statrep$O \ |
| @@ -707,10 +710,11 @@ | |
| 710 | $(OX)\user$O \ |
| 711 | $(OX)\utf8$O \ |
| 712 | $(OX)\util$O \ |
| 713 | $(OX)\verify$O \ |
| 714 | $(OX)\vfile$O \ |
| 715 | $(OX)\webmail$O \ |
| 716 | $(OX)\wiki$O \ |
| 717 | $(OX)\wikiformat$O \ |
| 718 | $(OX)\winfile$O \ |
| 719 | $(OX)\winhttp$O \ |
| 720 | $(OX)\wysiwyg$O \ |
| @@ -872,10 +876,11 @@ | |
| 876 | echo $(OX)\sha3.obj >> $@ |
| 877 | echo $(OX)\shell.obj >> $@ |
| 878 | echo $(OX)\shun.obj >> $@ |
| 879 | echo $(OX)\sitemap.obj >> $@ |
| 880 | echo $(OX)\skins.obj >> $@ |
| 881 | echo $(OX)\smtp.obj >> $@ |
| 882 | echo $(OX)\sqlcmd.obj >> $@ |
| 883 | echo $(OX)\sqlite3.obj >> $@ |
| 884 | echo $(OX)\stash.obj >> $@ |
| 885 | echo $(OX)\stat.obj >> $@ |
| 886 | echo $(OX)\statrep.obj >> $@ |
| @@ -898,10 +903,11 @@ | |
| 903 | echo $(OX)\user.obj >> $@ |
| 904 | echo $(OX)\utf8.obj >> $@ |
| 905 | echo $(OX)\util.obj >> $@ |
| 906 | echo $(OX)\verify.obj >> $@ |
| 907 | echo $(OX)\vfile.obj >> $@ |
| 908 | echo $(OX)\webmail.obj >> $@ |
| 909 | echo $(OX)\wiki.obj >> $@ |
| 910 | echo $(OX)\wikiformat.obj >> $@ |
| 911 | echo $(OX)\winfile.obj >> $@ |
| 912 | echo $(OX)\winhttp.obj >> $@ |
| 913 | echo $(OX)\wysiwyg.obj >> $@ |
| @@ -1623,10 +1629,16 @@ | |
| 1629 | $(OX)\skins$O : skins_.c skins.h |
| 1630 | $(TCC) /Fo$@ -c skins_.c |
| 1631 | |
| 1632 | skins_.c : $(SRCDIR)\skins.c |
| 1633 | translate$E $** > $@ |
| 1634 | |
| 1635 | $(OX)\smtp$O : smtp_.c smtp.h |
| 1636 | $(TCC) /Fo$@ -c smtp_.c |
| 1637 | |
| 1638 | smtp_.c : $(SRCDIR)\smtp.c |
| 1639 | translate$E $** > $@ |
| 1640 | |
| 1641 | $(OX)\sqlcmd$O : sqlcmd_.c sqlcmd.h |
| 1642 | $(TCC) /Fo$@ -c sqlcmd_.c |
| 1643 | |
| 1644 | sqlcmd_.c : $(SRCDIR)\sqlcmd.c |
| @@ -1755,10 +1767,16 @@ | |
| 1767 | $(OX)\vfile$O : vfile_.c vfile.h |
| 1768 | $(TCC) /Fo$@ -c vfile_.c |
| 1769 | |
| 1770 | vfile_.c : $(SRCDIR)\vfile.c |
| 1771 | translate$E $** > $@ |
| 1772 | |
| 1773 | $(OX)\webmail$O : webmail_.c webmail.h |
| 1774 | $(TCC) /Fo$@ -c webmail_.c |
| 1775 | |
| 1776 | webmail_.c : $(SRCDIR)\webmail.c |
| 1777 | translate$E $** > $@ |
| 1778 | |
| 1779 | $(OX)\wiki$O : wiki_.c wiki.h |
| 1780 | $(TCC) /Fo$@ -c wiki_.c |
| 1781 | |
| 1782 | wiki_.c : $(SRCDIR)\wiki.c |
| @@ -1908,10 +1926,11 @@ | |
| 1926 | sha1hard_.c:sha1hard.h \ |
| 1927 | sha3_.c:sha3.h \ |
| 1928 | shun_.c:shun.h \ |
| 1929 | sitemap_.c:sitemap.h \ |
| 1930 | skins_.c:skins.h \ |
| 1931 | smtp_.c:smtp.h \ |
| 1932 | sqlcmd_.c:sqlcmd.h \ |
| 1933 | stash_.c:stash.h \ |
| 1934 | stat_.c:stat.h \ |
| 1935 | statrep_.c:statrep.h \ |
| 1936 | style_.c:style.h \ |
| @@ -1930,10 +1949,11 @@ | |
| 1949 | user_.c:user.h \ |
| 1950 | utf8_.c:utf8.h \ |
| 1951 | util_.c:util.h \ |
| 1952 | verify_.c:verify.h \ |
| 1953 | vfile_.c:vfile.h \ |
| 1954 | webmail_.c:webmail.h \ |
| 1955 | wiki_.c:wiki.h \ |
| 1956 | wikiformat_.c:wikiformat.h \ |
| 1957 | winfile_.c:winfile.h \ |
| 1958 | winhttp_.c:winhttp.h \ |
| 1959 | wysiwyg_.c:wysiwyg.h \ |
| 1960 |