comparison DOCS/tech/binary-packaging.txt @ 14267:ae421e5d6fb6

last draft with some insignificant changes
author rathann
date Wed, 29 Dec 2004 01:55:32 +0000
parents
children 37e1dc7e7107
comparison
equal deleted inserted replaced
14266:412eddc61f85 14267:ae421e5d6fb6
1 ________________________________________________
2 How to make good binary package(s) of MPlayer?
3 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4 by Dominik 'Rathann' Mierzejewski
5
6 About this document
7 ~~~~~~~~~~~~~~~~~~~
8
9 With the release of MPlayer 0.90pre9, all licensing issues have been
10 eliminated and all code is licensed under the GPL, which allows
11 independent packagers to create and distribute binary packages. At first,
12 this was discouraged by some of the developers, but the users' demand for
13 ready-to-use binary packages convinced some people to create them.
14 Unfortunately, many currently available packages are crippled, include
15 their own obsolete config files or are mispackaged in some other way. This
16 document aims to establish a common set of packaging guidelines so that
17 proper official binary packages for various Linux distributions and other
18 operating systems can be maintained.
19
20
21 Conventions
22 ~~~~~~~~~~~
23 Whenever you see "MUST", it means that following the mentioned guideline
24 is required. Whenever you see "SHOULD", it means that following the
25 guideline is highly recommended, but not required.
26
27
28 Minimum feature set
29 ~~~~~~~~~~~~~~~~~~~
30 Due to MPlayer design, it is impossible to simply include all possible
31 features and enable or disable them at runtime. That is why packagers
32 SHOULD avoid "dependency hell" by retaining a reasonable, limited default
33 feature set. After some discussion with other developers, we agreed that
34 the following features MUST be included in any official binary package:
35
36 * audio/video output
37 - fbdev
38 - JPEG/PNG/TGA
39 - (X)MGA
40 - OSS
41 - SDL
42 - tdfxfb
43 - (c/x)vidix
44 - X11/Xvideo
45
46 * codecs
47 - FAAD
48 - libavcodec(internal)
49 - native codecs (libmpeg2/liba52/mp3lib)
50 - Ogg Vorbis support
51 - RealPlayer codecs support
52 - Win32/VfW/DShow/QT codecs support
53 - XAnim codecs support
54
55 * general:
56 - default font
57 - FreeType fonts support
58 - HTML documentation
59 - large file support
60 - man page(s)
61
62 * input/demuxers:
63 - DVD(mpdvdkit2)
64 - streaming
65 - Matroska(internal)
66 - (S)VCD
67 - tv(v4l/v4l2)
68
69 There is great demand for the GUI, so it SHOULD be included, but it MUST
70 come as a separate package (see Tips and Tricks for details).
71
72 Including other features, like LIVE.COM streaming or JACK support, is
73 acceptable. They SHOULD, however, be build-time configurable, with the
74 default build configuration containing the above set.
75
76 It seems there are some packages in the wild which lack included docs.
77 This is VERY BAD, as it forces users to look for outside support when most
78 of the common problems are easy to solve and are already described in the
79 docs, thus increasing the number of repeated posts in MPlayer mailing
80 lists. Binary packages MUST include both the man page and HTML
81 documentation. Translated versions SHOULD be included, even if your
82 package management system does not provide specific support for
83 internationalization.
84
85 Libavcodec MUST always be in the latest development version and it SHOULD
86 be linked statically into mplayer binary, because MPlayer requires a
87 recent libavcodec snapshot. While some distributions provide ffmpeg
88 packages containing shared libavcodec library, they are often based on the
89 last "release" version of ffmpeg, which is quite old and will usually not
90 function with MPlayer.
91
92
93 File locations
94 ~~~~~~~~~~~~~~
95 In general, you SHOULD follow your distribution guidelines. For example,
96 for RedHat and Fedora RPMs I am using FHS-compliant paths:
97
98 /etc/mplayer/ system-wide configs
99 /usr/bin/ binaries
100 /usr/lib/codecs/ binary codecs
101 /usr/share/doc/mplayer-version/ docs
102 /usr/share/man/man1/ man page
103 /usr/share/man/XX/man1/ translated man page
104 /usr/share/mplayer/font/ fonts
105 /usr/share/mplayer/Skin/ GUI skins
106
107 You MUST never include the codecs.conf file in your package. It is useful
108 only for development purposes and often causes obscure problems for users.
109
110
111 One package or many packages?
112 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
113 Although it is tempting to simply provide a single all-in-one package,
114 I think it is best to split MPlayer into several packages. It may be
115 a little more troublesome for less clueful users, but it allows you to
116 install only what you need. This is the layout I am using for RedHat and
117 Fedora RPMs:
118
119 mencoder contains MEncoder binary (mencoder)
120 mplayer contains MPlayer binary without GUI (mplayer),
121 config files, man pages and documentation;
122 required by mplayer-gui
123 mplayer-codecs-* contain binary codecs available from MPlayer's site
124 mplayer-font-* contain various bitmap fonts for OSD (obsolete)
125 mplayer-gui contains MPlayer binary with GUI (gmplayer);
126 requires default skin package
127 mplayer-skin-* contain various MPlayer GUI skins
128 mplayer-vidix contains vidix support library for MPlayer
129 mplayer-vidix-* contain vidix drivers for specific cards, one per package
130
131 There is no strict policy for now, just use your common sense.
132
133
134 Compilation
135 ~~~~~~~~~~~
136 While it is acceptable to provide packages optimized for specific CPUs,
137 you MUST provide at least one "lowest common denominator" package set
138 that will work on all CPUs. This means it MUST be configured with
139 --enable-runtime-cpudetection option. Building for specific CPUs requires
140 disabling this option, but try to make sure that users cannot accidentally
141 install a package not suitable for their CPU. With RPMs, for example, this
142 is handled automatically, when building with "--target arch" rpm option.
143
144 Compiler flags MUST be set to either configure-generated CFLAGS or something
145 as close to them as possible.
146
147 Users MUST be able to rebuild your source package without hand-editing on
148 any system with the same distribution installed. Remember to disable
149 (--disable-xxx) any optional features, because MPlayer's configure script
150 autodetects most of them. This ensures that binary package builds are
151 deterministic -- that is, provided they have at least the required
152 development packages installed, two different people using the same
153 distribution will get binaries with the same dependencies.
154
155 You SHOULD provide an option to rebuild the package with full debug
156 information enabled (by passing --enable-debug=3 to ./configure and
157 disabling any stripping of binaries and libs during the build process).
158 For example my source RPM can be rebuilt with "--with debug" option, which
159 does just that, making it easier to supply gdb information along with any
160 bug reports, while retaining all benefits of using binary packages.
161
162
163 Modifications
164 ~~~~~~~~~~~~~
165
166 You MUST modify `mplayer -v` output so that it is clear that a user is
167 using your binary package, by patching version.h and modifying the version
168 string inside. Suggested convention is to include distribution name and,
169 possibly, the signature of the packager or the repository. For example:
170
171 original:
172 MPlayer 1.0pre5-3.3.2 (C) 2000-2004 MPlayer Team
173 modified:
174 MPlayer 1.0pre5-Fedora-GS-3.3.2 (C) 2000-2004 MPlayer Team
175 MPlayer 1.0pre5-Mandrake-PLF-3.2.3 (C) 2000-2004 MPlayer Team
176 MPlayer 1.0pre5-Solaris-3.4.0 (C) 2000-2004 MPlayer Team
177
178
179 Tips and tricks
180 ~~~~~~~~~~~~~~~
181 In my package layout, mplayer and mplayer-gui can be installed at the same
182 time, because they contain differently named binaries and there is no
183 conflict. The trick is to build MPlayer once with --enable-gui, rename the
184 resulting binary to "gmplayer" and then build it again, without GUI, but
185 keeping the rest of ./configure options the same.
186
187 To provide man pages for all MPlayer suite binaries (mplayer, gmplayer,
188 mencoder), you can use man-links instead of regular symbolic links.
189 Creating a mencoder man page linked to mplayer is as simple as:
190
191 echo ".so mplayer.1" >> mencoder.1
192
193 Similar trick can be used for "man gmplayer". This avoids problems with
194 gzipped man pages and symbolic links.
195
196 Newer RedHat and Fedora distributions keep localized man pages encoded in
197 UTF-8. If your distribution does the same, make sure you convert MPlayer's
198 translated man pages to UTF-8 so that man mplayer works for locales other
199 than English.