Makefile 15.1 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 9
vpath %.c    $(SRC_PATH_BARE)
vpath %.h    $(SRC_PATH_BARE)
vpath %.texi $(SRC_PATH_BARE)
10

11
CFLAGS=$(OPTFLAGS) -I$(BUILD_ROOT) -I$(SRC_PATH) -I$(SRC_PATH)/libavutil \
12
       -I$(SRC_PATH)/libavcodec -I$(SRC_PATH)/libavformat -I$(SRC_PATH)/libswscale \
13
       -I$(SRC_PATH)/libavdevice -I$(SRC_PATH)/libavfilter \
14
       -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_ISOC9X_SOURCE -DHAVE_AV_CONFIG_H
15
LDFLAGS+= -g
16

Måns Rullgård's avatar
Måns Rullgård committed
17 18 19
PROGS-$(CONFIG_FFMPEG)   += ffmpeg
PROGS-$(CONFIG_FFPLAY)   += ffplay
PROGS-$(CONFIG_FFSERVER) += ffserver
Fabrice Bellard's avatar
Fabrice Bellard committed
20

Diego Biurrun's avatar
Diego Biurrun committed
21 22 23
PROGS       = $(addsuffix   $(EXESUF), $(PROGS-yes))
PROGS_G     = $(addsuffix _g$(EXESUF), $(PROGS-yes))
MANPAGES    = $(addprefix doc/, $(addsuffix .1, $(PROGS-yes)))
Fabrice Bellard's avatar
Fabrice Bellard committed
24

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

Nick Kurshev's avatar
Nick Kurshev committed
30
ifeq ($(BUILD_SHARED),yes)
Luca Abeni's avatar
Luca Abeni committed
31
DEP_LIBS=libavcodec/$(SLIBPREF)avcodec$(SLIBSUF) libavformat/$(SLIBPREF)avformat$(SLIBSUF) libavdevice/$(SLIBPREF)avdevice$(SLIBSUF)
Nick Kurshev's avatar
Nick Kurshev committed
32
else
Luca Abeni's avatar
Luca Abeni committed
33
DEP_LIBS=libavcodec/$(LIBPREF)avcodec$(LIBSUF) libavformat/$(LIBPREF)avformat$(LIBSUF) libavdevice/$(LIBPREF)avdevice$(LIBSUF)
34 35
endif

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

45
VHOOKCFLAGS += $(filter-out -mdynamic-no-pic,$(CFLAGS))
46 47 48 49 50 51 52 53 54 55 56 57

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
58
LIBS_imlib2$(SLIBSUF)       = `imlib2-config --libs`
59 60

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

VHOOKCFLAGS += $(VHOOKCFLAGS-yes)
64

65
SRCS = $(addsuffix .c, $(PROGS-yes)) cmdutils.c
Luca Abeni's avatar
Luca Abeni committed
66 67
LDFLAGS := -L$(BUILD_ROOT)/libavdevice -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil $(LDFLAGS)
EXTRALIBS := -lavdevice$(BUILDSUF) -lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)
Zdenek Kabelac's avatar
Zdenek Kabelac committed
68

69
ifeq ($(CONFIG_SWSCALER),yes)
70
LDFLAGS+=-L$(BUILD_ROOT)/libswscale
Diego Biurrun's avatar
Diego Biurrun committed
71
EXTRALIBS+=-lswscale$(BUILDSUF)
72 73
endif

74 75 76 77 78
ifeq ($(CONFIG_AVFILTER),yes)
LDFLAGS+=-L$(BUILD_ROOT)/libavfilter
EXTRALIBS := -lavfilter$(BUILDSUF) $(EXTRALIBS)
endif

79 80 81
MAKE-yes = $(MAKE)
MAKE-    = : $(MAKE)

82
all: lib $(PROGS) $(ALL_TARGETS-yes)
Fabrice Bellard's avatar
Fabrice Bellard committed
83

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_SWSCALER)) -C libswscale  all
91
	$(MAKE-$(CONFIG_AVFILTER)) -C libavfilter all
Fabrice Bellard's avatar
Fabrice Bellard committed
92

Fabrice Bellard's avatar
Fabrice Bellard committed
93
ffmpeg_g$(EXESUF): ffmpeg.o cmdutils.o .libs
Diego Biurrun's avatar
Diego Biurrun committed
94
	$(CC) $(LDFLAGS) -o $@ ffmpeg.o cmdutils.o $(EXTRALIBS)
Fabrice Bellard's avatar
Fabrice Bellard committed
95

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

Fabrice Bellard's avatar
Fabrice Bellard committed
99
ffplay_g$(EXESUF): ffplay.o cmdutils.o .libs
Diego Biurrun's avatar
Diego Biurrun committed
100
	$(CC) $(LDFLAGS) -o $@ ffplay.o cmdutils.o $(EXTRALIBS) $(SDL_LIBS)
Fabrice Bellard's avatar
Fabrice Bellard committed
101

102
%$(EXESUF): %_g$(EXESUF)
Fabrice Bellard's avatar
Fabrice Bellard committed
103 104 105
	cp -p $< $@
	$(STRIP) $@

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

111
version.h:
112
	$(SRC_PATH)/version.sh $(SRC_PATH)
113

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

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

120
ffplay.o: CFLAGS += $(SDL_CFLAGS)
121

122 123
ffmpeg.o ffplay.o ffserver.o: version.h

124
videohook: $(HOOKS)
125 126

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

129 130 131 132 133
vhook/%.o: vhook/%.c
	$(CC) $(VHOOKCFLAGS) -c -o $@ $<

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

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

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

149
install: install-libs install-headers $(INSTALL_TARGETS-yes)
150

151
ifeq ($(BUILD_SHARED),yes)
152
install-progs: install-libs
153
endif
154
install-progs: $(PROGS)
155 156
	install -d "$(BINDIR)"
	install -c -m 755 $(PROGS) "$(BINDIR)"
Fabrice Bellard's avatar
Fabrice Bellard committed
157

Diego Biurrun's avatar
Diego Biurrun committed
158
# Create the Windows installer.
Fabrice Bellard's avatar
Fabrice Bellard committed
159 160 161
wininstaller: all install
	makensis ffinstall.nsi

162
install-man:
163 164
	install -d "$(MANDIR)/man1"
	install -m 644 $(MANPAGES) "$(MANDIR)/man1"
165

166
install-vhook: videohook
167 168
	install -d "$(SHLIBDIR)/vhook"
	install -m 755 $(HOOKS) "$(SHLIBDIR)/vhook"
169

170
install-libs:
Måns Rullgård's avatar
Måns Rullgård committed
171 172 173 174
	$(MAKE)                    -C libavutil   install-libs
	$(MAKE)                    -C libavcodec  install-libs
	$(MAKE)                    -C libavformat install-libs
	$(MAKE)                    -C libavdevice install-libs
175
	$(MAKE-$(CONFIG_POSTPROC)) -C libpostproc install-libs
176
	$(MAKE-$(CONFIG_SWSCALER)) -C libswscale  install-libs
177
	$(MAKE-$(CONFIG_AVFILTER)) -C libavfilter install-libs
178

179
install-headers:
180 181 182 183
	$(MAKE)                    -C libavutil   install-headers
	$(MAKE)                    -C libavcodec  install-headers
	$(MAKE)                    -C libavformat install-headers
	$(MAKE)                    -C libavdevice install-headers
184
	$(MAKE-$(CONFIG_POSTPROC)) -C libpostproc install-headers
185
	$(MAKE)                    -C libswscale  install-headers
186
	$(MAKE-$(CONFIG_AVFILTER)) -C libavfilter install-headers
187

Diego Biurrun's avatar
Diego Biurrun committed
188 189 190
uninstall: uninstall-progs uninstall-libs uninstall-headers uninstall-man uninstall-vhook

uninstall-progs:
191
	rm -f $(addprefix "$(BINDIR)/", $(ALLPROGS))
Diego Biurrun's avatar
Diego Biurrun committed
192 193

uninstall-man:
194
	rm -f $(addprefix "$(MANDIR)/man1/",$(ALLMANPAGES))
Diego Biurrun's avatar
Diego Biurrun committed
195 196

uninstall-vhook:
197
	rm -f $(addprefix "$(SHLIBDIR)/",$(ALLHOOKS_SRCS:.c=$(SLIBSUF)))
198
	-rmdir "$(SHLIBDIR)/vhook/"
Diego Biurrun's avatar
Diego Biurrun committed
199 200 201 202 203

uninstall-libs:
	$(MAKE) -C libavutil   uninstall-libs
	$(MAKE) -C libavcodec  uninstall-libs
	$(MAKE) -C libavformat uninstall-libs
Luca Abeni's avatar
Luca Abeni committed
204
	$(MAKE) -C libavdevice uninstall-libs
205
	$(MAKE) -C libpostproc uninstall-libs
206
	$(MAKE) -C libswscale  uninstall-libs
207
	$(MAKE) -C libavfilter uninstall-libs
Diego Biurrun's avatar
Diego Biurrun committed
208 209 210 211 212

uninstall-headers:
	$(MAKE) -C libavutil   uninstall-headers
	$(MAKE) -C libavcodec  uninstall-headers
	$(MAKE) -C libavformat uninstall-headers
Luca Abeni's avatar
Luca Abeni committed
213
	$(MAKE) -C libavdevice uninstall-headers
214
	$(MAKE) -C libpostproc uninstall-headers
215
	$(MAKE) -C libswscale  uninstall-headers
216
	$(MAKE) -C libavfilter uninstall-headers
217
	-rmdir "$(INCDIR)"
Diego Biurrun's avatar
Diego Biurrun committed
218

219
depend dep: .depend .vhookdep
Måns Rullgård's avatar
Måns Rullgård committed
220 221 222 223
	$(MAKE)                    -C libavutil   depend
	$(MAKE)                    -C libavcodec  depend
	$(MAKE)                    -C libavformat depend
	$(MAKE)                    -C libavdevice depend
224
	$(MAKE-$(CONFIG_POSTPROC)) -C libpostproc depend
225
	$(MAKE-$(CONFIG_SWSCALER)) -C libswscale  depend
226
	$(MAKE-$(CONFIG_AVFILTER)) -C libavfilter depend
227

228
.depend: $(SRCS) version.h
229
	$(CC) -MM $(CFLAGS) $(SDL_CFLAGS) $(filter-out %.h,$^) 1>.depend
230

231
# gcc stupidly only outputs the basename of targets with -MM
232
.vhookdep: $(ALLHOOKS_SRCS) version.h
233
	$(CC) $(VHOOKCFLAGS) -MM $^ | sed 's,^\([a-z]\),vhook/\1,' > $@
Zdenek Kabelac's avatar
Zdenek Kabelac committed
234

235 236 237 238
$(DEP_LIBS): lib

.libs: $(DEP_LIBS)
	touch $@
239

240
clean:
241 242
	$(MAKE) -C libavutil   clean
	$(MAKE) -C libavcodec  clean
243
	$(MAKE) -C libavformat clean
Luca Abeni's avatar
Luca Abeni committed
244
	$(MAKE) -C libavdevice clean
245
	$(MAKE) -C libpostproc clean
246
	$(MAKE) -C libswscale  clean
247
	$(MAKE) -C libavfilter clean
248
	rm -f *.o *~ .libs gmon.out TAGS $(ALLPROGS) $(ALLPROGS_G) \
249
	   output_example$(EXESUF)
250
	rm -f doc/*.html doc/*.pod doc/*.1
251 252
	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))
253
	rm -f $(addprefix tools/,$(addsuffix $(EXESUF),cws2fws pktdumper qt-faststart trasher))
254
	rm -f vhook/*.o vhook/*~ vhook/*.so vhook/*.dylib vhook/*.dll
255

Fabrice Bellard's avatar
Fabrice Bellard committed
256
distclean: clean
257 258 259
	$(MAKE) -C libavutil   distclean
	$(MAKE) -C libavcodec  distclean
	$(MAKE) -C libavformat distclean
Luca Abeni's avatar
Luca Abeni committed
260
	$(MAKE) -C libavdevice distclean
261
	$(MAKE) -C libpostproc distclean
262
	$(MAKE) -C libswscale  distclean
263
	$(MAKE) -C libavfilter distclean
264
	rm -f .depend .vhookdep version.h config.* *.pc
Fabrice Bellard's avatar
Fabrice Bellard committed
265 266

TAGS:
267
	etags *.[ch] libavformat/*.[ch] libavcodec/*.[ch]
Zdenek Kabelac's avatar
Zdenek Kabelac committed
268

269 270
# regression tests

271 272 273 274 275 276 277 278
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

279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316
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                           \
317
        adpcm_ima_qt                            \
318 319 320 321 322 323 324
        adpcm_ms                                \
        adpcm_yam                               \
        adpcm_swf                               \
        flac                                    \
        wma                                     \
    )

325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360
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                                  \
    )
361 362 363 364 365 366 367 368 369 370 371 372 373

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)
374 375
	diff -u -w $(FFMPEG_REFFILE)   $(VSYNTH_REG)
	diff -u -w $(ROTOZOOM_REFFILE) $(ROTOZOOM_REG)
376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395

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)
396 397
	$(SRC_PATH)/tests/regression.sh $@ vsynth   tests/vsynth1 a
	$(SRC_PATH)/tests/regression.sh $@ rotozoom tests/vsynth2 a
398 399

$(LAVF_TESTS):
400
	$(SRC_PATH)/tests/regression.sh $@ lavf tests/vsynth1 b
401 402 403 404

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

405
test-server: ffserver$(EXESUF) tests/vsynth1/00.pgm tests/asynth1.sw
406 407 408 409 410 411 412
	@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

ifeq ($(CONFIG_SWSCALER),yes)
413
test-server codectest $(CODEC_TESTS) libavtest: swscale_error
414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434
swscale_error:
	@echo
	@echo "This regression test is incompatible with --enable-swscaler."
	@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 $@ $<

435
tests/seek_test$(EXESUF): tests/seek_test.c .libs
436
	$(CC) $(LDFLAGS) $(CFLAGS) -o $@ $< $(EXTRALIBS)
437

438

439
.PHONY: all lib videohook documentation install* wininstaller uninstall*
440
.PHONY: dep depend clean distclean TAGS
441
.PHONY: codectest libavtest seektest test-server fulltest test
442
.PHONY: $(CODEC_TESTS) $(LAVF_TESTS) regtest-ref swscale-error
443

444
-include .depend
445
-include .vhookdep