Makefile 11.3 KB
Newer Older
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)))
Diego Biurrun's avatar
Diego Biurrun committed
15
TOOLS       = $(addprefix tools/, $(addsuffix $(EXESUF), cws2fws pktdumper probetest qt-faststart trasher))
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

Michael Niedermayer's avatar
Michael Niedermayer committed
25
FFLIBS := avdevice avformat avcodec avutil swscale
26

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

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
39 40
INSTALL_TARGETS-$(BUILD_DOC)    += install-man
endif
41
INSTALL_PROGS_TARGETS-$(CONFIG_SHARED) = install-libs
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
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)
70

Måns Rullgård's avatar
Måns Rullgård committed
71 72 73
tools/%$(EXESUF): tools/%.o
	$(LD) $(FF_LDFLAGS) -o $@ $< $(FF_EXTRALIBS)

74
tools/%.o: tools/%.c
Måns Rullgård's avatar
Måns Rullgård committed
75
	$(CC) $(CPPFLAGS) $(CFLAGS) $(CC_O) $<
76 77 78

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

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

81
alltools: $(TOOLS)
82

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

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)"

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

107 108 109 110
install-man: $(MANPAGES)
	install -d "$(MANDIR)/man1"
	install -m 644 $(MANPAGES) "$(MANDIR)/man1"

111
uninstall: uninstall-progs uninstall-data uninstall-man
112 113 114 115

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

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

119 120 121
uninstall-man:
	rm -f $(addprefix "$(MANDIR)/man1/",$(ALLMANPAGES))

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

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

distclean::
134
	rm -f $(DISTCLEANSUFFIXES)
135
	rm -f version.h config.*
136

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

140 141
# regression tests

142 143
check: test checkheaders

144
fulltest test: codectest lavftest seektest
145 146

FFSERVER_REFFILE = $(SRC_PATH)/tests/ffserver.regression.ref
147
LAVF_REFFILE     = $(SRC_PATH)/tests/lavf.regression.ref
148
LAVFI_REFFILE    = $(SRC_PATH)/tests/lavfi.regression.ref
149 150
ROTOZOOM_REFFILE = $(SRC_PATH)/tests/rotozoom.regression.ref
SEEK_REFFILE     = $(SRC_PATH)/tests/seek.regression.ref
151
VSYNTH_REFFILE   = $(SRC_PATH)/tests/vsynth.regression.ref
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 183 184

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                                    \
185 186 187
        dnxhd_1080i                             \
        dnxhd_720p                              \
        dnxhd_720p_rd                           \
188 189 190 191 192 193 194 195 196 197
        svq1                                    \
        flashsv                                 \
        mp2                                     \
        ac3                                     \
        g726                                    \
        adpcm_ima_wav                           \
        adpcm_ima_qt                            \
        adpcm_ms                                \
        adpcm_yam                               \
        adpcm_swf                               \
198
        alac                                    \
199 200 201 202 203 204 205 206 207 208
        flac                                    \
        wma                                     \
        pcm                                     \
    )

LAVF_TESTS = $(addprefix regtest-,              \
        avi                                     \
        asf                                     \
        rm                                      \
        mpg                                     \
209
        mxf                                     \
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 235 236 237 238 239
        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                                  \
240
        pcx                                     \
241 242
    )

243 244 245
LAVFI_TESTS = $(addprefix regtest-,             \
    )

246
RESFILES = $(addprefix tests/data/,$(addsuffix .$(1),$(2:regtest-%=%)))
247

248 249
ROTOZOOM_RESFILES = $(call RESFILES,rotozoom.regression,$(CODEC_TESTS))
VSYNTH_RESFILES   = $(call RESFILES,vsynth.regression,$(CODEC_TESTS))
250

251
LAVF_RESFILES = $(call RESFILES,lavf.regression,$(LAVF_TESTS))
252
LAVFI_RESFILES = $(call RESFILES,lavfi.regression,$(LAVFI_TESTS))
253

254
LAVF_RESFILE     = tests/data/lavf.regression
255
LAVFI_RESFILE    = tests/data/lavfi.regression
256 257
ROTOZOOM_RESFILE = tests/data/rotozoom.regression
VSYNTH_RESFILE   = tests/data/vsynth.regression
258

259 260 261 262 263 264 265 266 267
ifneq ($(CONFIG_ZLIB),yes)
regtest-flashsv codectest: zlib-error
endif
zlib-error:
	@echo
	@echo "This regression test requires zlib."
	@echo
	@exit 1

268 269 270
codectest: $(VSYNTH_RESFILE) $(ROTOZOOM_RESFILE)
	diff -u -w $(VSYNTH_REFFILE)   $(VSYNTH_RESFILE)
	diff -u -w $(ROTOZOOM_REFFILE) $(ROTOZOOM_RESFILE)
271

272 273
lavftest: $(LAVF_RESFILE)
	diff -u -w $(LAVF_REFFILE) $(LAVF_RESFILE)
274

275 276 277 278
# lavfitest: $(LAVFI_RESFILE)
# 	diff -u -w $(LAVFI_REFFILE) $(LAVFI_RESFILE)

$(VSYNTH_RESFILE) $(ROTOZOOM_RESFILE) $(LAVF_RESFILE) $(LAVFI_RESFILE):
279 280
	cat $^ > $@

281
$(LAVF_RESFILE):     $(LAVF_RESFILES)
282
$(LAVFI_RESFILE):    $(LAVFI_RESFILES)
283 284
$(ROTOZOOM_RESFILE): $(ROTOZOOM_RESFILES)
$(VSYNTH_RESFILE):   $(VSYNTH_RESFILES)
285

286
$(VSYNTH_RESFILES) $(ROTOZOOM_RESFILES): $(CODEC_TESTS)
287

288
$(LAVF_RESFILES): $(LAVF_TESTS)
289
$(LAVFI_RESFILES): $(LAVFI_TESTS)
290

291
$(CODEC_TESTS) $(LAVF_TESTS) $(LAVFI_TESTS): regtest-ref
292

293
regtest-ref: ffmpeg$(EXESUF) tests/vsynth1/00.pgm tests/vsynth2/00.pgm tests/data/asynth1.sw
294

295
$(CODEC_TESTS) regtest-ref: tests/tiny_psnr$(HOSTEXESUF)
296 297
	$(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)"
298 299

$(LAVF_TESTS):
300
	$(SRC_PATH)/tests/lavf-regression.sh $@ lavf tests/vsynth1 b "$(TARGET_EXEC)" "$(TARGET_PATH)"
301

302
$(LAVFI_TESTS):
303
	$(SRC_PATH)/tests/lavfi-regression.sh $@ lavfi tests/vsynth1 b "$(TARGET_EXEC)" "$(TARGET_PATH)"
304

305
seektest: codectest lavftest tests/seek_test$(EXESUF)
306
	$(SRC_PATH)/tests/seek-regression.sh $(SEEK_REFFILE) "$(TARGET_EXEC)" "$(TARGET_PATH)"
307

308
ffservertest: ffserver$(EXESUF) tests/vsynth1/00.pgm tests/data/asynth1.sw
309 310 311 312
	@echo
	@echo "Unfortunately ffserver is broken and therefore its regression"
	@echo "test fails randomly. Treat the results accordingly."
	@echo
313
	$(SRC_PATH)/tests/ffserver-regression.sh $(FFSERVER_REFFILE) $(SRC_PATH)/tests/ffserver.conf
314

315
tests/vsynth1/00.pgm: tests/videogen$(HOSTEXESUF)
316 317 318
	mkdir -p tests/vsynth1
	$(BUILD_ROOT)/$< 'tests/vsynth1/'

319
tests/vsynth2/00.pgm: tests/rotozoom$(HOSTEXESUF)
320 321 322
	mkdir -p tests/vsynth2
	$(BUILD_ROOT)/$< 'tests/vsynth2/' $(SRC_PATH)/tests/lena.pnm

323 324
tests/data/asynth1.sw: tests/audiogen$(HOSTEXESUF)
	mkdir -p tests/data
325 326
	$(BUILD_ROOT)/$< $@

327
tests/%$(HOSTEXESUF): tests/%.c
328
	$(HOSTCC) $(HOSTCFLAGS) $(HOSTLDFLAGS) -o $@ $< $(HOSTLIBS)
329

330 331
tests/seek_test$(EXESUF): tests/seek_test.o $(FF_DEP_LIBS)
	$(LD) $(FF_LDFLAGS) -o $@ $< $(FF_EXTRALIBS)
332 333


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