1
by epii
first commit. |
1 |
#
|
2 |
# This Makefile provides automatic build environment for FFmpeg
|
|
3 |
#
|
|
4 |
||
5 |
####################################################################################################
|
|
6 |
# Configuration
|
|
7 |
||
8 |
# commands
|
|
9 |
RM = rm -rf |
|
10 |
CD = cd |
|
11 |
TOUCH = touch |
|
12 |
QUILT = quilt |
|
13 |
SVN = svn |
|
14 |
GIT = git |
|
15 |
BZR = bzr |
|
16 |
CHECKINSTALL = checkinstall --backup=no --default |
|
17 |
||
18 |
# version suffix (.deb)
|
|
19 |
VERSION_SUFFIX = $(shell date +%Y%m%d) |
|
20 |
||
21 |
# libx264 configure script options
|
|
22 |
X264_OPTS ?= --enable-pic --enable-shared |
|
23 |
||
24 |
# FFmpeg configure script options
|
|
25 |
FFMPEG_OPTS ?= \ |
|
26 |
--enable-gpl --enable-version3 --enable-nonfree \
|
|
27 |
--enable-postproc --enable-pthreads --enable-runtime-cpudetect --enable-pic --disable-stripping \
|
|
28 |
--enable-avfilter --enable-vdpau --enable-bzlib --enable-zlib --enable-vaapi --enable-x11grab \
|
|
29 |
--enable-libfaac --enable-libmp3lame \
|
|
30 |
--enable-libopencore-amrnb --enable-libopencore-amrwb \
|
|
31 |
--enable-libx264 --enable-libxvid --enable-libtheora --enable-libvorbis \
|
|
32 |
--enable-libdirac --enable-libschroedinger \
|
|
33 |
--enable-libopenjpeg --enable-libgsm --enable-libspeex --enable-libdc1394 |
|
34 |
||
35 |
# FFmpeg repository root
|
|
36 |
FFMPEG_REPOS_ROOT = svn://svn.ffmpeg.org/ffmpeg |
|
37 |
# libx264 repository root
|
|
38 |
X264_REPOS_ROOT = git://git.videolan.org/x264.git |
|
39 |
# FFmpeg mobile mod repository root
|
|
40 |
FFMPEG_MM_REPOS_ROOT = lp:~epii/+junk/ffmpeg-mm |
|
41 |
||
42 |
# FFmpeg repository directory
|
|
43 |
FFMPEG_REPOS_DIR = ffmpeg_repos |
|
44 |
# libx264 repository directory
|
|
45 |
X264_REPOS_DIR = x264_repos |
|
46 |
# FFmpeg mobile mod repository directory
|
|
47 |
FFMPEG_MM_REPOS_DIR = $(FFMPEG_REPOS_DIR)/patches |
|
48 |
||
49 |
# suite
|
|
50 |
SUITE = $(shell lsb_release --codename --short) |
|
51 |
||
52 |
# all extra tools (or, more precisely targets) that should be run
|
|
53 |
FFMPEG_CONFIGURE_EXTRA_DEPENDS_ALL = ffmpeg-mm-all |
|
54 |
||
55 |
####################################################################################################
|
|
56 |
# PHONY targets
|
|
57 |
.PHONY: all clean |
|
58 |
||
59 |
all: ffmpeg-all |
|
60 |
||
61 |
clean: ffmpeg-clean ffmpeg-mm-clean x264-clean |
|
62 |
$(RM) *-stamp |
|
63 |
||
64 |
####################################################################################################
|
|
65 |
# Suit specific rules
|
|
66 |
||
67 |
ifeq ($(SUITE), karmic)
|
|
68 |
ffmpeg-configure-extra-depends-stamp: $(FFMPEG_CONFIGURE_EXTRA_DEPENDS_ALL) x264-install-stamp |
|
69 |
else ifeq ($(SUITE), lucid)
|
|
70 |
ffmpeg-configure-extra-depends-stamp: $(FFMPEG_CONFIGURE_EXTRA_DEPENDS_ALL) x264-install-stamp |
|
71 |
else ifeq ($(SUITE), maverick)
|
|
72 |
ffmpeg-configure-extra-depends-stamp: $(FFMPEG_CONFIGURE_EXTRA_DEPENDS_ALL) |
|
73 |
else
|
|
74 |
ffmpeg-configure-extra-depends-stamp: $(FFMPEG_CONFIGURE_EXTRA_DEPENDS_ALL) |
|
75 |
endif
|
|
76 |
$(TOUCH) $@ |
|
77 |
||
78 |
####################################################################################################
|
|
79 |
# FFmpeg
|
|
80 |
.PHONY: ffmpeg-all ffmpeg-clean ffmpeg-repos ffmpeg-update ffmpeg-configure ffmpeg-build ffmpeg-install |
|
81 |
||
82 |
ffmpeg-all: ffmpeg-install-stamp |
|
83 |
||
84 |
ffmpeg-clean: |
|
85 |
-sudo $(RM) $(FFMPEG_REPOS_DIR)/doc-pak $(FFMPEG_REPOS_DIR)/*.deb $(FFMPEG_REPOS_DIR)/description-pak |
|
86 |
-$(CD) $(FFMPEG_REPOS_DIR) && $(MAKE) clean |
|
87 |
||
88 |
ffmpeg-repos: ffmpeg-repos-stamp |
|
89 |
ffmpeg-repos-stamp: |
|
90 |
if [ ! -d $(FFMPEG_REPOS_DIR) ]; then \
|
|
91 |
$(SVN) checkout $(FFMPEG_REPOS_ROOT)/trunk $(FFMPEG_REPOS_DIR); \
|
|
92 |
fi
|
|
93 |
$(TOUCH) $@ |
|
94 |
||
95 |
ffmpeg-update: ffmpeg-update-stamp |
|
96 |
ffmpeg-update-stamp: ffmpeg-repos-stamp |
|
97 |
$(MAKE) ffmpeg-mm-clean |
|
98 |
$(CD) $(FFMPEG_REPOS_DIR) && $(SVN) update |
|
99 |
$(TOUCH) $@ |
|
100 |
||
101 |
ffmpeg-configure: ffmpeg-configure-stamp |
|
102 |
ffmpeg-configure-stamp: ffmpeg-update-stamp ffmpeg-configure-extra-depends-stamp |
|
103 |
$(CD) $(FFMPEG_REPOS_DIR) && ./configure $(FFMPEG_OPTS) |
|
104 |
$(TOUCH) $@ |
|
105 |
||
106 |
ffmpeg-build: ffmpeg-build-stamp |
|
107 |
ffmpeg-build-stamp: ffmpeg-configure-stamp |
|
108 |
$(CD) $(FFMPEG_REPOS_DIR) && $(MAKE) all |
|
109 |
$(TOUCH) $@ |
|
110 |
||
111 |
ffmpeg-install: ffmpeg-install-stamp |
|
112 |
ffmpeg-install-stamp: ffmpeg-build-stamp |
|
113 |
$(CD) $(FFMPEG_REPOS_DIR) && sudo $(CHECKINSTALL) --pkgname ffmpeg --pkgversion "4:0.6+svn$(VERSION_SUFFIX)" |
|
114 |
$(TOUCH) $@ |
|
115 |
||
116 |
####################################################################################################
|
|
117 |
# FFmpeg mobile mod
|
|
118 |
.PHONY: ffmpeg-mm-all ffmpeg-mm-clean ffmpeg-mm-repos ffmpeg-mm-update ffmpeg-mm-apply |
|
119 |
||
120 |
ffmpeg-mm-all: ffmpeg-mm-apply-stamp |
|
121 |
||
122 |
ffmpeg-mm-clean: |
|
123 |
-$(CD) $(FFMPEG_REPOS_DIR) && $(QUILT) pop -a |
|
124 |
||
125 |
ffmpeg-mm-repos: ffmpeg-mm-repos-stamp |
|
126 |
ffmpeg-mm-repos-stamp: ffmpeg-repos-stamp |
|
127 |
if [ ! -d $(FFMPEG_MM_REPOS_DIR) ]; then \
|
|
128 |
$(BZR) branch $(FFMPEG_MM_REPOS_ROOT) $(FFMPEG_MM_REPOS_DIR); \
|
|
129 |
fi
|
|
130 |
$(TOUCH) $@ |
|
131 |
||
132 |
ffmpeg-mm-update: ffmpeg-mm-update-stamp |
|
133 |
ffmpeg-mm-update-stamp: ffmpeg-mm-repos-stamp |
|
134 |
$(CD) $(FFMPEG_MM_REPOS_DIR) && $(BZR) pull |
|
135 |
$(TOUCH) $@ |
|
136 |
||
137 |
ffmpeg-mm-apply: ffmpeg-mm-apply-stamp |
|
138 |
ffmpeg-mm-apply-stamp: ffmpeg-mm-update-stamp |
|
139 |
$(CD) $(FFMPEG_REPOS_DIR) && $(QUILT) push -a |
|
140 |
$(TOUCH) $@ |
|
141 |
||
142 |
####################################################################################################
|
|
143 |
# x264
|
|
144 |
.PHONY: x264-all x264-clean x264-repos x264-update x264-configure x264-build x264-install |
|
145 |
||
146 |
x264-all: x264-install-stamp |
|
147 |
||
148 |
x264-clean: |
|
149 |
-sudo $(RM) $(X264_REPOS_DIR)/doc-pak $(X264_REPOS_DIR)/*.deb $(X264_REPOS_DIR)/description-pak |
|
150 |
-$(CD) $(X264_REPOS_DIR) && $(MAKE) clean |
|
151 |
||
152 |
x264-repos: x264-repos-stamp |
|
153 |
x264-repos-stamp: |
|
154 |
if [ ! -d $(X264_REPOS_DIR) ]; then \
|
|
155 |
$(GIT) clone $(X264_REPOS_ROOT) $(X264_REPOS_DIR); \
|
|
156 |
fi
|
|
157 |
$(TOUCH) $@ |
|
158 |
||
159 |
x264-update: x264-update-stamp |
|
160 |
x264-update-stamp: x264-repos-stamp |
|
161 |
$(CD) $(X264_REPOS_DIR) && $(GIT) pull |
|
162 |
$(TOUCH) $@ |
|
163 |
||
164 |
x264-configure: x264-configure-stamp |
|
165 |
x264-configure-stamp: x264-update-stamp |
|
166 |
$(CD) $(X264_REPOS_DIR) && ./configure $(X264_OPTS) |
|
167 |
$(TOUCH) $@ |
|
168 |
||
169 |
x264-build: x264-build-stamp |
|
170 |
x264-build-stamp: x264-configure-stamp |
|
171 |
$(CD) $(X264_REPOS_DIR) && $(MAKE) |
|
172 |
$(TOUCH) $@ |
|
173 |
||
174 |
x264-install: x264-install-stamp |
|
175 |
x264-install-stamp: x264-build-stamp |
|
176 |
$(CD) $(X264_REPOS_DIR) && sudo $(CHECKINSTALL) --pkgname x264 --pkgversion "2:1+git$(VERSION_SUFFIX)" |
|
177 |
$(TOUCH) $@ |
|
178 |