summaryrefslogtreecommitdiffstats
path: root/doc/BUILD-Linux
diff options
context:
space:
mode:
Diffstat (limited to 'doc/BUILD-Linux')
-rw-r--r--doc/BUILD-Linux527
1 files changed, 0 insertions, 527 deletions
diff --git a/doc/BUILD-Linux b/doc/BUILD-Linux
deleted file mode 100644
index 99a32d64e..000000000
--- a/doc/BUILD-Linux
+++ /dev/null
@@ -1,527 +0,0 @@
-Guide to Building HandBrake 20161005085545-3fe7f1d-master (2016100901) on Linux
-*******************************************************************************
-
-1 Introduction
-2 Prerequisites
-3 QuickStart
-4 Overview
-5 Building via Terminal
-5.1 Checkout Sources
-5.2 Configure
-5.3 Build
-5.4 Make Targets
- 5.4.1 Global
- 5.4.2 General Modules
- 5.4.3 Contrib Modules
- 5.4.4 Contrib Touch and Untouch
- 5.4.5 Contrib Aggregates
-5.5 Customizing Make
-6 Troubleshooting
-Appendix A Project Repository Details
-
-1 Introduction
-**************
-
-This guide documents the recommended process to build HandBrake on Linux
-hosts from the official source-code repository. Building from any other
-source is not supported.
-
-2 Prerequisites
-***************
-
-The following are the recommended specifications for building on Linux;
-but is not necessarily the only configuration that is possible:
-
- * Intel 32-bit or 64-bit kernel
- * Ubuntu 14.04, gcc 4.8, yasm 1.3.x
- * Ubuntu 16.04, gcc 5.3, yasm 1.3.x
- * Fedora 20, gcc 4.8, yasm 1.3.x
- * gcc 4.7 or higher is reported to work
-
- 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:
-
- * git - 2.4.3
- * python - Python 2.7.1
- * m4 - GNU M4 1.4.17
- * make - GNU Make 3.81
- * patch - Patch 2.5.8
- * tar - GNU tar 1.26
-
-The GTK UI introduces some significant extra build requirements. GTK
-version 3.10+ is required to build the GTK UI. If you intend to disable
-building the GUI with 'configure --disable-gtk' you will not need many
-of these packages installed:
-
-Ubuntu 14.04, 16.04 packages:
- * git (cli/gui)
- * cmake (cli/gui)
- * yasm (cli/gui)
- * build-essential (cli/gui)
- * autoconf (cli/gui)
- * libtool (cli/gui)
- * zlib1g-dev (cli/gui)
- * libbz2-dev (cli/gui)
- * libxml2-dev (cli/gui)
- * libogg-dev (cli/gui)
- * libtheora-dev (cli/gui)
- * libvorbis-dev (cli/gui)
- * libopus-dev (cli/gui)
- * libsamplerate-dev (cli/gui)
- * libfribidi-dev (cli/gui)
- * libfreetype6-dev (cli/gui)
- * libfontconfig1-dev (cli/gui)
- * libharfbuzz-dev (cli/gui)
- * libass-dev (cli/gui)
- * libmp3lame-dev (cli/gui)
- * libx264-dev (cli/gui)
- * libjansson-dev (cli/gui)
- * intltool (gui)
- * libglib2.0-dev (gui)
- * libdbus-glib-1-dev (gui)
- * libgtk-3-dev (gui)
- * libgudev-1.0-dev (gui)
- * libwebkitgtk-3.0-dev (gui)
- * libnotify-dev (gui)
- * libgstreamer1.0-dev (gui)
- * libgstreamer-plugins-base1.0-dev (gui)
- * libappindicator-dev (gui)
-
-To install these packages:
- sudo apt-get install git cmake yasm build-essential autoconf libtool \
- zlib1g-dev libbz2-dev libogg-dev libtheora-dev libvorbis-dev libopus-dev \
- libsamplerate-dev libxml2-dev libfribidi-dev libfreetype6-dev \
- libfontconfig1-dev libass-dev libmp3lame-dev libx264-dev libjansson-dev \
- intltool libglib2.0-dev libdbus-glib-1-dev libgtk-3-dev libgudev-1.0-dev \
- libwebkitgtk-3.0-dev libnotify-dev libgstreamer1.0-dev \
- libgstreamer-plugins-base1.0-dev libappindicator-dev
-
-Additional Ubuntu 16.04 packages:
- * libtool-bin (cli/gui)
-
-To install these packages:
- sudo apt-get install libtool-bin
-
-Fedora 20 package groups:
- * Development Tools
- * Development Libraries
- * X Software Development (gui)
- * GNOME Software Development (gui)
-
-To install these package groups:
- sudo yum groupinstall "Development Tools" "Development Libraries" \
- "X Software Development" "GNOME Software Development"
-
-Additional Fedora packages:
- * patch (cli/gui)
- * intltool (cli/gui)
- * libtool (cli/gui)
- * cmake (cli/gui)
- * gcc-c++ (cli/gui)
- * yasm (cli/gui)
- * zlib-devel (cli/gui)
- * bzip2-devel (cli/gui)
- * libogg-devel (cli/gui)
- * libtheora-devel (cli/gui)
- * libvorbis-devel (cli/gui)
- * opus-devel (cli/gui)
- * libsamplerate-devel (cli/gui)
- * libxml2-devel (cli/gui)
- * fribidi-devel (cli/gui)
- * freetype-devel (cli/gui)
- * fontconfig-devel (cli/gui)
- * harfbuzz-devel (cli/gui)
- * libass-devel (cli/gui)
- * lame-devel (cli/gui)
- * x264-devel (cli/gui)
- * jansson-devel (cli/gui)
- * dbus-glib-devel (gui)
- * libgudev1-devel (gui)
- * webkitgtk3-devel (gui)
- * libnotify-devel (gui)
- * gstreamer1-devel (gui)
- * gstreamer1-plugins-base-devel (gui)
-
-To install these packages:
- sudo yum install patch intltool libtool cmake gcc-c++ yasm zlib-devel \
- bzip2-devel libogg-devel libtheora-devel libvorbis-devel opus-devel \
- libsamplerate-devel libxml2-devel fribidi-devel freetype-devel \
- fontconfig-devel libass-devel lame-devel x264-devel jansson-devel \
- dbus-glib-devel libgudev1-devel webkitgtk3-devel libnotify-devel \
- gstreamer1-devel gstreamer1-plugins-base-devel
-
-3 QuickStart
-************
-
-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
-suitable for repeating builds. This chapter should be skipped by those
-seeking more than a minimalist build.
-
- git clone https://github.com/HandBrake/HandBrake.git hb-master
- cd hb-master
- ./configure --launch
-
-The special option '--launch' selects launch mode and performs the
-following steps:
-
- * assert scratch directory 'build/' does not exist
- * create scratch directory 'build/'
- * change to directory 'build/'
- * launch 'make'
- * capture build output to 'build/log/build.txt'
- * echo build output
- * print elapsed time
- * indicate if build ultimately succeeded or failed
-
-4 Overview
-**********
-
-Linux builds are performed from a terminal. There is no support for
-building from any IDEs.
-
-5 Building via Terminal
-***********************
-
-5.1 Checkout Sources
-====================
-
-Checkout HandBrake from the official source-code repository.
-
- git clone https://github.com/HandBrake/HandBrake.git hb-master
- cd hb-master
-
-Sources are checked out from the 'master' branch. This document was
-generated from that very branch, and for example purposes, we will use
-exactly the same branch.
-
-If you have write-access to the repository, then you may add the
-appropriate login/password information as needed.
-
-5.2 Configure
-=============
-
-Configure the build system.
-
- ./configure
-
-Configure will automatically create a scratch build directory 'build'
-unless you use GNU-style build procedures and first 'cd' to a directory
-other than top-level source. Additionally you may use '--build' to
-specify the directory. The name of the directory is arbitrary but it is
-recommended to use something which indicates transient files which are
-not checked into the repository.
-
-The 'configure' utility accepts many options. It is recommended that
-you specify '--help' for the complete list of options. The following
-options are also documented here:
-
-'--help'
- List available options.
-
-'--src=DIR'
- Specify top-level source directory for HandBrake sources.
-
-'--build=DIR'
- Specify destination directory for final product install. The
- default is to use either 'build' if in the top-level source
- directory, otherwise '.'
-
-'--prefix=DIR'
- Specify destination directory for final product install. This
- defaults to a reasonable platform-specific value.
-
-'--launch'
- All-in-one option which launches the build and logs output
- automatically. Useful for novices and quick-start procedures.
-
-'--disable-gtk'
- Disable building the GTK GUI on applicable platforms such as Linux.
-
-'--debug=MODE'
- Select debug mode. Must be one of 'none', 'min', 'std', 'max'.
- This generally maps to gcc options '-g0', '-g1', '-g2', '-g3'.
-
-'--optimize=MODE'
- Select optimize mode. Must be one of 'none', 'speed', 'size'.
- This generally maps to gcc options '-g0', '-O0', '-O3', '-Os'.
-
-'--arch=MODE'
- Select build architecture. The available architectures vary by
- platform. Most platforms support exactly one architecture except
- Mac OS X which has support for various universal binary
- 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
-reason for requiring a scratch directory; to promote consistent,
-reliable and clean software builds. The following is a short list of
-some of the reasons why someone may choose to scrap an existing build:
-
- * configure with different options
- * git working dir is updated and you want configure to re-evaluate
- working dir metadata.
- * build corruption is suspected
-
-There are generally two methods for scrapping a build. The 'build'
-directory can be recursively removed which has the effect of loosing
-your existing configuration but does guarantee no residuals are left
-behind. The other method is to ask the build system to perform an 'make
-xclean'. This is known to work well but will leave empty directories
-behind. However, the configuration is left intact.
-
-5.3 Build
-=========
-
-Build main product. All necessary dependencies are also built if
-required.
-
- make
-
-Parallel builds may optionally be enabled. Be aware that while a
-parallel build may save time on systems with additional cores, the
-output is often mixed, overlapped and sometimes even corrupted with
-binary characters. Thus if you experience a build issue, you should
-clean and redo the build in default serial mode to produce a readable
-log. The following command allows for up to 4 concurrent jobs via make:
-
- make -j4
-
-5.4 Make Targets
-================
-
-The build system supports passing many kinds of targets some of which
-become very useful in normal development cycles. The targets by
-convention are lower-case words passed to 'make'. Global targets are
-one-word targets. Scoped targets are usually two-words separated by a
-period.
-
-5.4.1 Global
-------------
-
-'make'
- Alias for 'make build'.
-
-'make build'
- Build main product. All necessary dependencies are also built if
- required.
-
-'make clean'
- Clean all build output excluding contrib modules. Configuration is
- retained.
-
-'make install'
- Perform final product(s) install. This will install build products
- to a standard directory or one specified via 'configure --prefix'
- option.
-
-'make uninstall'
- Perform final product(s) uninstall. This will uninstall any
- products which may have been previously installed.
-
-'make xclean'
- Clean all build output including contrib modules. Configuration is
- retained.
-
-'make doc'
- 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
- build system. For experts only.
-
-'make report.all'
- Convenience target which aggregates all reports. For experts only.
-
-5.4.2 General Modules
----------------------
-
-General modules such as 'libhb', 'test' and 'gtk' have the following
-scoped targets:
-
-'make MODULE.build'
- Build MODULE.
-
-'make MODULE.clean'
- Clean build output for MODULE.
-
-5.4.3 Contrib Modules
----------------------
-
-Contrib modules such as 'bzip2', 'ffmpeg', 'fontconfig', 'freetype',
-'fribidi', 'lame', 'libass', 'libbluray', 'libdvdnav', 'libdvdread',
-'libiconv', 'libogg', 'libsamplerate', 'libtheora', 'libvorbis',
-'libxml2', 'x264', 'yasm' and 'zlib' have the following scoped targets:
-
-'make MODULE.fetch'
- Download source tarball from the Internet and save to
- 'TOP/downloads' directory. No check-summing is performed.
-
-'make MODULE.extract'
- Extract source tarball into 'build' tree.
-
-'make MODULE.patch'
- Apply appropriate patches (if any) to module sources.
-
-'make MODULE.configure'
- Configure module sources. This usually invokes autotool configure.
-
-'make MODULE.build'
- Build module. This usually invokes autotool build.
-
-'make MODULE.install'
- Install module products such as headers and libraries into 'build'
- tree. This usually invokes autotool install.
-
-'make MODULE.uninstall'
- Uninstall module products; generally the reverse of install. This
- usually invokes autotool uninstall.
-
-'make MODULE.clean'
- Clean module; generally the reverse of build. This usually invokes
- autotool clean.
-
-'make MODULE.xclean'
- Extra clean module; first invokes uninstall then recursively
- removes the module build directory.
-
-5.4.4 Contrib Touch and Untouch
--------------------------------
-
-Also available are some very granular targets which help force builds
-from specific cycle points. The following targets are available to
-touch and untouch the respective module target; this will force the
-build system to treat the target as satisfied after a touch or
-unsatisfied after an untouch:
-
- * make MODULE.extract.touch
- * make MODULE.extract.untouch
- * make MODULE.patch.touch
- * make MODULE.patch.untouch
- * make MODULE.configure.touch
- * make MODULE.configure.untouch
- * make MODULE.build.touch
- * make MODULE.build.untouch
- * make MODULE.install.touch
- * make MODULE.install.untouch
-
-5.4.5 Contrib Aggregates
-------------------------
-
-For convenience, the following targets aggregate the all contrib
-modules' respective targets together:
-
- * make contrib.fetch
- * make contrib.extract
- * make contrib.patch
- * make contrib.configure
- * make contrib.build
- * make contrib.install
- * make contrib.uninstall
- * make contrib.clean
- * make contrib.xclean
-
-5.5 Customizing Make
-====================
-
-If the need arises to override settings in the build system (essentially
-gnu-make variables) the recommended method is to create optional include
-files which are automatically included if present and follow this naming
-convention; Do not check these files into the repository:
-
-'_SRC_/custom.defs'
- Custom makevar definitions outside 'build'. Suitable for settings
- which apply across all builds for a particular checkout; or which
- survives manual removal of 'build'.
-
-'_SRC_/custom.rules'
- Custom make rules outside 'build'. Suitable for rules which apply
- across all builds for a particular checkout; or which survives
- manual removal of 'build'.
-
-'_BUILD_/GNUmakefile.custom.defs'
- Custom makevar definitions specific to a 'build' directory.
-
-'_BUILD_/GNUmakefile.custom.rules'
- Custom makevar rules specific to a 'build' directory.
-
-The purpose is to allow a place to store local build settings for
-testing, tweaking, and experimenting with build configuration without
-losing your settings if 'configure' is invoked; ie: 'configure' would
-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.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
-
-See also 'make report.help' which displays a set of reports used to dump
-makefile vars.
-
-6 Troubleshooting
-*****************
-
-When troubleshooting build issues, the following files relative to the
-'build/' directory may be especially useful:
-
-'GNUmakefile'
- Top-level makefile which contains build settings generated via
- configure.
-
-'log/config.info.txt'
- Record of output from configure.
-
-'log/config.verbose.txt'
- Record of verbose output from configure.
-
-'log/build.txt'
- Record of output from 'configure --launch'. Similar output may be
- recorded using 'make' depending on which shell is in use, eg: 'make
- >& log/build.txt' or 'make > log/build.txt 2>&1'.
-
-'log/xcodemake.env.txt'
- Environment (variables) dump as seen when Xcode forks 'make'. Mac
- OS X only.
-
-Appendix A Project Repository Details
-*************************************
-
- url: https://github.com/HandBrake/HandBrake.git
- branch: master
- tag:
- rev: 7542
- hash: 3fe7f1de0362a38b36edae2a831cec450089d202
- date: 2016-10-05 08:55:45
- type: developer