Makefile 10.5 KB
Newer Older
J
Justin Ruggles 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14
include config.mak

SRC_DIR = $(SRC_PATH_BARE)

vpath %.texi $(SRC_PATH_BARE)

PROGS-$(CONFIG_FFMPEG)   += ffmpeg
PROGS-$(CONFIG_FFPLAY)   += ffplay
PROGS-$(CONFIG_FFSERVER) += ffserver

PROGS       = $(addsuffix   $(EXESUF), $(PROGS-yes))
PROGS_G     = $(addsuffix _g$(EXESUF), $(PROGS-yes))
OBJS        = $(addsuffix .o,          $(PROGS-yes)) cmdutils.o
MANPAGES    = $(addprefix doc/, $(addsuffix .1, $(PROGS-yes)))
15
TOOLS       = $(addprefix tools/, $(addsuffix $(EXESUF), cws2fws pktdumper qt-faststart trasher))
J
Justin Ruggles 已提交
16 17 18 19 20 21 22 23 24

BASENAMES   = ffmpeg ffplay ffserver
ALLPROGS    = $(addsuffix   $(EXESUF), $(BASENAMES))
ALLPROGS_G  = $(addsuffix _g$(EXESUF), $(BASENAMES))
ALLMANPAGES = $(addsuffix .1, $(BASENAMES))

FFLIBS-$(CONFIG_AVFILTER) += avfilter
FFLIBS-$(CONFIG_POSTPROC) += postproc

M
Michael Niedermayer 已提交
25
FFLIBS := avdevice avformat avcodec avutil swscale
J
Justin Ruggles 已提交
26

27 28
DATA_FILES := $(wildcard $(SRC_DIR)/ffpresets/*.ffpreset)

J
Justin Ruggles 已提交
29 30 31 32 33 34 35 36 37
include common.mak

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

ALL_TARGETS-$(BUILD_DOC)    += documentation

ifneq ($(PROGS),)
38
INSTALL_TARGETS-yes             += install-progs install-data
J
Justin Ruggles 已提交
39 40
INSTALL_TARGETS-$(BUILD_DOC)    += install-man
endif
41
INSTALL_PROGS_TARGETS-$(CONFIG_SHARED) = install-libs
J
Justin Ruggles 已提交
42 43 44 45 46 47 48

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

$(PROGS): %$(EXESUF): %_g$(EXESUF)
	cp -p $< $@
	$(STRIP) $@

49
SUBDIR_VARS := OBJS FFLIBS CLEANFILES DIRS TESTPROGS EXAMPLES SKIPHEADERS \
50
               ALTIVEC-OBJS MMX-OBJS NEON-OBJS X86-OBJS YASM-OBJS-FFT YASM-OBJS
J
Justin Ruggles 已提交
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68

define RESET
$(1) :=
$(1)-yes :=
endef

define DOSUBDIR
$(foreach V,$(SUBDIR_VARS),$(eval $(call RESET,$(V))))
SUBDIR := $(1)/
include $(1)/Makefile
endef

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

ffplay_g$(EXESUF): FF_EXTRALIBS += $(SDL_LIBS)
ffserver_g$(EXESUF): FF_LDFLAGS += $(FFSERVERLDFLAGS)

%_g$(EXESUF): %.o cmdutils.o $(FF_DEP_LIBS)
69
	$(LD) $(FF_LDFLAGS) -o $@ $< cmdutils.o $(FF_EXTRALIBS)
J
Justin Ruggles 已提交
70

M
Måns Rullgård 已提交
71 72 73
tools/%$(EXESUF): tools/%.o
	$(LD) $(FF_LDFLAGS) -o $@ $< $(FF_EXTRALIBS)

74
tools/%.o: tools/%.c
M
Måns Rullgård 已提交
75
	$(CC) $(CPPFLAGS) $(CFLAGS) $(CC_O) $<
J
Justin Ruggles 已提交
76 77 78

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

79 80
cmdutils.o cmdutils.d: version.h

81
alltools: $(TOOLS)
82

83
documentation: $(addprefix doc/, developer.html faq.html ffmpeg-doc.html ffserver-doc.html \
84
                                 ffplay-doc.html general.html $(ALLMANPAGES))
J
Justin Ruggles 已提交
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

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

install: $(INSTALL_TARGETS-yes)

install-progs: $(PROGS) $(INSTALL_PROGS_TARGETS-yes)
	install -d "$(BINDIR)"
	install -c -m 755 $(PROGS) "$(BINDIR)"

102 103 104 105
install-data: $(DATA_FILES)
	install -d "$(DATADIR)"
	install -m 644 $(DATA_FILES) "$(DATADIR)"

J
Justin Ruggles 已提交
106 107 108 109
install-man: $(MANPAGES)
	install -d "$(MANDIR)/man1"
	install -m 644 $(MANPAGES) "$(MANDIR)/man1"

110
uninstall: uninstall-progs uninstall-data uninstall-man
J
Justin Ruggles 已提交
111 112 113 114

uninstall-progs:
	rm -f $(addprefix "$(BINDIR)/", $(ALLPROGS))

115 116 117
uninstall-data:
	rm -rf "$(DATADIR)"

J
Justin Ruggles 已提交
118 119 120
uninstall-man:
	rm -f $(addprefix "$(MANDIR)/man1/",$(ALLMANPAGES))

121
testclean:
122
	rm -rf tests/vsynth1 tests/vsynth2 tests/data tests/*~
123 124

clean:: testclean
125
	rm -f $(ALLPROGS) $(ALLPROGS_G)
126
	rm -f $(CLEANSUFFIXES)
J
Justin Ruggles 已提交
127
	rm -f doc/*.html doc/*.pod doc/*.1
128
	rm -f tests/seek_test$(EXESUF) tests/seek_test.o
129
	rm -f $(addprefix tests/,$(addsuffix $(HOSTEXESUF),audiogen videogen rotozoom tiny_psnr))
130
	rm -f $(TOOLS)
J
Justin Ruggles 已提交
131 132

distclean::
133
	rm -f $(DISTCLEANSUFFIXES)
134
	rm -f version.h config.*
J
Justin Ruggles 已提交
135

136 137 138
config:
	$(SRC_PATH)/configure $(value FFMPEG_CONFIGURATION)

J
Justin Ruggles 已提交
139 140
# regression tests

141 142
check: test checkheaders

143
fulltest test: codectest lavftest seektest
J
Justin Ruggles 已提交
144 145

FFSERVER_REFFILE = $(SRC_PATH)/tests/ffserver.regression.ref
146
LAVF_REFFILE     = $(SRC_PATH)/tests/lavf.regression.ref
J
Justin Ruggles 已提交
147 148
ROTOZOOM_REFFILE = $(SRC_PATH)/tests/rotozoom.regression.ref
SEEK_REFFILE     = $(SRC_PATH)/tests/seek.regression.ref
149
VSYNTH_REFFILE   = $(SRC_PATH)/tests/vsynth.regression.ref
J
Justin Ruggles 已提交
150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182

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                                    \
183
        dnxhd                                   \
J
Justin Ruggles 已提交
184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203
        svq1                                    \
        flashsv                                 \
        mp2                                     \
        ac3                                     \
        g726                                    \
        adpcm_ima_wav                           \
        adpcm_ima_qt                            \
        adpcm_ms                                \
        adpcm_yam                               \
        adpcm_swf                               \
        flac                                    \
        wma                                     \
        pcm                                     \
    )

LAVF_TESTS = $(addprefix regtest-,              \
        avi                                     \
        asf                                     \
        rm                                      \
        mpg                                     \
204
        mxf                                     \
J
Justin Ruggles 已提交
205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234
        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                                  \
235
        pcx                                     \
J
Justin Ruggles 已提交
236 237
    )

238
RESFILES = $(addprefix tests/data/,$(addsuffix .$(1),$(2:regtest-%=%)))
J
Justin Ruggles 已提交
239

240 241
ROTOZOOM_RESFILES = $(call RESFILES,rotozoom.regression,$(CODEC_TESTS))
VSYNTH_RESFILES   = $(call RESFILES,vsynth.regression,$(CODEC_TESTS))
J
Justin Ruggles 已提交
242

243
LAVF_RESFILES = $(call RESFILES,lavf.regression,$(LAVF_TESTS))
J
Justin Ruggles 已提交
244

245 246 247
LAVF_RESFILE     = tests/data/lavf.regression
ROTOZOOM_RESFILE = tests/data/rotozoom.regression
VSYNTH_RESFILE   = tests/data/vsynth.regression
J
Justin Ruggles 已提交
248

249 250 251 252 253 254 255 256 257
ifneq ($(CONFIG_ZLIB),yes)
regtest-flashsv codectest: zlib-error
endif
zlib-error:
	@echo
	@echo "This regression test requires zlib."
	@echo
	@exit 1

258 259 260
codectest: $(VSYNTH_RESFILE) $(ROTOZOOM_RESFILE)
	diff -u -w $(VSYNTH_REFFILE)   $(VSYNTH_RESFILE)
	diff -u -w $(ROTOZOOM_REFFILE) $(ROTOZOOM_RESFILE)
J
Justin Ruggles 已提交
261

262 263
lavftest: $(LAVF_RESFILE)
	diff -u -w $(LAVF_REFFILE) $(LAVF_RESFILE)
J
Justin Ruggles 已提交
264

265
$(VSYNTH_RESFILE) $(ROTOZOOM_RESFILE) $(LAVF_RESFILE):
J
Justin Ruggles 已提交
266 267
	cat $^ > $@

268 269 270
$(LAVF_RESFILE):     $(LAVF_RESFILES)
$(ROTOZOOM_RESFILE): $(ROTOZOOM_RESFILES)
$(VSYNTH_RESFILE):   $(VSYNTH_RESFILES)
J
Justin Ruggles 已提交
271

272
$(VSYNTH_RESFILES) $(ROTOZOOM_RESFILES): $(CODEC_TESTS)
J
Justin Ruggles 已提交
273

274
$(LAVF_RESFILES): $(LAVF_TESTS)
J
Justin Ruggles 已提交
275 276 277

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

278
regtest-ref: ffmpeg$(EXESUF) tests/vsynth1/00.pgm tests/vsynth2/00.pgm tests/data/asynth1.sw
J
Justin Ruggles 已提交
279

280
$(CODEC_TESTS) regtest-ref: tests/tiny_psnr$(HOSTEXESUF)
281 282
	$(SRC_PATH)/tests/codec-regression.sh $@ vsynth   tests/vsynth1 a "$(TARGET_EXEC)" "$(TARGET_PATH)"
	$(SRC_PATH)/tests/codec-regression.sh $@ rotozoom tests/vsynth2 a "$(TARGET_EXEC)" "$(TARGET_PATH)"
J
Justin Ruggles 已提交
283 284

$(LAVF_TESTS):
285
	$(SRC_PATH)/tests/codec-regression.sh $@ lavf tests/vsynth1 b "$(TARGET_EXEC)" "$(TARGET_PATH)"
J
Justin Ruggles 已提交
286

287
seektest: codectest lavftest tests/seek_test$(EXESUF)
288
	$(SRC_PATH)/tests/seek-regression.sh $(SEEK_REFFILE) "$(TARGET_EXEC)" "$(TARGET_PATH)"
J
Justin Ruggles 已提交
289

290
ffservertest: ffserver$(EXESUF) tests/vsynth1/00.pgm tests/data/asynth1.sw
J
Justin Ruggles 已提交
291 292 293 294
	@echo
	@echo "Unfortunately ffserver is broken and therefore its regression"
	@echo "test fails randomly. Treat the results accordingly."
	@echo
295
	$(SRC_PATH)/tests/ffserver-regression.sh $(FFSERVER_REFFILE) $(SRC_PATH)/tests/ffserver.conf
J
Justin Ruggles 已提交
296

297
tests/vsynth1/00.pgm: tests/videogen$(HOSTEXESUF)
J
Justin Ruggles 已提交
298 299 300
	mkdir -p tests/vsynth1
	$(BUILD_ROOT)/$< 'tests/vsynth1/'

301
tests/vsynth2/00.pgm: tests/rotozoom$(HOSTEXESUF)
J
Justin Ruggles 已提交
302 303 304
	mkdir -p tests/vsynth2
	$(BUILD_ROOT)/$< 'tests/vsynth2/' $(SRC_PATH)/tests/lena.pnm

305 306
tests/data/asynth1.sw: tests/audiogen$(HOSTEXESUF)
	mkdir -p tests/data
J
Justin Ruggles 已提交
307 308
	$(BUILD_ROOT)/$< $@

309
tests/%$(HOSTEXESUF): tests/%.c
310
	$(HOSTCC) $(HOSTCFLAGS) $(HOSTLDFLAGS) -o $@ $< $(HOSTLIBS)
J
Justin Ruggles 已提交
311

312 313
tests/seek_test$(EXESUF): tests/seek_test.o $(FF_DEP_LIBS)
	$(LD) $(FF_LDFLAGS) -o $@ $< $(FF_EXTRALIBS)
J
Justin Ruggles 已提交
314 315


316
.PHONY: documentation *test regtest-* zlib-error alltools check config