Makefile 13.8 KB
Newer Older
1
#
Fabrice Bellard's avatar
Fabrice Bellard committed
2
# Main ffmpeg Makefile
3
# (c) 2000-2004 Fabrice Bellard
Fabrice Bellard's avatar
Fabrice Bellard committed
4
#
5
include config.mak
Fabrice Bellard's avatar
Fabrice Bellard committed
6

7 8
SRC_DIR = $(SRC_PATH_BARE)

9 10 11
vpath %.c    $(SRC_PATH_BARE)
vpath %.h    $(SRC_PATH_BARE)
vpath %.texi $(SRC_PATH_BARE)
12

Måns Rullgård's avatar
Måns Rullgård committed
13 14 15
PROGS-$(CONFIG_FFMPEG)   += ffmpeg
PROGS-$(CONFIG_FFPLAY)   += ffplay
PROGS-$(CONFIG_FFSERVER) += ffserver
Fabrice Bellard's avatar
Fabrice Bellard committed
16

Diego Biurrun's avatar
Diego Biurrun committed
17 18
PROGS       = $(addsuffix   $(EXESUF), $(PROGS-yes))
PROGS_G     = $(addsuffix _g$(EXESUF), $(PROGS-yes))
19
PROGS_SRCS  = $(addsuffix .c,          $(PROGS-yes)) cmdutils.c
Diego Biurrun's avatar
Diego Biurrun committed
20
MANPAGES    = $(addprefix doc/, $(addsuffix .1, $(PROGS-yes)))
Fabrice Bellard's avatar
Fabrice Bellard committed
21

Diego Biurrun's avatar
Diego Biurrun committed
22 23 24 25
BASENAMES   = ffmpeg ffplay ffserver
ALLPROGS    = $(addsuffix   $(EXESUF), $(BASENAMES))
ALLPROGS_G  = $(addsuffix _g$(EXESUF), $(BASENAMES))
ALLMANPAGES = $(addsuffix .1, $(BASENAMES))
26

27 28 29
FFLIBS-$(CONFIG_AVFILTER) += avfilter
FFLIBS-$(CONFIG_POSTPROC) += postproc
FFLIBS-$(CONFIG_SWSCALE)  += swscale
30

31
FFLIBS := avdevice avformat avcodec avutil
32

33 34 35 36
ALL_TARGETS-$(CONFIG_VHOOK) += videohook
ALL_TARGETS-$(BUILD_DOC)    += documentation

INSTALL_TARGETS-$(CONFIG_VHOOK) += install-vhook
37 38
ifneq ($(PROGS),)
INSTALL_TARGETS-yes             += install-progs
39
INSTALL_TARGETS-$(BUILD_DOC)    += install-man
40
endif
41
INSTALL_PROGS_TARGETS-$(BUILD_SHARED) = install-libs
42

Måns Rullgård's avatar
Måns Rullgård committed
43
main: lib $(PROGS) $(ALL_TARGETS-yes)
44

Måns Rullgård's avatar
Måns Rullgård committed
45
$(PROGS): %$(EXESUF): %_g$(EXESUF)
46 47 48
	cp -p $< $@
	$(STRIP) $@

49 50
.depend: version.h $(PROGS_SRCS)

51 52 53
# bandaid to disable triggering shared library installation routines
DISABLE=yes

54 55
include common.mak

56 57 58
S := $(BUILD_SHARED:yes=S)
DEP_LIBS := $(foreach L,$(FFLIBS),lib$(L)/$($(S)LIBPREF)$(L)$($(S)LIBSUF))

59
VHOOKCFLAGS += $(filter-out -mdynamic-no-pic,$(CFLAGS))
60 61 62 63 64 65 66 67 68 69 70 71

BASEHOOKS = fish null watermark
ALLHOOKS = $(BASEHOOKS) drawtext imlib2 ppm
ALLHOOKS_SRCS = $(addprefix vhook/, $(addsuffix .c, $(ALLHOOKS)))

HOOKS-$(HAVE_FORK)      += ppm
HOOKS-$(HAVE_IMLIB2)    += imlib2
HOOKS-$(HAVE_FREETYPE2) += drawtext

HOOKS = $(addprefix vhook/, $(addsuffix $(SLIBSUF), $(BASEHOOKS) $(HOOKS-yes)))

VHOOKCFLAGS-$(HAVE_IMLIB2) += `imlib2-config --cflags`
Måns Rullgård's avatar
Måns Rullgård committed
72
LIBS_imlib2$(SLIBSUF)       = `imlib2-config --libs`
73 74

VHOOKCFLAGS-$(HAVE_FREETYPE2) += `freetype-config --cflags`
Måns Rullgård's avatar
Måns Rullgård committed
75
LIBS_drawtext$(SLIBSUF)        = `freetype-config --libs`
76 77

VHOOKCFLAGS += $(VHOOKCFLAGS-yes)
78

79 80
vhook/%.o: CFLAGS:=$(VHOOKCFLAGS)

81 82 83
MAKE-yes = $(MAKE)
MAKE-    = : $(MAKE)

Fabrice Bellard's avatar
Fabrice Bellard committed
84
lib:
Måns Rullgård's avatar
Måns Rullgård committed
85 86 87 88
	$(MAKE)                    -C libavutil   all
	$(MAKE)                    -C libavcodec  all
	$(MAKE)                    -C libavformat all
	$(MAKE)                    -C libavdevice all
89
	$(MAKE-$(CONFIG_POSTPROC)) -C libpostproc all
90
	$(MAKE-$(CONFIG_SWSCALE))  -C libswscale  all
91
	$(MAKE-$(CONFIG_AVFILTER)) -C libavfilter all
Fabrice Bellard's avatar
Fabrice Bellard committed
92

93 94
ffplay_g$(EXESUF): EXTRALIBS += $(SDL_LIBS)
ffserver_g$(EXESUF): LDFLAGS += $(FFSERVERLDFLAGS)
Fabrice Bellard's avatar
Fabrice Bellard committed
95

96 97
%_g$(EXESUF): %.o cmdutils.o .libs
	$(CC) $(LDFLAGS) -o $@ $< cmdutils.o $(EXTRALIBS)
Fabrice Bellard's avatar
Fabrice Bellard committed
98

99 100 101 102 103
SVN_ENTRIES = $(SRC_PATH_BARE)/.svn/entries
ifeq ($(wildcard $(SVN_ENTRIES)),$(SVN_ENTRIES))
version.h: $(SVN_ENTRIES)
endif

104
version.h:
105
	$(SRC_PATH)/version.sh $(SRC_PATH)
106

Fabrice Bellard's avatar
Fabrice Bellard committed
107
output_example$(EXESUF): output_example.o .libs
108
	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(EXTRALIBS)
109

110 111
tools/%$(EXESUF): tools/%.c
	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(EXTRALIBS)
112

113
ffplay.o .depend: CFLAGS += $(SDL_CFLAGS)
114

115 116
ffmpeg.o ffplay.o ffserver.o: version.h

117 118
# vhooks compile fine without libav*, but need them nonetheless.
videohook: .libs $(HOOKS)
119 120

vhook/%$(SLIBSUF): vhook/%.o
121
	$(CC) $(LDFLAGS) -o $@ $(VHOOKSHFLAGS) $< $(VHOOKLIBS) $(LIBS_$(@F))
122

123
documentation: $(addprefix doc/, ffmpeg-doc.html faq.html ffserver-doc.html \
124 125
                                 ffplay-doc.html general.html hooks.html \
                                 $(ALLMANPAGES))
126 127 128 129 130 131 132 133 134 135

doc/%.html: doc/%.texi
	texi2html -monolithic -number $<
	mv $(@F) $@

doc/%.pod: doc/%-doc.texi
	doc/texi2pod.pl $< $@

doc/%.1: doc/%.pod
	pod2man --section=1 --center=" " --release=" " $< > $@
136

137 138
install: $(INSTALL_TARGETS-yes)

139
install-progs: $(PROGS) $(INSTALL_PROGS_TARGETS-yes)
140 141
	install -d "$(BINDIR)"
	install -c -m 755 $(PROGS) "$(BINDIR)"
Fabrice Bellard's avatar
Fabrice Bellard committed
142

143
install-man:
144 145
	install -d "$(MANDIR)/man1"
	install -m 644 $(MANPAGES) "$(MANDIR)/man1"
146

147
install-vhook: videohook
148 149
	install -d "$(SHLIBDIR)/vhook"
	install -m 755 $(HOOKS) "$(SHLIBDIR)/vhook"
150

151
install-libs:
Måns Rullgård's avatar
Måns Rullgård committed
152 153 154 155
	$(MAKE)                    -C libavutil   install-libs
	$(MAKE)                    -C libavcodec  install-libs
	$(MAKE)                    -C libavformat install-libs
	$(MAKE)                    -C libavdevice install-libs
156
	$(MAKE-$(CONFIG_POSTPROC)) -C libpostproc install-libs
157
	$(MAKE-$(CONFIG_SWSCALE))  -C libswscale  install-libs
158
	$(MAKE-$(CONFIG_AVFILTER)) -C libavfilter install-libs
159

160
install-headers::
161 162 163 164
	$(MAKE)                    -C libavutil   install-headers
	$(MAKE)                    -C libavcodec  install-headers
	$(MAKE)                    -C libavformat install-headers
	$(MAKE)                    -C libavdevice install-headers
165
	$(MAKE-$(CONFIG_POSTPROC)) -C libpostproc install-headers
166
	$(MAKE)                    -C libswscale  install-headers
167
	$(MAKE-$(CONFIG_AVFILTER)) -C libavfilter install-headers
168

169
uninstall: uninstall-progs uninstall-man uninstall-vhook
Diego Biurrun's avatar
Diego Biurrun committed
170 171

uninstall-progs:
172
	rm -f $(addprefix "$(BINDIR)/", $(ALLPROGS))
Diego Biurrun's avatar
Diego Biurrun committed
173 174

uninstall-man:
175
	rm -f $(addprefix "$(MANDIR)/man1/",$(ALLMANPAGES))
Diego Biurrun's avatar
Diego Biurrun committed
176 177

uninstall-vhook:
178
	rm -f $(addprefix "$(SHLIBDIR)/",$(ALLHOOKS_SRCS:.c=$(SLIBSUF)))
179
	-rmdir "$(SHLIBDIR)/vhook/"
Diego Biurrun's avatar
Diego Biurrun committed
180

181
uninstall-libs::
Diego Biurrun's avatar
Diego Biurrun committed
182 183 184
	$(MAKE) -C libavutil   uninstall-libs
	$(MAKE) -C libavcodec  uninstall-libs
	$(MAKE) -C libavformat uninstall-libs
Luca Abeni's avatar
Luca Abeni committed
185
	$(MAKE) -C libavdevice uninstall-libs
186
	$(MAKE) -C libpostproc uninstall-libs
187
	$(MAKE) -C libswscale  uninstall-libs
188
	$(MAKE) -C libavfilter uninstall-libs
Diego Biurrun's avatar
Diego Biurrun committed
189

190
uninstall-headers::
Diego Biurrun's avatar
Diego Biurrun committed
191 192 193
	$(MAKE) -C libavutil   uninstall-headers
	$(MAKE) -C libavcodec  uninstall-headers
	$(MAKE) -C libavformat uninstall-headers
Luca Abeni's avatar
Luca Abeni committed
194
	$(MAKE) -C libavdevice uninstall-headers
195
	$(MAKE) -C libpostproc uninstall-headers
196
	$(MAKE) -C libswscale  uninstall-headers
197
	$(MAKE) -C libavfilter uninstall-headers
198
	-rmdir "$(INCDIR)"
Diego Biurrun's avatar
Diego Biurrun committed
199

200
depend dep: .vhookdep
Måns Rullgård's avatar
Måns Rullgård committed
201 202 203 204
	$(MAKE)                    -C libavutil   depend
	$(MAKE)                    -C libavcodec  depend
	$(MAKE)                    -C libavformat depend
	$(MAKE)                    -C libavdevice depend
205
	$(MAKE-$(CONFIG_POSTPROC)) -C libpostproc depend
206
	$(MAKE-$(CONFIG_SWSCALE))  -C libswscale  depend
207
	$(MAKE-$(CONFIG_AVFILTER)) -C libavfilter depend
208

209
.vhookdep: $(ALLHOOKS_SRCS) version.h
210
	$(VHOOK_DEPEND_CMD) > $@
Zdenek Kabelac's avatar
Zdenek Kabelac committed
211

212 213 214 215
$(DEP_LIBS): lib

.libs: $(DEP_LIBS)
	touch $@
216

217
clean::
218 219
	$(MAKE) -C libavutil   clean
	$(MAKE) -C libavcodec  clean
220
	$(MAKE) -C libavformat clean
Luca Abeni's avatar
Luca Abeni committed
221
	$(MAKE) -C libavdevice clean
222
	$(MAKE) -C libpostproc clean
223
	$(MAKE) -C libswscale  clean
224
	$(MAKE) -C libavfilter clean
225
	rm -f .libs gmon.out TAGS $(ALLPROGS) $(ALLPROGS_G) \
226
	   output_example$(EXESUF)
227
	rm -f doc/*.html doc/*.pod doc/*.1
228 229
	rm -rf tests/vsynth1 tests/vsynth2 tests/data tests/asynth1.sw tests/*~
	rm -f $(addprefix tests/,$(addsuffix $(EXESUF),audiogen videogen rotozoom seek_test tiny_psnr))
230
	rm -f $(addprefix tools/,$(addsuffix $(EXESUF),cws2fws pktdumper qt-faststart trasher))
231
	rm -f vhook/*.o vhook/*~ vhook/*.so vhook/*.dylib vhook/*.dll
232

233
distclean::
234 235 236
	$(MAKE) -C libavutil   distclean
	$(MAKE) -C libavcodec  distclean
	$(MAKE) -C libavformat distclean
Luca Abeni's avatar
Luca Abeni committed
237
	$(MAKE) -C libavdevice distclean
238
	$(MAKE) -C libpostproc distclean
239
	$(MAKE) -C libswscale  distclean
240
	$(MAKE) -C libavfilter distclean
241
	rm -f .vhookdep version.h config.* *.pc
Fabrice Bellard's avatar
Fabrice Bellard committed
242

243 244
# regression tests

245 246 247 248 249 250 251 252
fulltest test: codectest libavtest seektest

FFMPEG_REFFILE   = $(SRC_PATH)/tests/ffmpeg.regression.ref
FFSERVER_REFFILE = $(SRC_PATH)/tests/ffserver.regression.ref
LIBAV_REFFILE    = $(SRC_PATH)/tests/libav.regression.ref
ROTOZOOM_REFFILE = $(SRC_PATH)/tests/rotozoom.regression.ref
SEEK_REFFILE     = $(SRC_PATH)/tests/seek.regression.ref

253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290
CODEC_TESTS = $(addprefix regtest-,             \
        mpeg                                    \
        mpeg2                                   \
        mpeg2thread                             \
        msmpeg4v2                               \
        msmpeg4                                 \
        wmv1                                    \
        wmv2                                    \
        h261                                    \
        h263                                    \
        h263p                                   \
        mpeg4                                   \
        huffyuv                                 \
        rc                                      \
        mpeg4adv                                \
        mpeg4thread                             \
        error                                   \
        mpeg4nr                                 \
        mpeg1b                                  \
        mjpeg                                   \
        ljpeg                                   \
        jpegls                                  \
        rv10                                    \
        rv20                                    \
        asv1                                    \
        asv2                                    \
        flv                                     \
        ffv1                                    \
        snow                                    \
        snowll                                  \
        dv                                      \
        dv50                                    \
        svq1                                    \
        flashsv                                 \
        mp2                                     \
        ac3                                     \
        g726                                    \
        adpcm_ima_wav                           \
291
        adpcm_ima_qt                            \
292 293 294 295 296 297 298
        adpcm_ms                                \
        adpcm_yam                               \
        adpcm_swf                               \
        flac                                    \
        wma                                     \
    )

299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334
LAVF_TESTS = $(addprefix regtest-,              \
        avi                                     \
        asf                                     \
        rm                                      \
        mpg                                     \
        ts                                      \
        swf                                     \
        ffm                                     \
        flv_fmt                                 \
        mov                                     \
        dv_fmt                                  \
        gxf                                     \
        nut                                     \
        mkv                                     \
        pbmpipe                                 \
        pgmpipe                                 \
        ppmpipe                                 \
        gif                                     \
        yuv4mpeg                                \
        pgm                                     \
        ppm                                     \
        bmp                                     \
        tga                                     \
        tiff                                    \
        sgi                                     \
        jpg                                     \
        wav                                     \
        alaw                                    \
        mulaw                                   \
        au                                      \
        mmf                                     \
        aiff                                    \
        voc                                     \
        ogg                                     \
        pixfmt                                  \
    )
335 336 337 338 339 340 341 342 343 344 345 346 347

REGFILES = $(addprefix tests/data/,$(addsuffix .$(1),$(2:regtest-%=%)))

CODEC_ROTOZOOM = $(call REGFILES,rotozoom.regression,$(CODEC_TESTS))
CODEC_VSYNTH   = $(call REGFILES,vsynth.regression,$(CODEC_TESTS))

LAVF_REGFILES = $(call REGFILES,lavf.regression,$(LAVF_TESTS))

LAVF_REG     = tests/data/lavf.regression
ROTOZOOM_REG = tests/data/rotozoom.regression
VSYNTH_REG   = tests/data/vsynth.regression

codectest: $(VSYNTH_REG) $(ROTOZOOM_REG)
348 349
	diff -u -w $(FFMPEG_REFFILE)   $(VSYNTH_REG)
	diff -u -w $(ROTOZOOM_REFFILE) $(ROTOZOOM_REG)
350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369

libavtest: $(LAVF_REG)
	diff -u -w $(LIBAV_REFFILE) $(LAVF_REG)

$(VSYNTH_REG) $(ROTOZOOM_REG) $(LAVF_REG):
	cat $^ > $@

$(LAVF_REG):     $(LAVF_REGFILES)
$(ROTOZOOM_REG): $(CODEC_ROTOZOOM)
$(VSYNTH_REG):   $(CODEC_VSYNTH)

$(CODEC_VSYNTH) $(CODEC_ROTOZOOM): $(CODEC_TESTS)

$(LAVF_REGFILES): $(LAVF_TESTS)

$(CODEC_TESTS) $(LAVF_TESTS): regtest-ref

regtest-ref: ffmpeg$(EXESUF) tests/vsynth1/00.pgm tests/vsynth2/00.pgm tests/asynth1.sw

$(CODEC_TESTS) regtest-ref: tests/tiny_psnr$(EXESUF)
370 371
	$(SRC_PATH)/tests/regression.sh $@ vsynth   tests/vsynth1 a
	$(SRC_PATH)/tests/regression.sh $@ rotozoom tests/vsynth2 a
372 373

$(LAVF_TESTS):
374
	$(SRC_PATH)/tests/regression.sh $@ lavf tests/vsynth1 b
375 376 377 378

seektest: codectest libavtest tests/seek_test$(EXESUF)
	$(SRC_PATH)/tests/seek_test.sh $(SEEK_REFFILE)

379
test-server: ffserver$(EXESUF) tests/vsynth1/00.pgm tests/asynth1.sw
380 381 382 383 384 385
	@echo
	@echo "Unfortunately ffserver is broken and therefore its regression"
	@echo "test fails randomly. Treat the results accordingly."
	@echo
	$(SRC_PATH)/tests/server-regression.sh $(FFSERVER_REFFILE) $(SRC_PATH)/tests/test.conf

386
ifeq ($(CONFIG_SWSCALE),yes)
387
test-server codectest $(CODEC_TESTS) libavtest: swscale_error
388 389
swscale_error:
	@echo
390
	@echo "This regression test is incompatible with --enable-swscale."
391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408
	@echo
	@exit 1
endif

tests/vsynth1/00.pgm: tests/videogen$(EXESUF)
	mkdir -p tests/vsynth1
	$(BUILD_ROOT)/$< 'tests/vsynth1/'

tests/vsynth2/00.pgm: tests/rotozoom$(EXESUF)
	mkdir -p tests/vsynth2
	$(BUILD_ROOT)/$< 'tests/vsynth2/' $(SRC_PATH)/tests/lena.pnm

tests/asynth1.sw: tests/audiogen$(EXESUF)
	$(BUILD_ROOT)/$< $@

%$(EXESUF): %.c
	$(CC) $(LDFLAGS) $(CFLAGS) -o $@ $<

409
tests/seek_test$(EXESUF): tests/seek_test.c .libs
410
	$(CC) $(LDFLAGS) $(CFLAGS) -o $@ $< $(EXTRALIBS)
411

412

413
.PHONY: lib videohook documentation TAGS
414
.PHONY: codectest libavtest seektest test-server fulltest test
415
.PHONY: $(CODEC_TESTS) $(LAVF_TESTS) regtest-ref swscale-error
416

417
-include .vhookdep