Makefile 11.4 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
vpath %.texi $(SRC_PATH_BARE)
10

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

Diego Biurrun's avatar
Diego Biurrun committed
15 16
PROGS       = $(addsuffix   $(EXESUF), $(PROGS-yes))
PROGS_G     = $(addsuffix _g$(EXESUF), $(PROGS-yes))
17
OBJS        = $(addsuffix .o,          $(PROGS-yes)) cmdutils.o
Diego Biurrun's avatar
Diego Biurrun committed
18
MANPAGES    = $(addprefix doc/, $(addsuffix .1, $(PROGS-yes)))
Fabrice Bellard's avatar
Fabrice Bellard committed
19

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

25 26 27
FFLIBS-$(CONFIG_AVFILTER) += avfilter
FFLIBS-$(CONFIG_POSTPROC) += postproc
FFLIBS-$(CONFIG_SWSCALE)  += swscale
28

29
FFLIBS := avdevice avformat avcodec avutil
30

31 32 33 34
include common.mak

FF_LDFLAGS   := $(FFLDFLAGS)
FF_EXTRALIBS := $(FFEXTRALIBS)
35
FF_DEP_LIBS  := $(DEP_LIBS)
36

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

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

47
all: $(FF_DEP_LIBS) $(PROGS) $(ALL_TARGETS-yes)
48

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

53
SUBDIR_VARS := OBJS ASM_OBJS CPP_OBJS FFLIBS CLEANFILES DIRS TESTS
54

55 56 57 58
define RESET
$(1) :=
$(1)-yes :=
endef
59

60 61 62 63 64 65 66
define DOSUBDIR
$(foreach V,$(SUBDIR_VARS),$(eval $(call RESET,$(V))))
SUBDIR := $(1)/
include $(1)/Makefile
endef

$(foreach D,$(FFLIBS),$(eval $(call DOSUBDIR,lib$(D))))
67

68 69
ffplay_g$(EXESUF): FF_EXTRALIBS += $(SDL_LIBS)
ffserver_g$(EXESUF): FF_LDFLAGS += $(FFSERVERLDFLAGS)
Fabrice Bellard's avatar
Fabrice Bellard committed
70

71
%_g$(EXESUF): %.o cmdutils.o $(FF_DEP_LIBS)
72
	$(CC) $(FF_LDFLAGS) -o $@ $< cmdutils.o $(FF_EXTRALIBS)
Fabrice Bellard's avatar
Fabrice Bellard committed
73

74 75 76 77 78
SVN_ENTRIES = $(SRC_PATH_BARE)/.svn/entries
ifeq ($(wildcard $(SVN_ENTRIES)),$(SVN_ENTRIES))
version.h: $(SVN_ENTRIES)
endif

79
version.h:
80
	$(SRC_PATH)/version.sh $(SRC_PATH)
81

82
output_example$(EXESUF): output_example.o $(FF_DEP_LIBS)
83
	$(CC) $(CFLAGS) $(FF_LDFLAGS) -o $@ $< $(FF_EXTRALIBS)
84

85
tools/%$(EXESUF): tools/%.c
86
	$(CC) $(CFLAGS) $(FF_LDFLAGS) -o $@ $< $(FF_EXTRALIBS)
87

88
ffplay.o ffplay.d: CFLAGS += $(SDL_CFLAGS)
89

90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
VHOOKCFLAGS += $(filter-out -mdynamic-no-pic,$(CFLAGS))

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

VHOOKCFLAGS-$(HAVE_FREETYPE2) += `freetype-config --cflags`
LIBS_drawtext$(SLIBSUF)        = `freetype-config --libs`

VHOOKCFLAGS += $(VHOOKCFLAGS-yes)

110
vhook/%.o vhook/%.d: CFLAGS:=$(VHOOKCFLAGS)
111

112
# vhooks compile fine without libav*, but need them nonetheless.
113
videohook: $(FF_DEP_LIBS) $(HOOKS)
114

115
$(eval VHOOKSHFLAGS=$(VHOOKSHFLAGS))
116
vhook/%$(SLIBSUF): vhook/%.o
117
	$(CC) $(LDFLAGS) -o $@ $(VHOOKSHFLAGS) $< $(VHOOKLIBS) $(LIBS_$(@F))
118

119 120
VHOOK_DEPS = $(HOOKS:$(SLIBSUF)=.d)
depend dep: $(VHOOK_DEPS)
121

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

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

136 137
install: $(INSTALL_TARGETS-yes)

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

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

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

150
uninstall: uninstall-progs uninstall-man uninstall-vhook
Diego Biurrun's avatar
Diego Biurrun committed
151 152

uninstall-progs:
153
	rm -f $(addprefix "$(BINDIR)/", $(ALLPROGS))
Diego Biurrun's avatar
Diego Biurrun committed
154 155

uninstall-man:
156
	rm -f $(addprefix "$(MANDIR)/man1/",$(ALLMANPAGES))
Diego Biurrun's avatar
Diego Biurrun committed
157 158

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

162
clean::
163
	rm -f gmon.out TAGS $(ALLPROGS) $(ALLPROGS_G) \
164
	   output_example$(EXESUF)
165
	rm -f doc/*.html doc/*.pod doc/*.1
166 167
	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))
168
	rm -f $(addprefix tools/,$(addsuffix $(EXESUF),cws2fws pktdumper qt-faststart trasher))
169
	rm -f vhook/*.o vhook/*~ vhook/*.so vhook/*.dylib vhook/*.dll
170

171
distclean::
172
	rm -f version.h config.* *.pc vhook/*.d
Fabrice Bellard's avatar
Fabrice Bellard committed
173

174 175
# regression tests

176 177 178 179 180 181 182 183
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

184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221
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                           \
222
        adpcm_ima_qt                            \
223 224 225 226 227 228 229
        adpcm_ms                                \
        adpcm_yam                               \
        adpcm_swf                               \
        flac                                    \
        wma                                     \
    )

230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265
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                                  \
    )
266 267 268 269 270 271 272 273 274 275 276 277 278

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)
279 280
	diff -u -w $(FFMPEG_REFFILE)   $(VSYNTH_REG)
	diff -u -w $(ROTOZOOM_REFFILE) $(ROTOZOOM_REG)
281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300

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)
301 302
	$(SRC_PATH)/tests/regression.sh $@ vsynth   tests/vsynth1 a
	$(SRC_PATH)/tests/regression.sh $@ rotozoom tests/vsynth2 a
303 304

$(LAVF_TESTS):
305
	$(SRC_PATH)/tests/regression.sh $@ lavf tests/vsynth1 b
306 307 308 309

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

310
test-server: ffserver$(EXESUF) tests/vsynth1/00.pgm tests/asynth1.sw
311 312 313 314 315 316
	@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

317
ifeq ($(CONFIG_SWSCALE),yes)
318
test-server codectest $(CODEC_TESTS) libavtest: swscale_error
319 320
swscale_error:
	@echo
321
	@echo "This regression test is incompatible with --enable-swscale."
322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337
	@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
338
	$(CC) $(FF_LDFLAGS) $(CFLAGS) -o $@ $<
339

340
tests/seek_test$(EXESUF): tests/seek_test.c $(FF_DEP_LIBS)
341
	$(CC) $(FF_LDFLAGS) $(CFLAGS) -o $@ $< $(FF_EXTRALIBS)
342

343

344
.PHONY: lib videohook documentation TAGS
345
.PHONY: codectest libavtest seektest test-server fulltest test
346
.PHONY: $(CODEC_TESTS) $(LAVF_TESTS) regtest-ref swscale-error
347

348
-include $(VHOOK_DEPS)