Browse code

build: Store library version numbers in .version files

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.

Diego Biurrun authored on 2016/12/18 04:01:07
Showing 5 changed files
... ...
@@ -67,7 +67,7 @@ COMPILE_HOSTC = $(call COMPILE,HOSTCC)
67 67
 %.h.c:
68 68
 	$(Q)echo '#include "$*.h"' >$@
69 69
 
70
-%.c %.h %.ver: TAG = GEN
70
+%.c %.h %.ver %.version: TAG = GEN
71 71
 
72 72
 AVPROGS-$(CONFIG_AVCONV)   += avconv
73 73
 AVPROGS-$(CONFIG_AVPLAY)   += avplay
... ...
@@ -49,7 +49,7 @@ $(TOOLOBJS): | tools
49 49
 
50 50
 OBJDIRS := $(OBJDIRS) $(dir $(OBJS) $(HOBJS) $(HOSTOBJS) $(TESTOBJS))
51 51
 
52
-CLEANSUFFIXES     = *.d *.o *~ *.h.c *.gcda *.gcno *.map *.ver
52
+CLEANSUFFIXES     = *.d *.o *~ *.h.c *.gcda *.gcno *.map *.ver *.version
53 53
 DISTCLEANSUFFIXES = *.pc
54 54
 LIBSUFFIXES       = *.a *.lib *.so *.so.* *.dylib *.dll *.def *.dll.a
55 55
 
... ...
@@ -1,5 +1,7 @@
1 1
 include $(SRC_PATH)/avbuild/common.mak
2 2
 
3
+-include $(SUBDIR)lib$(NAME).version
4
+
3 5
 LIBVERSION := $(lib$(NAME)_VERSION)
4 6
 LIBMAJOR   := $(lib$(NAME)_VERSION_MAJOR)
5 7
 LIBMINOR   := $(lib$(NAME)_VERSION_MINOR)
... ...
@@ -30,6 +32,9 @@ $(TESTPROGS): THISLIB = $(SUBDIR)$(LIBNAME)
30 30
 $(TESTPROGS) $(TOOLS): %$(EXESUF): %.o
31 31
 	$$(LD) $(LDFLAGS) $(LDEXEFLAGS) $$(LD_O) $$(filter %.o,$$^) $$(THISLIB) $(FFEXTRALIBS) $$(ELIBS)
32 32
 
33
+$(SUBDIR)lib$(NAME).version: $(SUBDIR)version.h | $(SUBDIR)
34
+	$$(M) $$(SRC_PATH)/avbuild/libversion.sh $(NAME) $$< > $$@
35
+
33 36
 $(SUBDIR)lib$(NAME).ver: $(SUBDIR)lib$(NAME).v $(OBJS)
34 37
 	$$(M)sed 's/MAJOR/$(lib$(NAME)_VERSION_MAJOR)/' $$< | $(VERSION_SCRIPT_POSTPROCESS_CMD) > $$@
35 38
 
36 39
new file mode 100755
... ...
@@ -0,0 +1,15 @@
0
+#!/bin/sh
1
+
2
+toupper(){
3
+    echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
4
+}
5
+
6
+name=lib$1
7
+ucname=$(toupper ${name})
8
+file=$2
9
+
10
+eval $(awk "/#define ${ucname}_VERSION_M/ { print \$2 \"=\" \$3 }" "$file")
11
+eval ${ucname}_VERSION=\$${ucname}_VERSION_MAJOR.\$${ucname}_VERSION_MINOR.\$${ucname}_VERSION_MICRO
12
+eval echo "${name}_VERSION=\$${ucname}_VERSION"
13
+eval echo "${name}_VERSION_MAJOR=\$${ucname}_VERSION_MAJOR"
14
+eval echo "${name}_VERSION_MINOR=\$${ucname}_VERSION_MINOR"
... ...
@@ -5318,19 +5318,6 @@ VERSION_SCRIPT_POSTPROCESS_CMD=${VERSION_SCRIPT_POSTPROCESS_CMD}
5318 5318
 SAMPLES:=${samples:-\$(LIBAV_SAMPLES)}
5319 5319
 EOF
5320 5320
 
5321
-get_version(){
5322
-    lcname=lib${1}
5323
-    name=$(toupper $lcname)
5324
-    file=$source_path/$lcname/version.h
5325
-    eval $(awk "/#define ${name}_VERSION_M/ { print \$2 \"=\" \$3 }" "$file")
5326
-    eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO
5327
-    eval echo "${lcname}_VERSION=\$${name}_VERSION"             >> avbuild/config.mak
5328
-    eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> avbuild/config.mak
5329
-    eval echo "${lcname}_VERSION_MINOR=\$${name}_VERSION_MINOR" >> avbuild/config.mak
5330
-}
5331
-
5332
-map 'get_version $v' $LIBRARY_LIST
5333
-
5334 5321
 map 'eval echo "${v}_FFLIBS=\$${v}_deps" >> avbuild/config.mak' $LIBRARY_LIST
5335 5322
 
5336 5323
 print_program_extralibs(){