Makefile 14.3 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 30 31 32 33 34
LIBS-$(CONFIG_AVFILTER) += avfilter
LIBS-$(CONFIG_POSTPROC) += postproc
LIBS-$(CONFIG_SWSCALE)  += swscale

LIBS := avcodec avdevice avformat avutil $(LIBS-yes)

S := $(BUILD_SHARED:yes=S)
DEP_LIBS := $(foreach L,$(LIBS),lib$(L)/$($(S)LIBPREF)$(L)$($(S)LIBSUF))
35

36 37 38 39
ALL_TARGETS-$(CONFIG_VHOOK) += videohook
ALL_TARGETS-$(BUILD_DOC)    += documentation

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

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

Måns Rullgård's avatar
Måns Rullgård committed
48
$(PROGS): %$(EXESUF): %_g$(EXESUF)
49 50 51 52 53 54
	cp -p $< $@
	$(STRIP) $@

vhook/%.o: vhook/%.c
	$(CC) $(VHOOKCFLAGS) -c -o $@ $<

55 56
.depend: version.h $(PROGS_SRCS)

57 58 59
# bandaid to disable triggering shared library installation routines
DISABLE=yes

60 61
include common.mak

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

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
75
LIBS_imlib2$(SLIBSUF)       = `imlib2-config --libs`
76 77

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

VHOOKCFLAGS += $(VHOOKCFLAGS-yes)
81

82 83 84
LDFLAGS-$(CONFIG_SWSCALE) += -L$(BUILD_ROOT)/libswscale
LDFLAGS-$(CONFIG_AVFILTER) += -L$(BUILD_ROOT)/libavfilter
LDFLAGS := $(LDFLAGS-yes) -L$(BUILD_ROOT)/libavdevice -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil -g $(LDFLAGS)
Zdenek Kabelac's avatar
Zdenek Kabelac committed
85

86 87 88
EXTRALIBS-$(CONFIG_AVFILTER) += -lavfilter$(BUILDSUF)
EXTRALIBS-$(CONFIG_SWSCALE) += -lswscale$(BUILDSUF)
EXTRALIBS := $(EXTRALIBS-yes) -lavdevice$(BUILDSUF) -lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)
89

90 91 92
MAKE-yes = $(MAKE)
MAKE-    = : $(MAKE)

Fabrice Bellard's avatar
Fabrice Bellard committed
93
lib:
Måns Rullgård's avatar
Måns Rullgård committed
94 95 96 97
	$(MAKE)                    -C libavutil   all
	$(MAKE)                    -C libavcodec  all
	$(MAKE)                    -C libavformat all
	$(MAKE)                    -C libavdevice all
98
	$(MAKE-$(CONFIG_POSTPROC)) -C libpostproc all
99
	$(MAKE-$(CONFIG_SWSCALE))  -C libswscale  all
100
	$(MAKE-$(CONFIG_AVFILTER)) -C libavfilter all
Fabrice Bellard's avatar
Fabrice Bellard committed
101

102 103
ffplay_g$(EXESUF): EXTRALIBS += $(SDL_LIBS)
ffserver_g$(EXESUF): LDFLAGS += $(FFSERVERLDFLAGS)
Fabrice Bellard's avatar
Fabrice Bellard committed
104

105 106
%_g$(EXESUF): %.o cmdutils.o .libs
	$(CC) $(LDFLAGS) -o $@ $< cmdutils.o $(EXTRALIBS)
Fabrice Bellard's avatar
Fabrice Bellard committed
107

108 109 110 111 112
SVN_ENTRIES = $(SRC_PATH_BARE)/.svn/entries
ifeq ($(wildcard $(SVN_ENTRIES)),$(SVN_ENTRIES))
version.h: $(SVN_ENTRIES)
endif

113
version.h:
114
	$(SRC_PATH)/version.sh $(SRC_PATH)
115

Fabrice Bellard's avatar
Fabrice Bellard committed
116
output_example$(EXESUF): output_example.o .libs
117
	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(EXTRALIBS)
118

119 120
tools/%$(EXESUF): tools/%.c
	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $< $(EXTRALIBS)
121

122
ffplay.o .depend: CFLAGS += $(SDL_CFLAGS)
123

124 125
ffmpeg.o ffplay.o ffserver.o: version.h

126 127
# vhooks compile fine without libav*, but need them nonetheless.
videohook: .libs $(HOOKS)
128 129

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

132
documentation: $(addprefix doc/, ffmpeg-doc.html faq.html ffserver-doc.html \
133 134
                                 ffplay-doc.html general.html hooks.html \
                                 $(ALLMANPAGES))
135 136 137 138 139 140 141 142 143 144

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=" " $< > $@
145

146 147
install: $(INSTALL_TARGETS-yes)

148
install-progs: $(PROGS) $(INSTALL_PROGS_TARGETS-yes)
149 150
	install -d "$(BINDIR)"
	install -c -m 755 $(PROGS) "$(BINDIR)"
Fabrice Bellard's avatar
Fabrice Bellard committed
151

152
install-man:
153 154
	install -d "$(MANDIR)/man1"
	install -m 644 $(MANPAGES) "$(MANDIR)/man1"
155

156
install-vhook: videohook
157 158
	install -d "$(SHLIBDIR)/vhook"
	install -m 755 $(HOOKS) "$(SHLIBDIR)/vhook"
159

160
install-libs:
Måns Rullgård's avatar
Måns Rullgård committed
161 162 163 164
	$(MAKE)                    -C libavutil   install-libs
	$(MAKE)                    -C libavcodec  install-libs
	$(MAKE)                    -C libavformat install-libs
	$(MAKE)                    -C libavdevice install-libs
165
	$(MAKE-$(CONFIG_POSTPROC)) -C libpostproc install-libs
166
	$(MAKE-$(CONFIG_SWSCALE))  -C libswscale  install-libs
167
	$(MAKE-$(CONFIG_AVFILTER)) -C libavfilter install-libs
168

169
install-headers::
170 171 172 173
	$(MAKE)                    -C libavutil   install-headers
	$(MAKE)                    -C libavcodec  install-headers
	$(MAKE)                    -C libavformat install-headers
	$(MAKE)                    -C libavdevice install-headers
174
	$(MAKE-$(CONFIG_POSTPROC)) -C libpostproc install-headers
175
	$(MAKE)                    -C libswscale  install-headers
176
	$(MAKE-$(CONFIG_AVFILTER)) -C libavfilter install-headers
177

178
uninstall: uninstall-progs uninstall-man uninstall-vhook
Diego Biurrun's avatar
Diego Biurrun committed
179 180

uninstall-progs:
181
	rm -f $(addprefix "$(BINDIR)/", $(ALLPROGS))
Diego Biurrun's avatar
Diego Biurrun committed
182 183

uninstall-man:
184
	rm -f $(addprefix "$(MANDIR)/man1/",$(ALLMANPAGES))
Diego Biurrun's avatar
Diego Biurrun committed
185 186

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

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

199
uninstall-headers::
Diego Biurrun's avatar
Diego Biurrun committed
200 201 202
	$(MAKE) -C libavutil   uninstall-headers
	$(MAKE) -C libavcodec  uninstall-headers
	$(MAKE) -C libavformat uninstall-headers
Luca Abeni's avatar
Luca Abeni committed
203
	$(MAKE) -C libavdevice uninstall-headers
204
	$(MAKE) -C libpostproc uninstall-headers
205
	$(MAKE) -C libswscale  uninstall-headers
206
	$(MAKE) -C libavfilter uninstall-headers
207
	-rmdir "$(INCDIR)"
Diego Biurrun's avatar
Diego Biurrun committed
208

209
depend dep: .vhookdep
Måns Rullgård's avatar
Måns Rullgård committed
210 211 212 213
	$(MAKE)                    -C libavutil   depend
	$(MAKE)                    -C libavcodec  depend
	$(MAKE)                    -C libavformat depend
	$(MAKE)                    -C libavdevice depend
214
	$(MAKE-$(CONFIG_POSTPROC)) -C libpostproc depend
215
	$(MAKE-$(CONFIG_SWSCALE))  -C libswscale  depend
216
	$(MAKE-$(CONFIG_AVFILTER)) -C libavfilter depend
217

218
.vhookdep: $(ALLHOOKS_SRCS) version.h
219
	$(VHOOK_DEPEND_CMD) > $@
Zdenek Kabelac's avatar
Zdenek Kabelac committed
220

221 222 223 224
$(DEP_LIBS): lib

.libs: $(DEP_LIBS)
	touch $@
225

226
clean::
227 228
	$(MAKE) -C libavutil   clean
	$(MAKE) -C libavcodec  clean
229
	$(MAKE) -C libavformat clean
Luca Abeni's avatar
Luca Abeni committed
230
	$(MAKE) -C libavdevice clean
231
	$(MAKE) -C libpostproc clean
232
	$(MAKE) -C libswscale  clean
233
	$(MAKE) -C libavfilter clean
234
	rm -f .libs gmon.out TAGS $(ALLPROGS) $(ALLPROGS_G) \
235
	   output_example$(EXESUF)
236
	rm -f doc/*.html doc/*.pod doc/*.1
237 238
	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))
239
	rm -f $(addprefix tools/,$(addsuffix $(EXESUF),cws2fws pktdumper qt-faststart trasher))
240
	rm -f vhook/*.o vhook/*~ vhook/*.so vhook/*.dylib vhook/*.dll
241

242
distclean::
243 244 245
	$(MAKE) -C libavutil   distclean
	$(MAKE) -C libavcodec  distclean
	$(MAKE) -C libavformat distclean
Luca Abeni's avatar
Luca Abeni committed
246
	$(MAKE) -C libavdevice distclean
247
	$(MAKE) -C libpostproc distclean
248
	$(MAKE) -C libswscale  distclean
249
	$(MAKE) -C libavfilter distclean
250
	rm -f .vhookdep version.h config.* *.pc
Fabrice Bellard's avatar
Fabrice Bellard committed
251

252 253
# regression tests

254 255 256 257 258 259 260 261
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

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 291 292 293 294 295 296 297 298 299
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                           \
300
        adpcm_ima_qt                            \
301 302 303 304 305 306 307
        adpcm_ms                                \
        adpcm_yam                               \
        adpcm_swf                               \
        flac                                    \
        wma                                     \
    )

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 335 336 337 338 339 340 341 342 343
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                                  \
    )
344 345 346 347 348 349 350 351 352 353 354 355 356

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)
357 358
	diff -u -w $(FFMPEG_REFFILE)   $(VSYNTH_REG)
	diff -u -w $(ROTOZOOM_REFFILE) $(ROTOZOOM_REG)
359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378

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)
379 380
	$(SRC_PATH)/tests/regression.sh $@ vsynth   tests/vsynth1 a
	$(SRC_PATH)/tests/regression.sh $@ rotozoom tests/vsynth2 a
381 382

$(LAVF_TESTS):
383
	$(SRC_PATH)/tests/regression.sh $@ lavf tests/vsynth1 b
384 385 386 387

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

388
test-server: ffserver$(EXESUF) tests/vsynth1/00.pgm tests/asynth1.sw
389 390 391 392 393 394
	@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

395
ifeq ($(CONFIG_SWSCALE),yes)
396
test-server codectest $(CODEC_TESTS) libavtest: swscale_error
397 398
swscale_error:
	@echo
399
	@echo "This regression test is incompatible with --enable-swscale."
400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417
	@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 $@ $<

418
tests/seek_test$(EXESUF): tests/seek_test.c .libs
419
	$(CC) $(LDFLAGS) $(CFLAGS) -o $@ $< $(EXTRALIBS)
420

421

422
.PHONY: lib videohook documentation TAGS
423
.PHONY: codectest libavtest seektest test-server fulltest test
424
.PHONY: $(CODEC_TESTS) $(LAVF_TESTS) regtest-ref swscale-error
425

426
-include .vhookdep