X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=common.mak;h=d4c1f14862b1b5e6849575df7658338a39a02c15;hb=be73a544af0b626f31c484d3f96e67d68f4175ea;hp=359aa119c814f165893650211019774bef5638c2;hpb=315c741d3d215f2861fb356dd0ba8637b6019127;p=ffmpeg diff --git a/common.mak b/common.mak index 359aa119c81..d4c1f14862b 100644 --- a/common.mak +++ b/common.mak @@ -2,123 +2,112 @@ # common bits used by all libraries # -LIBSRC = $(SRC_PATH_BARE)/lib$(NAME) +all: # make "all" default target -LIBVERSION = $(lib$(NAME)_VERSION) -LIBMAJOR = $(lib$(NAME)_VERSION_MAJOR) +ifndef SUBDIR +vpath %.c $(SRC_DIR) +vpath %.h $(SRC_DIR) +vpath %.S $(SRC_DIR) +vpath %.asm $(SRC_DIR) -vpath %.c $(LIBSRC) -vpath %.h $(LIBSRC) -vpath %.S $(LIBSRC) - -SRC_DIR = "$(LIBSRC)" +ifeq ($(SRC_DIR),$(SRC_PATH_BARE)) +BUILD_ROOT_REL = . +else +BUILD_ROOT_REL = .. +endif ALLFFLIBS = avcodec avdevice avfilter avformat avutil postproc swscale -CFLAGS += $(CFLAGS-yes) -OBJS += $(OBJS-yes) -ASM_OBJS += $(ASM_OBJS-yes) -CPP_OBJS += $(CPP_OBJS-yes) -FFLIBS += $(FFLIBS-yes) +CFLAGS := -DHAVE_AV_CONFIG_H -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE \ + -I$(BUILD_ROOT_REL) -I$(SRC_PATH) $(OPTFLAGS) -CFLAGS += -DHAVE_AV_CONFIG_H -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE \ - -D_ISOC9X_SOURCE -I$(BUILD_ROOT) -I$(SRC_PATH) \ - $(addprefix -I$(SRC_PATH)/lib,$(ALLFFLIBS)) $(OPTFLAGS) +%.o: %.c + $(CC) $(CFLAGS) $(LIBOBJFLAGS) -c -o $@ $< -EXTRALIBS := $(addprefix -l,$(addsuffix $(BUILDSUF),$(FFLIBS))) $(EXTRALIBS) -LDFLAGS := $(addprefix -L$(BUILD_ROOT)/lib,$(FFLIBS)) $(LDFLAGS) +%.o: %.S + $(CC) $(CFLAGS) $(LIBOBJFLAGS) -c -o $@ $< -SRCS := $(OBJS:.o=.c) $(ASM_OBJS:.o=.S) $(CPPOBJS:.o=.cpp) -OBJS := $(OBJS) $(ASM_OBJS) $(CPPOBJS) +%.ho: %.h + $(CC) $(CFLAGS) $(LIBOBJFLAGS) -Wno-unused -c -o $@ -x c $< -all: $(LIBNAME) $(SLIBNAME) +%.d: %.c + $(DEPEND_CMD) > $@ -$(LIBNAME): $(OBJS) - rm -f $@ - $(AR) rc $@ $^ $(EXTRAOBJS) - $(RANLIB) $@ +%.d: %.S + $(DEPEND_CMD) > $@ -$(SLIBNAME): $(SLIBNAME_WITH_MAJOR) - $(LN_S) $^ $@ +%.d: %.cpp + $(DEPEND_CMD) > $@ -$(SLIBNAME_WITH_MAJOR): $(OBJS) - $(SLIB_CREATE_DEF_CMD) - $(CC) $(SHFLAGS) $(LDFLAGS) -o $@ $^ $(EXTRALIBS) $(EXTRAOBJS) - $(SLIB_EXTRA_CMD) +%.o: %.d -%.o: %.c - $(CC) $(CFLAGS) $(LIBOBJFLAGS) -c -o $@ $< +%$(EXESUF): %.c -%.o: %.S - $(CC) $(CFLAGS) $(LIBOBJFLAGS) -c -o $@ $< +SVN_ENTRIES = $(SRC_PATH_BARE)/.svn/entries +ifeq ($(wildcard $(SVN_ENTRIES)),$(SVN_ENTRIES)) +$(BUILD_ROOT_REL)/version.h: $(SVN_ENTRIES) +endif -%: %.o $(LIBNAME) - $(CC) $(LDFLAGS) -o $@ $^ $(EXTRALIBS) +$(BUILD_ROOT_REL)/version.h: + $(SRC_PATH)/version.sh $(SRC_PATH) $@ $(EXTRA_VERSION) -%.ho: %.h - $(CC) $(CFLAGS) $(LIBOBJFLAGS) -Wno-unused -c -o $@ -x c $< +install: install-libs install-headers -ALLHEADERS = $(subst $(LIBSRC)/,,$(wildcard $(LIBSRC)/*.h)) -checkheaders: $(filter-out %_template.ho,$(ALLHEADERS:.h=.ho)) +uninstall: uninstall-libs uninstall-headers -depend dep: $(SRCS) - $(DEPEND_CMD) > .depend +.PHONY: all depend dep clean distclean install* uninstall* tests +endif -clean:: - rm -f *.o *~ *.a *.lib *.so *.so.* *.dylib *.dll \ - *.def *.dll.a *.exp *.ho *.map $(TESTS) +CFLAGS += $(CFLAGS-yes) +OBJS += $(OBJS-yes) +FFLIBS := $(FFLIBS-yes) $(FFLIBS) +TESTS += $(TESTS-yes) -distclean: clean - rm -f .depend +FFEXTRALIBS := $(addprefix -l,$(addsuffix $(BUILDSUF),$(FFLIBS))) $(EXTRALIBS) +FFLDFLAGS := $(addprefix -L$(BUILD_ROOT)/lib,$(FFLIBS)) $(LDFLAGS) -INSTALL_TARGETS-$(BUILD_SHARED) += install-lib-shared -INSTALL_TARGETS-$(BUILD_STATIC) += install-lib-static +OBJS := $(addprefix $(SUBDIR),$(OBJS)) +TESTS := $(addprefix $(SUBDIR),$(TESTS)) -install: install-libs install-headers +DEP_LIBS:=$(foreach NAME,$(FFLIBS),lib$(NAME)/$($(BUILD_SHARED:yes=S)LIBNAME)) -install-libs: $(INSTALL_TARGETS-yes) +ALLHEADERS := $(subst $(SRC_DIR)/,$(SUBDIR),$(wildcard $(SRC_DIR)/*.h)) +checkheaders: $(filter-out %_template.ho,$(ALLHEADERS:.h=.ho)) -install-lib-shared: $(SLIBNAME) - install -d "$(SHLIBDIR)" - install -m 755 $(SLIBNAME) "$(SHLIBDIR)/$(SLIBNAME_WITH_VERSION)" - $(STRIP) "$(SHLIBDIR)/$(SLIBNAME_WITH_VERSION)" - cd "$(SHLIBDIR)" && \ - $(LN_S) $(SLIBNAME_WITH_VERSION) $(SLIBNAME_WITH_MAJOR) - cd "$(SHLIBDIR)" && \ - $(LN_S) $(SLIBNAME_WITH_VERSION) $(SLIBNAME) - $(SLIB_INSTALL_EXTRA_CMD) +DEPS := $(OBJS:.o=.d) +depend dep: $(DEPS) -install-lib-static: $(LIBNAME) - install -d "$(LIBDIR)" - install -m 644 $(LIBNAME) "$(LIBDIR)" - $(LIB_INSTALL_EXTRA_CMD) +CLEANSUFFIXES = *.o *~ *.ho +LIBSUFFIXES = *.a *.lib *.so *.so.* *.dylib *.dll *.def *.dll.a *.exp *.map +DISTCLEANSUFFIXES = *.d *.pc -INCINSTDIR = $(INCDIR)/lib$(NAME) +define RULES +$(SUBDIR)%$(EXESUF): $(SUBDIR)%.o + $(CC) $(FFLDFLAGS) -o $$@ $$^ $(SUBDIR)$(LIBNAME) $(FFEXTRALIBS) -install-headers: - install -d "$(INCINSTDIR)" - install -d "$(LIBDIR)/pkgconfig" - install -m 644 $(addprefix $(SRC_DIR)/,$(HEADERS)) "$(INCINSTDIR)" - install -m 644 $(BUILD_ROOT)/lib$(NAME).pc "$(LIBDIR)/pkgconfig" +$(SUBDIR)%-test.o: $(SUBDIR)%.c + $(CC) $(CFLAGS) -DTEST -c -o $$@ $$^ -uninstall: uninstall-libs uninstall-headers +$(SUBDIR)%-test.o: $(SUBDIR)%-test.c + $(CC) $(CFLAGS) -DTEST -c -o $$@ $$^ -uninstall-libs: - -rm -f "$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR)" \ - "$(SHLIBDIR)/$(SLIBNAME)" \ - "$(SHLIBDIR)/$(SLIBNAME_WITH_VERSION)" - -$(SLIB_UNINSTALL_EXTRA_CMD) - -rm -f "$(LIBDIR)/$(LIBNAME)" +$(SUBDIR)i386/%.o: $(SUBDIR)i386/%.asm + $(YASM) $(YASMFLAGS) -I $$( $$@ -tests: $(TESTS) +clean:: + rm -f $(TESTS) $(addprefix $(SUBDIR),$(CLEANFILES) $(CLEANSUFFIXES) $(LIBSUFFIXES)) \ + $(addprefix $(SUBDIR), $(foreach suffix,$(CLEANSUFFIXES),$(addsuffix /$(suffix),$(DIRS)))) -%-test$(EXESUF): %.c $(LIBNAME) - $(CC) $(CFLAGS) $(LDFLAGS) -DTEST -o $@ $^ $(EXTRALIBS) +distclean:: clean + rm -f $(addprefix $(SUBDIR),$(DISTCLEANSUFFIXES)) \ + $(addprefix $(SUBDIR), $(foreach suffix,$(DISTCLEANSUFFIXES),$(addsuffix /$(suffix),$(DIRS)))) +endef -.PHONY: all depend dep clean distclean install* uninstall* tests +$(eval $(RULES)) + +tests: $(TESTS) --include .depend +-include $(DEPS)