[vlc-commits] contrib: update documentation
Rémi Denis-Courmont
git at videolan.org
Mon Jul 4 16:43:43 CEST 2011
vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Mon Jul 4 17:07:52 2011 +0300| [e2ad1bb07fd6aee205a55c47b02ee31dbd7c9a88] | committer: Rémi Denis-Courmont
contrib: update documentation
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=e2ad1bb07fd6aee205a55c47b02ee31dbd7c9a88
---
contrib/src/README | 82 ++++++++++++++++++++++++++++++++++++---------------
1 files changed, 58 insertions(+), 24 deletions(-)
diff --git a/contrib/src/README b/contrib/src/README
index e2f1f09..f227477 100644
--- a/contrib/src/README
+++ b/contrib/src/README
@@ -48,40 +48,74 @@ source code is fully ready. Otherwise Makefile dependencies will break
cd $< && $(MAKE) install
touch $@
+Conditional builds
+-------------------
+
+As far as possible, build rules should determine automatically whether
+a package is useful (for VLC media player) or not. Useful packages
+should be listed in the PKGS special variable. See some examples:
+
+ # FFmpeg is always useful
+ PKGS += ffmpeg
+
+ # DirectX headers are useful only on Windows
+ ifdef HAVE_WIN32
+ PKGS += directx
+ endif
+
+ # x264 is only useful when stream output is enabled
+ ifdef BUILD_ENCODERS
+ PKGS += x264
+ endif
+
+Some packages may be provided by the target system. This is especially
+common when building natively on Linux or BSD. When this situation is
+detected, the package name should be added to the PKGS_FOUND special
+variable. The build system will then skip building this package:
+
+ # Asks pkg-config if foo version 1.2.3 or later is present:
+ ifeq ($(call need_pkg,'foo >= 1.2.3'),)
+ PKGS_FOUND += foo
+ endif
+
+Note: The need_pkg function always return 1 during cross-compilation.
+This is a bug.
+
Dependencies
-------------
-If package bar depends on package foo, a Makefile dependency can ensure
-that bar will be built after foo. It will also ensure that foo will be
-built even if it was not selected explicitly in the $(PKGS) variable:
+If package bar depends on package foo, the special DEPS_bar variable
+should be defined as follow:
- .bar: libbar .foo
- cd $< && $(HOSTVARS) ./configure $(HOSTCONF)
- cd $< && $(MAKE) install
- touch $@
+ DEPS_bar = foo $(DEPS_foo)
+Note that dependency resolution is unfortunately _not_ recursive.
+Therefore $(DEPS_foo) really should be specified explicitly as shown
+above. (In practice, this will not make any difference insofar as there
+are no pure second-level nested dependencies. For instance, libass
+depends on FontConfig, which depends on FreeType, but libass depends
+directly on FreeType anyway.)
-Conditional builds
--------------------
+Also note that DEPS_bar is set "recursively" with =, rather than
+"immediately" with :=. This is so that $(DEPS_foo) is expanded
+correctly, even if DEPS_foo it is defined after DEPS_bar.
-Some packages may be provided by the target system. This is especially
-common when building natively on Linux or BSD. A dummy build rule can
-be used conditionally.
+Implementation note:
- NEED_FOO := $(call need_pkg,'foo >= 1.2.3')
+ If you must know, the main.mak build hackery will automatically
+ emit a dependency from .bar onto .dep-foo:
- ifeq ($(NEED_FOO),)
- .foo:
- else
- .foo: libfoo
- ### foo compilation rules here ###
- endif
- touch $@
+ .bar: .dep-foo
-If pkg-config finds foo.pc with version 1.2.3 or larger, this will be
-equivalent to:
+ ...whereby .dep-foo will depend on .foo:
- .foo: ; touch .foo
+ .dep-foo: .foo
+ touch $@
-Note: The need_pkg function always return 1 during cross-compilation.
+ ...unless foo was detected in the target distribution:
+
+ .dep-foo:
+ touch $@
+
+ So you really only need to set DEPS_bar.
More information about the vlc-commits
mailing list