summaryrefslogtreecommitdiffstats
path: root/doc/BUILD-Mac
diff options
context:
space:
mode:
Diffstat (limited to 'doc/BUILD-Mac')
-rw-r--r--doc/BUILD-Mac361
1 files changed, 198 insertions, 163 deletions
diff --git a/doc/BUILD-Mac b/doc/BUILD-Mac
index 5416aae23..07f56df84 100644
--- a/doc/BUILD-Mac
+++ b/doc/BUILD-Mac
@@ -1,4 +1,4 @@
-Build Guide for HandBrake svn3349 on Mac OS X
+Build Guide for HandBrake 4394svn on Mac OS X
*********************************************
Table of Contents
@@ -23,8 +23,11 @@ Table of Contents
6 Building via Xcode.app
6.1 Checkout Sources
6.2 Build
- 6.3 External Targets
- 6.4 User-Defined Settings
+ 6.3 Note: Debugging
+ 6.4 Note: Finding Built Products
+ 6.5 Note: Workspace Log Behaviors
+ 6.6 External Target
+ 6.7 User-Defined Settings
7 Troubleshooting
Appendix A Project Repository Details
@@ -46,29 +49,30 @@ possible:
* Mac Intel hardware
- * Mac OS X 10.5.7
+ * Mac OS X 10.7.2
- * Xcode-3.1.2
+ * Xcode 4.2.1 (Build version 4D502)
- * gcc 4.0.1 (Apple Inc. build 5490)
+ * llvm-gcc-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658)
- * yasm 0.8.0.2194 (for i386 and x86_64 architectures)
+ * yasm 1.1.0.2352
- Note: It is recommended to use the platform distribution's bundled
- compiler for maximum C++ compatibility. If you build with a custom
- compiler it will likely introduce non-standard runtime
- requirements. There are of course many valid reasons to build with
- unbundled compilers, but be aware it is generally unsupported and
- left as an exercise to the reader.
+ Note: It is recommended to use the platform distribution's
+ standard compiler for maximum C++ compatibility. If you build with
+ a custom compiler it will likely introduce non-standard runtime
+ requirements and have new/delete, exception and RTTI
+ incompatibilities. There are of course many valid reasons to build
+ with unbundled compilers, but be aware it is generally unsupported
+ and left as an exercise to the reader.
The following general tools are used on various platforms and it is
recommended you use these versions or similar:
- * subversion - 1.6.2
+ * subversion - 1.6.16
- * python - Python 2.4.6
+ * python - Python 2.7.1
- * curl - curl 7.19.4 (or wget)
+ * curl - curl 7.21.4 (or wget)
* m4 - GNU M4 1.4.6
@@ -76,9 +80,9 @@ recommended you use these versions or similar:
* patch - Patch 2.5.8
- * tar - GNU tar 1.15.1
+ * tar - GNU tar 1.26
- * wget - GNU Wget 1.11.4 (or curl)
+ * wget - GNU Wget 1.13.4 (or curl)
3 QuickStart
************
@@ -86,7 +90,7 @@ recommended you use these versions or similar:
This chapter is for building from a terminal/shell environment in as
few commands as possible. Upon completion of the following commands you
should have a fresh build of HandBrake. Further instructions are
-available beginning with *Note overview:: which describes procedures
+available beginning with *note overview:: which describes procedures
suitable for repeating builds. This chapter should be skipped by those
seeking more than a minimalist build.
@@ -141,7 +145,7 @@ exactly the same branch.
If you have write-access to the repository, then you may add the
appropriate login/password information as needed. It is recommended to
-use Subversion 1.5.0 or higher. Lower versions should also work.
+use Subversion 1.6.0 or higher. Lower versions should also work.
5.2 Configure
=============
@@ -180,12 +184,6 @@ options are also documented here:
All-in-one option which launches the build and logs output
automatically. Useful for novices and quick-start procedures.
-`--disable-xcode'
- Disable shunting the build through `xcodebuild'. If this option is
- applied, `HandBrakeCLI' will be produced in a similar fashion as
- it is on other platforms; sans Xcode and the Cocoa application
- will not be produced. Mac OS X only.
-
`--disable-gtk'
Disable building the GTK GUI on applicable platforms such as
Linux.
@@ -205,6 +203,17 @@ options are also documented here:
architectures. The available choices are hard-coded per platform
and no sanity checks for the required tools are performed.
+`--disable-xcode'
+ Disable shunting the build through `xcodebuild'. If this option is
+ applied, `HandBrakeCLI' will be produced in a similar fashion as
+ it is on other platforms; sans Xcode and the Cocoa application
+ will not be produced. Mac OS X only.
+
+`--xcconfig=MODE'
+ Select Xcode project configuration file. The available modes are
+ the basenames of files located in `macosx/xcconfig/*.xcconfig'
+ which direct Xcode to build using various architecture and Mac OS
+ X deployment options. Mac OS X only.
Clean-room procedures dictate that when certain factors change, old
builds should be scrapped and new builds configured. This is the main
@@ -283,6 +292,10 @@ period.
Build auto-generated project documentation. Various articles are
produced and may be found in `build/doc/articles'.
+`make doc.post'
+ Build auto-generated project documentation and post produced
+ articles directly to source tree.
+
`make report.help'
Print list of available makefile vars report targets. These
reports detail var definitions and expanded values used by the
@@ -307,9 +320,11 @@ scoped targets:
---------------------
Contrib modules such as `a52dec', `bzip2', `faac', `faad2', `ffmpeg',
-`lame', `libdca', `libdvdread', `libmkv', `libogg', `libsamplerate',
-`libtheora', `libvorbis', `mp4v2', `mpeg2dec', `x264' and `zlib' have
-the following scoped targets:
+`fontconfig', `freetype', `fribidi', `lame', `libass', `libbluray',
+`libdca', `libdvdnav', `libdvdread', `libdvdread', `libiconv',
+`libmkv', `libogg', `libsamplerate', `libtheora', `libvorbis',
+`libxml2', `mp4v2', `mpeg2dec', `x264', `yasm' and `zlib' have the
+following scoped targets:
`make MODULE.fetch'
Download source tarball from the Internet and save to
@@ -429,8 +444,8 @@ overwrite `GNUmakefile' and any customizations contained therein would
be lost. Here is a short example of what the contents of
`_SRC_/custom.defs' might contain:
- ## bump to gcc-4.2 in current path
- GCC.gcc = /usr/bin/gcc-4.2
+ ## bump to gcc-4.6 in current path
+ GCC.gcc = /usr/bin/gcc-4.6
## replace optimize for 'speed' with more aggressive settings
GCC.args.O.speed = -O3 -fomit-frame-pointer -msse4.2
@@ -449,21 +464,22 @@ Binaries for all the architectures.
make full use of Xcode.
Create a dummy (container) build configuration and use it to launch a
-nested-build for each architecture serially; optionally you may
-substitute `make ub.build.serial' for `make ub.build.parallel' if your
-machine has the horsepower:
+nested-build for each architecture:
./configure --disable-xcode
cd build/
- make ub.build.serial
+ make ub.build
make ub.combine
-To specify a subset of architectures to be built first create/edit
-`_SRC_/custom.defs' with the following override to build UB for `i386'
-and `x86_64' before invoking `make':
+The list of architectures is hard coded to HandBrake's desired product
+and currently is composed of combining the binaries produced from two
+xcconfigs: osx106.i386 and osx106.x86_64. The following example shows
+how to specify a different list of xcconfigs:
- ## prefer i386 (order is important)
- UB.archs = i386 x86_64
+ ./configure --disable-xcode
+ cd build/
+ make UB.xcconfigs="osx107.i386 osx107.x86_64" ub.build
+ make UB.xcconfigs="osx107.i386 osx107.x86_64" ub.combine
6 Building via Xcode.app
************************
@@ -482,135 +498,151 @@ exactly the same branch.
If you have write-access to the repository, then you may add the
appropriate login/password information as needed. It is recommended to
-use Subversion 1.5.0 or higher. Lower versions should also work.
+use Subversion 1.6.0 or higher. Lower versions should also work.
6.2 Build
=========
-Open Xcode.app from a terminal by using the `open' command which passes
-your shell environment and its `PATH' setting to Xcode. Do not attempt
-to launch Xcode.app from Finder or by using Finder to open
-`HandBrake.xcodeproj' - doing so will defeat any custom path settings
-which contain required tools.
-
- open `macosx/HandBrake.xcodeproj'
-
-Once the HandBrake Xcode project is open, perform the following steps
-to build the default configuration:
-
- * select active configuration standard
-
- * select active target HandBrake
-
- * click Build or Build and Go
-
-When using Build and Go, xcode launches the application under the gdb
-debugger. gdb will encounter a trap when starting the program. This
-trap is harmless and you should just 'continue'. For the curious, the
-trap occurs because we add some values to the environment with setenv,
-then do a brain transplant with execv. Restarting the application with
-execv triggers the trap.
-
-The first build (on an empty `build' directory) will take a bit of
-time. You may use the Build Results window to observe progress. The
-most time-consuming part of the build is when the external build system
-(essentially the terminal method) is triggered by Xcode and a
-substantial amount of log transcript ensues. Much of that transcript
-are warnings and errors that are part of the normal build process for
-3rd-party contributed modules so in general you need not do anything.
-However, if Xcode itself reports the build failed, then you must take
-corrective action.
-
-Unfortunately, due to limitations of Xcode we do not have hooks in
-place to offer finer-grained control over per-module make actions for
-the (external) build system. Thus, you will have to use terminal to
-accomplish those tasks. Just `cd' into the build directory which is
-associated with your active configuration and perform any necessary
-`make' commands. Be careful not to issue commands from the terminal
-simultaneously with Xcode tasks as that will confuse both Xcode and
-make and likely corrupt your build directory.
-
-When you click clean in Xcode it will not perform an external build
-clean. Basically HandBrakeCLI and HandBrake.app are the only products
-which have full Xcode iterative development flexibility.
-
-Each configuration uses a different `build' directory. This makes it
-possible to build each configuration and switch between them without
-losing their respective build state. The description of each
-configuration and the name convention for build directories are as
-follows:
-
-`standard'
- This configuration will build host native architecture. Build
- directory is `build.standard' . The standard variant produces
- optimized code without debug information.
-
-`standard.i386'
- This configuration will build i386 architecture. Build directory
- is `build.standard.i386' .
-
-`standard.x86_64'
- This configuration will build x86_64 architecture. Build directory
- is `build.standard.x86_64' .
-
-`standard.ppc'
- This configuration will build ppc architecture. Build directory is
- `build.standard.ppc' .
-
-`standard.ppc64'
- This configuration will build ppc64 architecture. Build directory
- is `build.standard.ppc64' .
-
-`debug'
- This configuration will build host native architecture. Build
- directory is `build.debug' . The debug variant produces
- unoptimized code with debug information.
-
-`debug.i386'
- This configuration will build i386 architecture. Build directory
- is `build.debug.i386' . The debug variant produces unoptimized
- code with debug information.
-
-`debug.x86_64'
- This configuration will build x86_64 architecture. Build directory
- is `build.debug.x86_64' . The debug variant produces unoptimized
- code with debug information.
-
-`debug.ppc'
- This configuration will build ppc architecture. Build directory is
- `build.debug.ppc' . The debug variant produces unoptimized code
- with debug information.
-
-`debug.ppc64'
- This configuration will build ppc64 architecture. Build directory
- is `build.debug.ppc64' . The debug variant produces unoptimized
- code with debug information.
-
-6.3 External Targets
-====================
+Perform the following steps to build:
+
+ * Finder - navigate to `macosx/' in the HandBrake source tree
+
+ * Finder - open `HandBrake.xcodeproj'
+
+ * Xcode workspace - select scheme HandBrake [RELEASE]
+
+ * Xcode menu - select Product -> Build
+
+ * Xcode workspace - Show the Log navigator
+
+ * Xcode workspace Log navigator - select top Build item
+
+6.3 Note: Debugging
+===================
+
+When debugging, Xcode launches the application under the gdb debugger.
+gdb will encounter a trap when starting the program. This trap is
+harmless and you should just 'continue'. For the curious, the trap
+occurs because we add some values to the environment with setenv, then
+do a brain transplant with execv. Restarting the application with execv
+triggers the trap.
+
+6.4 Note: Finding Built Products
+================================
+
+Under default Xcode.app options the products from a build are managed
+by the Xcode Organizer. Perform the following steps to open Finder at
+top of build tree and navigate to release products:
+
+ * Xcode menu - select Window -> Organizer
+
+ * Xcode organizer - select Projects tab
+
+ * Xcode organizer Projects - select HandBrake item
-The following external targets appear in the Xcode project and perform
-build and clean actions.
+ * HandBrake item - click Derived Data location arrow (immediately
+ right of path)
-`external'
- Target maps to `make build' and `make clean' for everything Xcode
- products depend upon from the external build system.
+ * Finder - navigate to Build -> Products -> release
-`libhb'
- Target maps to `make libhb.build' and `make libhb.clean'.
+ Note: There is a bug with Xcode Organizer. The very first time an
+ Xcode project is opened the Project view Derived Data is
+ greyed-out. Workaround glitch by selecting any other tab and then
+ reselecting Projects tab.
-`contrib'
- Target maps to `make contrib.build' and `make contrib.xclean'.
+6.5 Note: Workspace Log Behaviors
+=================================
+The default Workspace behavior does not display latest Build log in the
+navigator and quickly becomes tedious. To automatically switch to Log
+navigator and show current log:
-6.4 User-Defined Settings
+ * Xcode menu - select Behaviors -> Edit Behaviors
+
+ * Xcode behaviors - select Build starts
+
+ * navigator - enable, select Show, select Log Navigator
+
+ * nagivate to - select current log
+
+ Note: The Log navigator supports some possibly confusing options.
+ It is recommended to only show results for the last build by
+ selecting Recent. If All is selected then it will look as though
+ Xcode is performing a build, but in reality it is bringing forward
+ log output from prior builds and it becomes impossible to tell if
+ any single log entry represents actual work performed or if it was
+ brought forward from history.
+
+ Note: When building external target, many 3rd-party contributed
+ modules have warnings and errors which may safely be ignored and
+ are ignored by the external build system. Ultimately, look to the
+ workspace status indicator for Build Succeeded.
+
+6.6 External Target
+===================
+
+The external target mechanism is used to launch a full terminal-based
+build from within Xcode. Unfortunately, we do not have hooks in place
+to offer finer-grained control over per-module make actions. However,
+you can still use terminal to accomplish those tasks after launching
+the build at least once or doing a clean from within Xcode. Be careful
+to not issue terminal commands simultaneously with Xcode tasks.
+
+Invoking a clean from Xcode always destroys the entire external build
+tree and subsequently configures it. Changing settings in Xcode such as
+selecting xcconfig files should always be followed by a clean. This
+allows the external build system configuration to accurately reflect
+Xcode project changes.
+
+The following are some examples of using `make' from the terminal to
+effect various components of the external build. But first, you must
+open a terminal at the top of the external build output tree. Here we
+navigate to external build configured for release:
+
+ * Xcode menu - select Window -> Organizer
+
+ * Xcode organizer - select Projects tab
+
+ * Xcode organizer Projects - select HandBrake item
+
+ * HandBrake item - click Derived Data location arrow (immediately
+ right of path)
+
+ * Finder - navigate to Build -> Products -> release -> external
+
+Example; external build failed but error is buried in a parallelized
+log; redo build sequentially:
+
+ make xclean
+ make BUILD.jobs=1
+
+Example; build external x264 module:
+
+ make x264.clean
+ make x264
+
+Example; extract, configure, build and install external x264 module:
+
+ make x264.xclean
+ make x264.install
+
+Example; something in a big module is failing; redo build sequentially:
+
+ make ffmpeg.clean
+ make BUILD.jobs=1 ffmpeg
+
+6.7 User-Defined Settings
=========================
-The following user defined settings are used in Xcode project for the
-external build system:
+The following user defined settings are visible in Xcode project and
+are used for the external build system.
`EXTERNAL_BUILD'
- Specifies the build (scratch) directory for each configuration.
+ Do not modify; used to specify the build (scratch) directory.
+
+`EXTERNAL_DRIVER'
+ Do not modify; used for internal/external build coordination and
+ must always be `xcode'.
`EXTERNAL_JOBS'
Specifies the concurrency factor for the external build system
@@ -618,14 +650,17 @@ external build system:
external builds if your system has the horsepower and resources.
Specifying a value greater than the number of CPU cores (or
virtual cores) in your system is unlikely to produce gains and
- will needlessly consume extra resources.
-
-`EXTERNAL_METHOD'
- Do not modify; Used for internal/external build coordination and
- must always be `xcode'.
+ will needlessly consume extra resources. A special string value of
+ auto sets the factor to the number of active CPUs on the host
+ system.
`EXTERNAL_SRC'
- Specifies the top-level source directory for HandBrake.
+ Do not modify; specifies the top-level source directory for
+ HandBrake, relative to Xcode project.
+
+`EXTERNAL_XCCONFIG'
+ Do not modify; specifies which xcconfig file is active. Defined
+ inside xcconfig file.
7 Troubleshooting
@@ -664,7 +699,7 @@ Appendix A Project Repository Details
root: svn://svn.handbrake.fr/HandBrake
branch: trunk
uuid: b64f7644-9d1e-0410-96f1-a4d463321fa5
- rev: 3349
- date: 2010-06-02 09:49:18 -0700
+ rev: 4394
+ date: 2011-12-30 17:21:44 -0500
type: developer