Merge remote-tracking branch 'hexene/scratchpad'
[ffmpeg.git] / Makefile
1 MAIN_MAKEFILE=1
2 include config.mak
3
4 vpath %.c    $(SRC_PATH)
5 vpath %.cpp  $(SRC_PATH)
6 vpath %.h    $(SRC_PATH)
7 vpath %.S    $(SRC_PATH)
8 vpath %.asm  $(SRC_PATH)
9 vpath %.v    $(SRC_PATH)
10 vpath %.texi $(SRC_PATH)
11
12 PROGS-$(CONFIG_FFMPEG)   += ffmpeg
13 PROGS-$(CONFIG_AVCONV)   += avconv
14 PROGS-$(CONFIG_FFPLAY)   += ffplay
15 PROGS-$(CONFIG_FFPROBE)  += ffprobe
16 PROGS-$(CONFIG_FFSERVER) += ffserver
17
18 PROGS      := $(PROGS-yes:%=%$(EXESUF))
19 INSTPROGS   = $(PROGS-yes:%=%$(PROGSSUF)$(EXESUF))
20 OBJS        = $(PROGS-yes:%=%.o) cmdutils.o
21 TESTTOOLS   = audiogen videogen rotozoom tiny_psnr base64
22 HOSTPROGS  := $(TESTTOOLS:%=tests/%)
23 TOOLS       = qt-faststart trasher
24 TOOLS-$(CONFIG_ZLIB) += cws2fws
25
26 BASENAMES   = ffmpeg avconv ffplay ffprobe ffserver
27 ALLPROGS    = $(BASENAMES:%=%$(PROGSSUF)$(EXESUF))
28 ALLPROGS_G  = $(BASENAMES:%=%$(PROGSSUF)_g$(EXESUF))
29 ALLMANPAGES = $(BASENAMES:%=%.1)
30
31 FFLIBS-$(CONFIG_AVDEVICE) += avdevice
32 FFLIBS-$(CONFIG_AVFILTER) += avfilter
33 FFLIBS-$(CONFIG_AVFORMAT) += avformat
34 FFLIBS-$(CONFIG_AVCODEC)  += avcodec
35 FFLIBS-$(CONFIG_POSTPROC) += postproc
36 FFLIBS-$(CONFIG_SWSCALE)  += swscale
37
38 FFLIBS := avutil
39
40 DATA_FILES := $(wildcard $(SRC_PATH)/ffpresets/*.ffpreset)
41
42 SKIPHEADERS = cmdutils_common_opts.h
43
44 include $(SRC_PATH)/common.mak
45
46 FF_EXTRALIBS := $(FFEXTRALIBS)
47 FF_DEP_LIBS  := $(DEP_LIBS)
48
49 all: $(PROGS)
50
51 $(PROGS): %$(EXESUF): %$(PROGSSUF)_g$(EXESUF)
52         $(CP) $< $@$(PROGSSUF)
53         $(STRIP) $@$(PROGSSUF)
54
55 $(TOOLS): %$(EXESUF): %.o
56         $(LD) $(LDFLAGS) -o $@ $< $(ELIBS)
57
58 tools/cws2fws$(EXESUF): ELIBS = -lz
59
60 config.h: .config
61 .config: $(wildcard $(FFLIBS:%=$(SRC_PATH)/lib%/all*.c))
62         @-tput bold 2>/dev/null
63         @-printf '\nWARNING: $(?F) newer than config.h, rerun configure\n\n'
64         @-tput sgr0 2>/dev/null
65
66 SUBDIR_VARS := OBJS FFLIBS CLEANFILES DIRS TESTPROGS EXAMPLES SKIPHEADERS \
67                ALTIVEC-OBJS MMX-OBJS NEON-OBJS X86-OBJS YASM-OBJS-FFT YASM-OBJS \
68                HOSTPROGS BUILT_HEADERS TESTOBJS ARCH_HEADERS ARMV6-OBJS TOOLS
69
70 define RESET
71 $(1) :=
72 $(1)-yes :=
73 endef
74
75 define DOSUBDIR
76 $(foreach V,$(SUBDIR_VARS),$(eval $(call RESET,$(V))))
77 SUBDIR := $(1)/
78 include $(SRC_PATH)/$(1)/Makefile
79 endef
80
81 $(foreach D,$(FFLIBS),$(eval $(call DOSUBDIR,lib$(D))))
82
83 ffplay.o: CFLAGS += $(SDL_CFLAGS)
84 ffplay_g$(EXESUF): FF_EXTRALIBS += $(SDL_LIBS)
85 ffserver_g$(EXESUF): LDFLAGS += $(FFSERVERLDFLAGS)
86
87 %$(PROGSSUF)_g$(EXESUF): %.o cmdutils.o $(FF_DEP_LIBS)
88         $(LD) $(LDFLAGS) -o $@ $< cmdutils.o $(FF_EXTRALIBS)
89
90 OBJDIRS += tools
91
92 -include $(wildcard tools/*.d)
93
94 VERSION_SH  = $(SRC_PATH)/version.sh
95 GIT_LOG     = $(SRC_PATH)/.git/logs/HEAD
96
97 .version: $(wildcard $(GIT_LOG)) $(VERSION_SH) config.mak
98 .version: M=@
99
100 version.h .version:
101         $(M)$(VERSION_SH) $(SRC_PATH) version.h $(EXTRA_VERSION)
102         $(Q)touch .version
103
104 # force version.sh to run whenever version might have changed
105 -include .version
106
107 ifdef PROGS
108 install: install-progs install-data
109 endif
110
111 install: install-libs install-headers
112
113 install-libs: install-libs-yes
114
115 install-progs-yes:
116 install-progs-$(CONFIG_SHARED): install-libs
117
118 install-progs: install-progs-yes $(PROGS)
119         $(Q)mkdir -p "$(BINDIR)"
120         $(INSTALL) -c -m 755 $(INSTPROGS) "$(BINDIR)"
121
122 install-data: $(DATA_FILES)
123         $(Q)mkdir -p "$(DATADIR)"
124         $(INSTALL) -m 644 $(DATA_FILES) "$(DATADIR)"
125
126 uninstall: uninstall-libs uninstall-headers uninstall-progs uninstall-data
127
128 uninstall-progs:
129         $(RM) $(addprefix "$(BINDIR)/", $(ALLPROGS))
130
131 uninstall-data:
132         $(RM) -r "$(DATADIR)"
133
134 clean::
135         $(RM) $(ALLPROGS) $(ALLPROGS_G)
136         $(RM) $(CLEANSUFFIXES)
137         $(RM) $(TOOLS)
138         $(RM) $(CLEANSUFFIXES:%=tools/%)
139
140 distclean::
141         $(RM) $(DISTCLEANSUFFIXES)
142         $(RM) config.* .version version.h libavutil/avconfig.h
143
144 config:
145         $(SRC_PATH)/configure $(value FFMPEG_CONFIGURATION)
146
147 include $(SRC_PATH)/doc/Makefile
148 include $(SRC_PATH)/tests/Makefile
149
150 $(sort $(OBJDIRS)):
151         $(Q)mkdir -p $@
152
153 # Dummy rule to stop make trying to rebuild removed or renamed headers
154 %.h:
155         @:
156
157 # Disable suffix rules.  Most of the builtin rules are suffix rules,
158 # so this saves some time on slow systems.
159 .SUFFIXES:
160
161 .PHONY: all all-yes alltools *clean config examples install*
162 .PHONY: testprogs uninstall*