Difference between revisions of "Development:Building:Mozilla 1.9.2 Branch"

From Camino Wiki
Jump to navigation Jump to search
(→‎Preparing to Build: Tools: use $ for prompt all over)
(→‎Development: add hgignore for mozilla repos, no more configure-hacking for adding stuff)
Line 124: Line 124:
 
However, if you’ve edited the source files for certain files that are generated during the build process (e.g., the <code>.in</code> files for <code>.strings</code> files,  <code>all-camino.js</code>, or the <code>Makefile</code>) or any of the <code>embed.jar</code> overrides, you will need to rebuild using the command line: <code>cd $OBJDIR/camino; make</code>
 
However, if you’ve edited the source files for certain files that are generated during the build process (e.g., the <code>.in</code> files for <code>.strings</code> files,  <code>all-camino.js</code>, or the <code>Makefile</code>) or any of the <code>embed.jar</code> overrides, you will need to rebuild using the command line: <code>cd $OBJDIR/camino; make</code>
  
===Widget code===
+
===Mozilla code===
'''XXX'''  also want to mention the hgignore-camino for moz
+
Unlike Camino code, nearly all Mozilla code is build with Makefiles, so there are no project files to ease development integration, and as a consequence you must open files manually in Xcode or your favorite editor.
  
If you've edited the Cocoa widget code, you can <code>make</code> in <code>$OBJDIR/widget/src/cocoa</code> to rebuild the widget library with your changes and then copy the new version of the widget library into your build.  
+
====Setting up a Camino-specific <code>.hgignore</code> file for the Mozilla repository====
 +
If you plan to work on Mozilla code, you’ll want to add a repository-specific <code>.hgignore</code> file for the Mozilla repository, so that Camino files do not show up as unknown when running Mercurial commands in the Mozilla repository.
  
The easiest way to get the new version of the library into Camino to test it is to use <code>cp</code> to copy it into the Camino application package (into <code>$OBJDIR/camino/build/Development/Camino.app/Contents/MacOS/components</code>). (This tactic does not work for static builds, which is why they are not recommended for development.) As an alternative, you can <code>make</code> in <code>$OBJDIR/embedding/config</code> and <code>$OBJDIR/camino</code> again.
+
To do this, edit the <code>mozilla/.hg/hgrc</code> file and add the following lines:
  
===Other changes===
+
<pre>[ui]
 +
ignore = ~/.hgignore-mozcamino</pre>
 +
 
 +
Then, in your favorite text editor, make a new plain-text file in your home directory named <code>.hgignore-mozcamino</code> with the following lines:
 +
 
 +
<pre># Make mozilla-{central|1.9.2} ignore camino
 +
^camino</pre>
 +
 
 +
====Widget code====
 +
If you’ve edited the Cocoa widget code, you can <code>make</code> in <code>$OBJDIR/widget/src/cocoa</code> to rebuild the widget library with your changes and then copy the new version of the widget library into your build.
 +
 
 +
The easiest way to get the new version of the library into Camino to test it is to use <code>cp</code> to copy it into the Camino application package (into <code>$OBJDIR/camino/build/Development/Camino.app/Contents/MacOS/components</code>). (This tactic does not work for static builds, which is why they are not recommended for development.) As an alternative, you can <code>make</code> in <code>$OBJDIR/camino</code> again.
 +
 
 +
====Other changes====
 
If you've changed anything outside the <code>camino</code> directory (aside from widget code &mdash; see above), you cannot build from inside Xcode, and will need to <code>make -f client.mk</code> from the <code>mozilla</code> directory (or <code>make</code> from the root of your OBJDIR, if you're using an OBJDIR as recommended by the sample development <code>.mozconfig</code> above).
 
If you've changed anything outside the <code>camino</code> directory (aside from widget code &mdash; see above), you cannot build from inside Xcode, and will need to <code>make -f client.mk</code> from the <code>mozilla</code> directory (or <code>make</code> from the root of your OBJDIR, if you're using an OBJDIR as recommended by the sample development <code>.mozconfig</code> above).
  
 
===Updating the source and rebuilding===
 
===Updating the source and rebuilding===
 
Since the Mozilla core (Gecko) and Camino code are always under constant development, you will periodically want to update your source tree to stay current and to make sure your code will not conflict with any changes that have happened since you began working.  (You will always want to make sure your tree is current before beginning work on the code and before submitting a patch for review.)
 
Since the Mozilla core (Gecko) and Camino code are always under constant development, you will periodically want to update your source tree to stay current and to make sure your code will not conflict with any changes that have happened since you began working.  (You will always want to make sure your tree is current before beginning work on the code and before submitting a patch for review.)
         <p>Before updating your tree, visit the [http://tinderbox.mozilla.org/showbuilds.cgi?tree=Camino Tinderbox] and make sure that the columns whose headings end in “Cm2-M1.9” and “CmTrunk” are green (these are the Camino trunk builds).  Then <code>cd</code> to your <code>mozilla</code> directory and run the following commands '''to update and rebuild your entire tree''':<br />
+
         <p>Before updating your tree, visit the [http://tinderbox.mozilla.org/showbuilds.cgi?tree=Camino Tinderbox] and make sure that the columns whose headings end in “Cm2.1-M1.9.2” <!--and “CmTrunk”--> are green <!--(these are the Camino trunk builds)-->.  Then <code>cd</code> to your <code>mozilla</code> directory and run the following commands:<br />
<code>$ make -f client.mk</code><br />
+
<code>$ hg pull -u</code><br />
(To pull updated source files for the entire tree without rebuilding, substitute <code>$ make -f client.mk checkout</code> for the second command, and then <code>make</code> as usual when you are ready to build.)<br /><br />
+
<code>$ cd camino</code><br />
 +
<code>$ hg pull -u</code><br />
 +
Then, to rebuild Gecko and Camino:<br />
 +
<code>$ cd ..</code><br />
 +
<code>$ make -f client.mk build</code><br /><br />
 +
 
 
It's possible in most cases to update only Camino code (unless Gecko changes have made changes to Camino code), but it is still recommended that you update your entire tree regularly.  '''To update only the Camino code''', <code>cd</code> to your <code>mozilla/camino</code> directory and run the following commands:<br />
 
It's possible in most cases to update only Camino code (unless Gecko changes have made changes to Camino code), but it is still recommended that you update your entire tree regularly.  '''To update only the Camino code''', <code>cd</code> to your <code>mozilla/camino</code> directory and run the following commands:<br />
<code>$ cvs update -dP</code><br />
+
<code>$ hg pull -u</code><br />
 
<code>$ make</code><br /><br />
 
<code>$ make</code><br /><br />
For OBJDIR builds used by most developers, replace <code>make</code> with <code>cd ../../{OBJDIR}/camino; make</code> (the sample development <code>.mozconfig</code> above specifies an OBJDIR by default).  Note that in OBJDIR builds, you '''must''' run <code>make</code> from the command line after a <code>cvs update</code> that pulls certain types of changes, including project changes and changes to any <code>.strings</code> file, since updated versions of these files are copied into the OBJDIR or regenerated by Makefile targets.</p>
+
For OBJDIR builds used by most developers, replace <code>make</code> with <code>cd ../../{OBJDIR}/camino; make</code> (the sample development <code>.mozconfig</code> above specifies an OBJDIR by default).  Note that in OBJDIR builds, you '''must''' run <code>make</code> from the command line after a <code>hg pull -u</code> that pulls certain types of changes, including project changes and changes to any <code>.strings</code> file, since updated versions of these files are copied into the OBJDIR or regenerated by Makefile targets.</p>
 
 
===Hacking <code>configure</code>===
 
 
 
On rare occasions you may need to hack a <code>[http://developer.mozilla.org/en/docs/configure.in configure]</code> script to make Camino build a new Gecko extension (<code>mozilla/extensions/foo</code>) or some other configurable part of the build.  To do this, you have to patch <code>configure.in</code> and then regenerate your local <code>configure</code> to test the build with your changes.
 
 
 
To do this, you need <code>[[#Installing libIDL|autoconf-2.13]]</code> (the version of <code>autoconf</code> that ships with all Mac OS X developer tools will not work).  After you install <code>autoconf-2.13</code>, you regenerate <code>configure</code> simply by <code>cd mozilla</code> and <code>autoconf213</code>.  Then rebuild your tree as usual.
 
  
 
===Packaging a build for testing===
 
===Packaging a build for testing===

Revision as of 17:05, 26 March 2010

DRAFT
This page is not complete.

If you have comments or suggestions, please add them to the Discussion page.


The purpose of this page is to guide you through building and running Camino®. Camino is a stand-alone web browser powered by the Gecko rendering engine. It shouldn't be confused with CHBrowserView, which is just one piece of Camino. If you are new to Camino development, please see our developer introduction for an overview of project conventions and the tools you'll need.

These instructions assume that you are familiar with basic UNIX command-line functionality, such as cd and mkdir. For an introduction to the UNIX command line, please see this tutorial.

Preparing to Build: Tools

Mac OS X 10.4.10 and Xcode 2.4.1 or later are now required for building Camino (Xcode 2.5 on Mac OS X 10.4.11 or Xcode 3 on Mac OS X 10.5.1 are recommended). Xcode is included on a separate disk with the purchase of a new Mac, and the latest version is always available as a free download from Apple Developer Connection.

Note that Gecko (and thus Camino) does not yet build “out-of-the-box” on Mac OS X 10.6. For more information about local changes required to build on Mac OS X 10.6, see Bug 514495.

In addition to disk space required by developer tools and build prerequisites, you will need approximately 2 GB of free disk space for a single debug tree (a Universal build requires approximately 50% more free space).

Installing Mac OS X Cross Development SDKs

Camino requires a custom Xcode installation to build properly: during installation, click the "Customize" button and turn on the "Cross Development" section. If you have previously installed Xcode without this option, run the installer again to add Cross Development before attempting to build Camino. Trunk versions of currently Camino require the 10.4u SDK for PPC, Intel, and Universal builds. If you are building other versions of Camino, other SDKs are required; see the Appendix for details.

Regardless of which version of Mac OS X you are using, we recommend you always upgrade to the latest "point" release of the OS (e.g., Mac OS X 10.4.11, Mac OS X 10.5.8, and Mac OS X 10.6.2 as of March 2010) and the latest Xcode version available for that version of Mac OS X (Xcode 2.5 on 10.4.11, Xcode 3 on 10.5.8, Xcode 3.2 on 10.6.2).

Upgrading Xcode

When you upgrade to a newer version of Xcode, even a minor-point release, be sure to re-install the Cross Development SDKs from the new version. In addition, delete the Xcode header cache in /Library/Caches/com.apple.Xcode.501/SharedPrecompiledHeaders (where 501 is your user ID) before building Camino.

Installing libIDL and autoconf-2.13

Mozilla requires libIDL and autoconf-2.13 in order to build. While you can build these packages (and their dependencies) from source yourself, most developers use MacPorts. MacPorts is easier to use and is recommended. When installing a new major version of Mac OS X, be sure to upgrade MacPorts to the version appropriate for that Mac OS X version.

  1. Download the latest MacPorts release for your version of Mac OS X and install it.
    MacPorts installs in /opt/local by default. After running the MacPorts installer, the changes that it makes to the shell environment will be available in any new Terminal window.
  2. Open a new Terminal window and install the ports (N.B. you will need to use an Administrator account or your account must be listed in the sudoers file)
    1. $ sudo port install libidl
      This will take some time as the sources for libIDL and its dependencies are downloaded and installed.
    2. $ sudo port install autoconf213
      The above command installs autoconf-2.13 to /opt/local/bin/autoconf213 using MacPorts. You will need to type autoconf213 to run it when other documentation might instruct you to run autoconf. Do not install the autoconf package without the 213 suffix.

Installing Mercurial

Current Mozilla development uses Mercurial (“hg”) for version control. Unlike common version-control systems (CVS, svn), Mercurial is not included as part of the Mac OS X Developer Tools.

Mercurial has binary packages available for Mac OS X 10.5 and 10.6, or you can install it via MacPorts.

To install Mercurial from MacPorts:

  • $ sudo port install mercurial
    This will take some time as the sources for mercurial and its dependencies are downloaded and installed.

Setting up your Hg Environment

If you are building from the source tarball and never plan to update your Camino source code except by downloading a new source tarball, you can skip this section. Most users should perform these steps, however, and if you are doing development, you should not use the tarball.

Mercurial configures itself via a hidden .hgrc file in your home folder. Create a new plain-text ~/.hgrc file in your favorite text editor and populate it with the following:

[ui]
username = Your Name <email@domain.tld>
merge = internal:merge

[defaults]
commit = -v
diff = -U 8 -p
qdiff = -U 8

[diff]
git = 1
showfunc = 1
unified = 8

Mozilla’s Mercurial instructions exhort you to choose a merge program now and to learn how to use it, without providing much useful guidance. The configuration above defaults to the traditional “try to merge and leave conflict markers” merging; if you have a favorite visual merge tool, configure it now, but otherwise you may want try various tools later on to see if such a tool exists for Mac OS X that doesn’t suck and doesn’t make you want to gouge your eyes out.

Pulling Source and Building Gecko and Camino

N.B. These instructions will build the “trunk” by default. If you want to build a specific branch (or a release or milestone from cvs rather than from the source tarball), please see the FAQ for changes you will need to make to some of these commands.

If you are building from the source tarball, skip to step 5 of this section. Be sure to follow the link to learn about other .mozconfig settings, since the sample is for a development build.

  1. cd into the directory where you would like to keep your copy of the Camino source code (e.g., cd ~/lizard).
  2. Pull the Gecko source:
    $ hg clone http://hg.mozilla.org/releases/mozilla-1.9.2/ mozilla
    This will download hundreds of megabytes to your computer and will take anywhere from 20 minutes to an hour to complete.
  3. cd into the mozilla directory that was just created:
    $ cd mozilla
  4. Pull the Camino source:
    $ hg clone http://hg.mozilla.org/users/alqahira_ardisson.org/camino-1.9.2-test/ camino
    It is very important that you are in the mozilla directory when issuing this command. This will download the Camino source to the appropriate location and should take about 5-10 minutes.
  5. In your mozilla directory, create a plain text file called .mozconfig (note the leading period). This file is where you will set up the options for your Camino build. For a development build add the following to your .mozconfig file (note the leading dot and space):
    . $topsrcdir/camino/config/mozconfig
    ac_add_options --disable-optimize
    ac_add_options --enable-debug
    mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/../CaminoTrunk
    mk_add_options MOZ_MAKE_FLAGS=-j4

    N.B. If you are trying to build on Mac OS X 10.6, please refer to Bug 514495 for additional .mozconfig contents.

    (The MOZ_MAKE_FLAGS setting improves build speed, assuming you have a multi-processor or multi-core machine. For older machines, remove that line.)

    For examples of other builds types, or to learn more about the .mozconfig file, see the .mozconfig page.

  6. Build:
    $ make -f client.mk build
    This will automatically Camino (including various components of Mozilla that Camino requires). The final Camino build ends up in mozilla/dist (or $OBJDIR/dist).

For more information on the build process, see Mac OS X Build Prerequisites and Mac OS X Universal Binaries in the Mozilla Developer Center.

If your build fails, consult the FAQ and Common Build Errors pages.

Development

To work on Camino application code, open up the Camino.xcodeproj project (from the camino directory of your OBJDIR) in Xcode. You can edit code, build, and run from inside of Xcode. (You can, of course, use an editor of your choice and rebuild either from Xcode or from the command line.)

When building with Xcode, make sure your build settings match those in your .mozconfig file: from the "Active Build Style" item in the toolbar, choose "Development" for a debug build, or "Deployment" for an optimized build. If you do not match your settings to your .mozconfig, your build will fail.

Camino code

If you've changed code only within the camino directory, you can usually rebuild using Xcode. (Again, make sure your build settings match your .mozconfig file).

.in and generated files

However, if you’ve edited the source files for certain files that are generated during the build process (e.g., the .in files for .strings files, all-camino.js, or the Makefile) or any of the embed.jar overrides, you will need to rebuild using the command line: cd $OBJDIR/camino; make

Mozilla code

Unlike Camino code, nearly all Mozilla code is build with Makefiles, so there are no project files to ease development integration, and as a consequence you must open files manually in Xcode or your favorite editor.

Setting up a Camino-specific .hgignore file for the Mozilla repository

If you plan to work on Mozilla code, you’ll want to add a repository-specific .hgignore file for the Mozilla repository, so that Camino files do not show up as unknown when running Mercurial commands in the Mozilla repository.

To do this, edit the mozilla/.hg/hgrc file and add the following lines:

[ui]
ignore = ~/.hgignore-mozcamino

Then, in your favorite text editor, make a new plain-text file in your home directory named .hgignore-mozcamino with the following lines:

# Make mozilla-{central|1.9.2} ignore camino
^camino

Widget code

If you’ve edited the Cocoa widget code, you can make in $OBJDIR/widget/src/cocoa to rebuild the widget library with your changes and then copy the new version of the widget library into your build.

The easiest way to get the new version of the library into Camino to test it is to use cp to copy it into the Camino application package (into $OBJDIR/camino/build/Development/Camino.app/Contents/MacOS/components). (This tactic does not work for static builds, which is why they are not recommended for development.) As an alternative, you can make in $OBJDIR/camino again.

Other changes

If you've changed anything outside the camino directory (aside from widget code — see above), you cannot build from inside Xcode, and will need to make -f client.mk from the mozilla directory (or make from the root of your OBJDIR, if you're using an OBJDIR as recommended by the sample development .mozconfig above).

Updating the source and rebuilding

Since the Mozilla core (Gecko) and Camino code are always under constant development, you will periodically want to update your source tree to stay current and to make sure your code will not conflict with any changes that have happened since you began working. (You will always want to make sure your tree is current before beginning work on the code and before submitting a patch for review.)

Before updating your tree, visit the Tinderbox and make sure that the columns whose headings end in “Cm2.1-M1.9.2” are green . Then cd to your mozilla directory and run the following commands:
$ hg pull -u
$ cd camino
$ hg pull -u
Then, to rebuild Gecko and Camino:
$ cd ..
$ make -f client.mk build

It's possible in most cases to update only Camino code (unless Gecko changes have made changes to Camino code), but it is still recommended that you update your entire tree regularly. To update only the Camino code, cd to your mozilla/camino directory and run the following commands:
$ hg pull -u
$ make

For OBJDIR builds used by most developers, replace make with cd ../../{OBJDIR}/camino; make (the sample development .mozconfig above specifies an OBJDIR by default). Note that in OBJDIR builds, you must run make from the command line after a hg pull -u that pulls certain types of changes, including project changes and changes to any .strings file, since updated versions of these files are copied into the OBJDIR or regenerated by Makefile targets.

Packaging a build for testing

Sometimes you'll want to create a custom build to allow a large new feature to receive wider testing from the community before review or landing. In order to do this, you need to build with a “distribution” .mozconfig. Then, when your build is complete, run make in $OBJDIR/camino/installer to produce a disk image for distribution. You can use your existing source tree but “swap in” a deployment .mozconfig that defines a new OBJDIR to provide a clean build.

Cleaning your tree

Sometimes your build will fail because there are stale build products somewhere in the tree and new ones that conflict, or for other reasons related to the state of your tree. This can be fixed by cleaning your tree. To clean your tree, cd to mozilla and try make -f client.mk clean. If that doesn't work, you need to make -f client.mk distclean.

Appendix