Thunderbird:Backend Hacking Guide For Newbies: Difference between revisions

Change Pastebin into link
(Change Pastebin into link)
 
(34 intermediate revisions by 5 users not shown)
Line 23: Line 23:
* [http://developer.mozilla.org/en/docs/Build_Documentation#Build_prerequisites Others]
* [http://developer.mozilla.org/en/docs/Build_Documentation#Build_prerequisites Others]


If you wish to build the palm sync extension, you will need to install the [https://www.developerpavilion.com/palmos/page.asp?page_id=365&tool_id=14 Palm CDK] (requires free registration).
If you wish to build the palm sync extension, you will need to install the [https://www.developerpavilion.com/palmos/page.asp?page_id=365&tool_id=14 Palm CDK] (requires free registration).  And BUILD_PALMSYNC=1 and PALM_CDK_DIR=c:/PALMCDK403 env vars. (do not use PALM CDK v6)  [http://tomfrauenhofer.com/wordpress/?p=4 Building Palm OS Conduits with CDK 4.0.3 and VS 2005] may also have useful info.


==== Debuggers ====
==== Debuggers ====
Line 29: Line 29:
* gdb (Linux, Mac OS X)
* gdb (Linux, Mac OS X)
* ??
* ??
==== Bug Tracking (and More) ====
==== Bug Filing/Tracking/Fixing  ====


''Note: Bugzilla is where people who don't even build / debug can contribute, so this should be at the top of the list. [[User:Nth10sd|nth10sd]] 11:13, 17 April 2008 (PDT)''
''Note: Bugzilla is where people who don't even build / debug can contribute, so this should be at the top of the list. [[User:Nth10sd|nth10sd]] 11:13, 17 April 2008 (PDT)''
Line 35: Line 35:
In Mozilla development process 'bug' is a broader term than its conventional meaning which is software defect. A bug means '''anything''' related to the product and the development process including feature requests, performance improvements and even process improvements. You can file a bug about almost anything that you think that would contribute to the success of the project.
In Mozilla development process 'bug' is a broader term than its conventional meaning which is software defect. A bug means '''anything''' related to the product and the development process including feature requests, performance improvements and even process improvements. You can file a bug about almost anything that you think that would contribute to the success of the project.


* [http://developer.mozilla.org/en/docs/Bug_writing_guidelines Bug Writing Guidelines]
* [https://bugzilla.mozilla.org/ Bugzilla Page]
* [https://bugzilla.mozilla.org/ Bugzilla Page]


Line 41: Line 42:
* [http://wiki.mozilla.org/Thunderbird:Bug_Triage#Triage_Resources.2C_Tools_and_Hints Thunderbird Bug Triage]
* [http://wiki.mozilla.org/Thunderbird:Bug_Triage#Triage_Resources.2C_Tools_and_Hints Thunderbird Bug Triage]
* [http://wiki.mozilla.org/Thunderbird:Bugdays Thunderbird Bugday]
* [http://wiki.mozilla.org/Thunderbird:Bugdays Thunderbird Bugday]
''Note to author: Add a starting to bug fixing section. Mention best practices, keywords, how to search etc.. Look IRC transcripts dated Apr  30th. Things to talk about; what are keywords how to use them, what are products and components, etc...''


==== Source Control Management ====
==== Source Control Management ====
Line 48: Line 51:
* Patch
* Patch
==== Collaboration ====
==== Collaboration ====
* Pastebin <link>
* [https://wiki.mozilla.org/Education/Collaboration/IRC#Using_pastebin.mozilla.org Pastebin]
==== Build Automation ====
==== Build Automation ====
* [http://tinderbox.mozilla.org/Thunderbird/ Thunderbird Tinderbox]
* [http://tinderbox.mozilla.org/Thunderbird/ Thunderbird Tinderbox]
Line 66: Line 69:


* [http://www.mozilla.org/MPL/ Licensing]
* [http://www.mozilla.org/MPL/ Licensing]
* [http://www.mozilla.org/projects/toolkit/review.html Toolkit Review Policy]
* [http://www.mozilla.org/hacking/code-review-faq.html Gecko Code Reviews]


=== Getting the Source ===
=== Getting the Source ===
Line 77: Line 82:


=== Building the Code ===
=== Building the Code ===
''Folder hierarchy and meaning (public, src, main folders -- mailnews, mail, xpcom, etc..)''
<link>
<link>


=== Important Components of Mozilla Framework ===
=== Mozilla Framework Libraries used by Thunderbird ===
==== PL ====
==== PL ====
  What is PL? How it is different than platform's C runtime, Secure C functions, etc...
  What is PL? How it is different than platform's C runtime, Secure C functions, etc...
==== NSPR ====  
==== NSPR ====  
NSPR is a cross-platform framework to provide Mozilla application with OS-agnostic facilities such as threading, I/O operations, networking, logging and more. It is crucial for a Mozilla C/C++ hacker to be familiar with this framework in order to work with Thunderbird backend.
NSPR is a cross-platform library to provide Mozilla application with OS-agnostic facilities such as threading, I/O operations, networking, logging and more. It is crucial for a Mozilla C/C++ hacker to be familiar with this library in order to work with Thunderbird backend.


Although NSPR documentation is not up-to-date, still it is a very good starting point before you go and check the source code. You can find NSPR documentation at the following links.
Although NSPR documentation is not up-to-date, still it is a very good starting point before you go and check the source code. You can find NSPR documentation at the following links.
Line 89: Line 96:
* [http://www.mozilla.org/projects/nspr/ The Netscape Portable Runtime Page]
* [http://www.mozilla.org/projects/nspr/ The Netscape Portable Runtime Page]
* [http://www.mozilla.org/projects/nspr/reference/html/index.html The Netscape Portable Runtime Reference]
* [http://www.mozilla.org/projects/nspr/reference/html/index.html The Netscape Portable Runtime Reference]
==== PSM / NSS ====
Personal Security Manager (PSM) consists of a set of libraries that perform cryptographic operations on behalf of a client application. These operations include setting up an SSL connection, object signing and signature verification, certificate management (including issuance and revocation), and other common PKI functions.
* [http://www.mozilla.org/projects/security/pki/psm/ PSM Home Page]
NSS provides a complete open-source implementation of the crypto libraries used by AOL, Red Hat, Sun, and other companies in a variety of products.
* [http://www.mozilla.org/projects/security/pki/nss/ NSS Home Page]
==== libMime ====
short introduction
==== XPCOM ====
XPCOM is Mozilla's simplified cross-platform component object model.
''IDL firebot: uuid, <link>''
* [http://developer.mozilla.org/en/docs/Using_nsCOMPtr Using nsCOMPtr]
* Reference Management
** [http://developer.mozilla.org/en/docs/XPCOM_ownership_guidelines Ownership Guide]
** [http://developer.mozilla.org/en/docs/Weak_reference#Why_can.27t_I_just_QueryInterface_between_the_pair.3F Weak References]
* [http://developer.mozilla.org/en/docs/Creating_XPCOM_Components Creating XPCOM Components]
* [http://developer.mozilla.org/en/docs/XPCOM_string_guide XPCOM string guide]
* [http://www.xulplanet.com/references/xpcomref XPCOM Reference]


==== NECKO ====
==== NECKO ====
Line 107: Line 137:
* IRC - irc://irc.mozilla.org/#mozilla
* IRC - irc://irc.mozilla.org/#mozilla


==== XPCOM ====
==== GECKO ====
XPCOM is Mozilla's simplified cross-platform component object model.
What is Gecko
''IDL firebot: uuid, <link>''
* [http://developer.mozilla.org/en/docs/Using_nsCOMPtr Using nsCOMPtr]
* Reference Management
** [http://developer.mozilla.org/en/docs/XPCOM_ownership_guidelines Ownership Guide]
** [http://developer.mozilla.org/en/docs/Weak_reference#Why_can.27t_I_just_QueryInterface_between_the_pair.3F Weak References]
* [http://developer.mozilla.org/en/docs/Creating_XPCOM_Components Creating XPCOM Components]
* [http://developer.mozilla.org/en/docs/XPCOM_string_guide XPCOM string guide]


==== XUL ====
==== XUL ====
  What is XUL
  What is XUL  
 
* [http://www.xulplanet.com XUL Planet]
* [http://ted.mielczarek.org/code/mozilla/xuledit/xuledit.xul Online XUL editor from Ted Mielczarek]


=== Best Practices ===
=== Best Practices ===
Line 127: Line 153:
==== Assertions ====
==== Assertions ====
....
....
==== Understand how to log, trace etc. ====
==== Logging/Tracing Thunderbird ====


* [[Performance:Leak_Tools]]
See [[MailNews:Logging]] for how to do general NSPR logging in MailNews. Note that there are many more logging options/protocols in the core code, search for [http://mxr.mozilla.org/seamonkey/search?string=PR_NewLogModule PR_NewLogModule] to find them.
* [http://developer.mozilla.org/en/docs/Debugging_memory_leaks Debugging Memory Leaks]
 
* [[QA:Home_Page:Firefox_3.0_TestPlan:Leaks:LeakTesting-How-To]]
* Misc
* [http://www.mozilla.org/quality/mailnews/mail-troubleshoot.html Mail Logging/Troubleshotting]
** [[Performance:Leak_Tools]]
* [[Mailnews:LDAP Address Books|LDAP Protocol Logging]]
** [http://developer.mozilla.org/en/docs/Debugging_memory_leaks Debugging Memory Leaks]
...
** [[QA:Home_Page:Firefox_3.0_TestPlan:Leaks:LeakTesting-How-To]]


==== Understanding threading, Proxy etc.. !!! ====
==== Understanding threading, Proxy etc.. !!! ====
Line 140: Line 166:
==== Unit Testing (TUnit, cppUnit etc..) ====
==== Unit Testing (TUnit, cppUnit etc..) ====


* [[MailNews:Performance_Testing]]
* [https://developer.mozilla.org/en/MailNews/MailNews_Automated_Testing MailNews Automated Testing]
* [http://developer.mozilla.org/en/docs/Mozilla_automated_testing Mozilla Automated Testing]
* [http://developer.mozilla.org/en/docs/Mozilla_automated_testing Mozilla Automated Testing]
* [[MailNews:Performance_Testing]]


....
....
Line 170: Line 197:
* ...  
* ...  


=== Components of Thunderbird ===  
=== Major Thunderbird Entities ===
* MIME
* [http://doxygen.db48x.net/mozilla/html/classes.html Thunderbird class diagrams]
* IMAP
* [http://wiki.mozilla.org/User:Emre/tb/architecture/diagrams Architectural overview]
* [[MailNews:Address Book|Address Book]]
* ...
 
[[category:Thunderbird|*]]
Confirmed users
52

edits