Makefile 14.5 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

Nick Kurshev's avatar
Nick Kurshev committed
27
ifeq ($(BUILD_SHARED),yes)
28
DEP_LIBS = libavdevice/$(SLIBPREF)avdevice$(SLIBSUF) libavformat/$(SLIBPREF)avformat$(SLIBSUF) libavcodec/$(SLIBPREF)avcodec$(SLIBSUF) libavutil/$(SLIBPREF)avutil$(SLIBSUF)
Nick Kurshev's avatar
Nick Kurshev committed
29
else
30
DEP_LIBS = libavdevice/$(LIBPREF)avdevice$(LIBSUF) libavformat/$(LIBPREF)avformat$(LIBSUF) libavcodec/$(LIBPREF)avcodec$(LIBSUF) libavutil/$(LIBPREF)avutil$(LIBSUF)
31 32
endif

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 49 50 51
	cp -p $< $@
	$(STRIP) $@

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

52 53
.depend: version.h $(PROGS_SRCS)

54 55 56
# bandaid to disable triggering shared library installation routines
DISABLE=yes

57 58
include common.mak

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 81
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
82

83 84 85
EXTRALIBS-$(CONFIG_AVFILTER) += -lavfilter$(BUILDSUF)
EXTRALIBS-$(CONFIG_SWSCALE) += -lswscale$(BUILDSUF)
EXTRALIBS := $(EXTRALIBS-yes) -lavdevice$(BUILDSUF) -lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)
86

87 88 89
MAKE-yes = $(MAKE)
MAKE-    = : $(MAKE)

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

99 100
ffplay_g$(EXESUF): EXTRALIBS += $(SDL_LIBS)
ffserver_g$(EXESUF): LDFLAGS += $(FFSERVERLDFLAGS)
Fabrice Bellard's avatar
Fabrice Bellard committed
101

102 103
%_g$(EXESUF): %.o cmdutils.o .libs
	$(CC) $(LDFLAGS) -o $@ $< cmdutils.o $(EXTRALIBS)
Fabrice Bellard's avatar
Fabrice Bellard committed
104

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

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

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

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

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

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

123 124
# vhooks compile fine without libav*, but need them nonetheless.
videohook: .libs $(HOOKS)
125 126

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

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

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

143 144
install: $(INSTALL_TARGETS-yes)

145
install-progs: $(PROGS) $(INSTALL_PROGS_TARGETS-yes)
146 147
	install -d "$(BINDIR)"
	install -c -m 755 $(PROGS) "$(BINDIR)"
Fabrice Bellard's avatar
Fabrice Bellard committed
148

149
install-man:
150 151
	install -d "$(MANDIR)/man1"
	install -m 644 $(MANPAGES) "$(MANDIR)/man1"
152

153
install-vhook: videohook
154 155
	install -d "$(SHLIBDIR)/vhook"
	install -m 755 $(HOOKS) "$(SHLIBDIR)/vhook"
156

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

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

175
uninstall: uninstall-progs uninstall-man uninstall-vhook
Diego Biurrun's avatar
Diego Biurrun committed
176 177

uninstall-progs:
178
	rm -f $(addprefix "$(BINDIR)/", $(ALLPROGS))
Diego Biurrun's avatar
Diego Biurrun committed
179 180

uninstall-man:
181
	rm -f $(addprefix "$(MANDIR)/man1/",$(ALLMANPAGES))
Diego Biurrun's avatar
Diego Biurrun committed
182 183

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

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

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

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

215
.vhookdep: $(ALLHOOKS_SRCS) version.h
216
	$(VHOOK_DEPEND_CMD) > $@
Zdenek Kabelac's avatar
Zdenek Kabelac committed
217

218 219 220 221
$(DEP_LIBS): lib

.libs: $(DEP_LIBS)
	touch $@
222

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

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

249 250
# regression tests

251 252 253 254 255 256 257 258
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

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

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

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

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

$(LAVF_TESTS):
380
	$(SRC_PATH)/tests/regression.sh $@ lavf tests/vsynth1 b
381 382 383 384

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

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

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

415
tests/seek_test$(EXESUF): tests/seek_test.c .libs
416
	$(CC) $(LDFLAGS) $(CFLAGS) -o $@ $< $(EXTRALIBS)
417

418

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

423
-include .vhookdep