This moves work from the configure to the Make stage where it can be parallelized and ensures that shared libraries are built with the right version number in the filename.tags/n3.4
@@ -67,7 +67,7 @@ COMPILE_HOSTC = $(call COMPILE,HOSTCC) | |||||
%.h.c: | %.h.c: | ||||
$(Q)echo '#include "$*.h"' >$@ | $(Q)echo '#include "$*.h"' >$@ | ||||
%.c %.h %.ver: TAG = GEN | |||||
%.c %.h %.ver %.version: TAG = GEN | |||||
AVPROGS-$(CONFIG_AVCONV) += avconv | AVPROGS-$(CONFIG_AVCONV) += avconv | ||||
AVPROGS-$(CONFIG_AVPLAY) += avplay | AVPROGS-$(CONFIG_AVPLAY) += avplay | ||||
@@ -49,7 +49,7 @@ $(TOOLOBJS): | tools | |||||
OBJDIRS := $(OBJDIRS) $(dir $(OBJS) $(HOBJS) $(HOSTOBJS) $(TESTOBJS)) | OBJDIRS := $(OBJDIRS) $(dir $(OBJS) $(HOBJS) $(HOSTOBJS) $(TESTOBJS)) | ||||
CLEANSUFFIXES = *.d *.o *~ *.h.c *.gcda *.gcno *.map *.ver | |||||
CLEANSUFFIXES = *.d *.o *~ *.h.c *.gcda *.gcno *.map *.ver *.version | |||||
DISTCLEANSUFFIXES = *.pc | DISTCLEANSUFFIXES = *.pc | ||||
LIBSUFFIXES = *.a *.lib *.so *.so.* *.dylib *.dll *.def *.dll.a | LIBSUFFIXES = *.a *.lib *.so *.so.* *.dylib *.dll *.def *.dll.a | ||||
@@ -1,5 +1,7 @@ | |||||
include $(SRC_PATH)/avbuild/common.mak | include $(SRC_PATH)/avbuild/common.mak | ||||
-include $(SUBDIR)lib$(NAME).version | |||||
LIBVERSION := $(lib$(NAME)_VERSION) | LIBVERSION := $(lib$(NAME)_VERSION) | ||||
LIBMAJOR := $(lib$(NAME)_VERSION_MAJOR) | LIBMAJOR := $(lib$(NAME)_VERSION_MAJOR) | ||||
LIBMINOR := $(lib$(NAME)_VERSION_MINOR) | LIBMINOR := $(lib$(NAME)_VERSION_MINOR) | ||||
@@ -30,6 +32,9 @@ $(TESTPROGS): THISLIB = $(SUBDIR)$(LIBNAME) | |||||
$(TESTPROGS) $(TOOLS): %$(EXESUF): %.o | $(TESTPROGS) $(TOOLS): %$(EXESUF): %.o | ||||
$$(LD) $(LDFLAGS) $(LDEXEFLAGS) $$(LD_O) $$(filter %.o,$$^) $$(THISLIB) $(FFEXTRALIBS) $$(ELIBS) | $$(LD) $(LDFLAGS) $(LDEXEFLAGS) $$(LD_O) $$(filter %.o,$$^) $$(THISLIB) $(FFEXTRALIBS) $$(ELIBS) | ||||
$(SUBDIR)lib$(NAME).version: $(SUBDIR)version.h | $(SUBDIR) | |||||
$$(M) $$(SRC_PATH)/avbuild/libversion.sh $(NAME) $$< > $$@ | |||||
$(SUBDIR)lib$(NAME).ver: $(SUBDIR)lib$(NAME).v $(OBJS) | $(SUBDIR)lib$(NAME).ver: $(SUBDIR)lib$(NAME).v $(OBJS) | ||||
$$(M)sed 's/MAJOR/$(lib$(NAME)_VERSION_MAJOR)/' $$< | $(VERSION_SCRIPT_POSTPROCESS_CMD) > $$@ | $$(M)sed 's/MAJOR/$(lib$(NAME)_VERSION_MAJOR)/' $$< | $(VERSION_SCRIPT_POSTPROCESS_CMD) > $$@ | ||||
@@ -0,0 +1,15 @@ | |||||
#!/bin/sh | |||||
toupper(){ | |||||
echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ | |||||
} | |||||
name=lib$1 | |||||
ucname=$(toupper ${name}) | |||||
file=$2 | |||||
eval $(awk "/#define ${ucname}_VERSION_M/ { print \$2 \"=\" \$3 }" "$file") | |||||
eval ${ucname}_VERSION=\$${ucname}_VERSION_MAJOR.\$${ucname}_VERSION_MINOR.\$${ucname}_VERSION_MICRO | |||||
eval echo "${name}_VERSION=\$${ucname}_VERSION" | |||||
eval echo "${name}_VERSION_MAJOR=\$${ucname}_VERSION_MAJOR" | |||||
eval echo "${name}_VERSION_MINOR=\$${ucname}_VERSION_MINOR" |
@@ -5318,19 +5318,6 @@ VERSION_SCRIPT_POSTPROCESS_CMD=${VERSION_SCRIPT_POSTPROCESS_CMD} | |||||
SAMPLES:=${samples:-\$(LIBAV_SAMPLES)} | SAMPLES:=${samples:-\$(LIBAV_SAMPLES)} | ||||
EOF | EOF | ||||
get_version(){ | |||||
lcname=lib${1} | |||||
name=$(toupper $lcname) | |||||
file=$source_path/$lcname/version.h | |||||
eval $(awk "/#define ${name}_VERSION_M/ { print \$2 \"=\" \$3 }" "$file") | |||||
eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO | |||||
eval echo "${lcname}_VERSION=\$${name}_VERSION" >> avbuild/config.mak | |||||
eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> avbuild/config.mak | |||||
eval echo "${lcname}_VERSION_MINOR=\$${name}_VERSION_MINOR" >> avbuild/config.mak | |||||
} | |||||
map 'get_version $v' $LIBRARY_LIST | |||||
map 'eval echo "${v}_FFLIBS=\$${v}_deps" >> avbuild/config.mak' $LIBRARY_LIST | map 'eval echo "${v}_FFLIBS=\$${v}_deps" >> avbuild/config.mak' $LIBRARY_LIST | ||||
print_program_extralibs(){ | print_program_extralibs(){ | ||||