* commit '92db5083077a8b0f8e1050507671b456fd155125': build: Generate pkg-config files from Make and not from configure build: Store library version numbers in .version files Includes cherry-picked commitstags/n3.48a34f36593
andee164727dd
to fix issues. Changes were also made to retain support for raise_major and build_suffix. Reviewed-by: ubitux Merged-by: James Almer <jamrial@gmail.com>
@@ -87,7 +87,6 @@ tools/target_dec_%_fuzzer$(EXESUF): $(FF_DEP_LIBS) | |||||
CONFIGURABLE_COMPONENTS = \ | CONFIGURABLE_COMPONENTS = \ | ||||
$(wildcard $(FFLIBS:%=$(SRC_PATH)/lib%/all*.c)) \ | $(wildcard $(FFLIBS:%=$(SRC_PATH)/lib%/all*.c)) \ | ||||
$(wildcard $(FFLIBS:%=$(SRC_PATH)/lib%/version.h)) \ | |||||
$(SRC_PATH)/libavcodec/bitstream_filters.c \ | $(SRC_PATH)/libavcodec/bitstream_filters.c \ | ||||
$(SRC_PATH)/libavformat/protocols.c \ | $(SRC_PATH)/libavformat/protocols.c \ | ||||
@@ -109,6 +108,12 @@ $(1) := | |||||
$(1)-yes := | $(1)-yes := | ||||
endef | endef | ||||
ifdef CONFIG_RAISE_MAJOR | |||||
RAISE_MAJOR = 100 | |||||
else | |||||
RAISE_MAJOR = 0 | |||||
endif | |||||
define DOSUBDIR | define DOSUBDIR | ||||
$(foreach V,$(SUBDIR_VARS),$(eval $(call RESET,$(V)))) | $(foreach V,$(SUBDIR_VARS),$(eval $(call RESET,$(V)))) | ||||
SUBDIR := $(1)/ | SUBDIR := $(1)/ | ||||
@@ -6756,20 +6756,6 @@ NOREDZONE_FLAGS=$noredzone_flags | |||||
LIBFUZZER_PATH=$libfuzzer_path | LIBFUZZER_PATH=$libfuzzer_path | ||||
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") | |||||
enabled raise_major && eval ${name}_VERSION_MAJOR=$((${name}_VERSION_MAJOR+100)) | |||||
eval ${name}_VERSION=\$${name}_VERSION_MAJOR.\$${name}_VERSION_MINOR.\$${name}_VERSION_MICRO | |||||
eval echo "${lcname}_VERSION=\$${name}_VERSION" >> ffbuild/config.mak | |||||
eval echo "${lcname}_VERSION_MAJOR=\$${name}_VERSION_MAJOR" >> ffbuild/config.mak | |||||
eval echo "${lcname}_VERSION_MINOR=\$${name}_VERSION_MINOR" >> ffbuild/config.mak | |||||
} | |||||
map 'get_version $v' $LIBRARY_LIST | |||||
map 'eval echo "${v}_FFLIBS=\$${v}_deps" >> ffbuild/config.mak' $LIBRARY_LIST | map 'eval echo "${v}_FFLIBS=\$${v}_deps" >> ffbuild/config.mak' $LIBRARY_LIST | ||||
print_program_extralibs(){ | print_program_extralibs(){ | ||||
@@ -6866,64 +6852,32 @@ if test -n "$WARNINGS"; then | |||||
enabled fatal_warnings && exit 1 | enabled fatal_warnings && exit 1 | ||||
fi | fi | ||||
# build pkg-config files | |||||
# Settings for pkg-config files | |||||
lib_version(){ | |||||
eval printf "\"lib${1}${build_suffix} >= \$LIB$(toupper ${1})_VERSION, \"" | |||||
} | |||||
pkgconfig_generate(){ | |||||
name=$1 | |||||
shortname=${name#lib}${build_suffix} | |||||
comment=$2 | |||||
version=$3 | |||||
libs=$4 | |||||
requires=$(map 'lib_version $v' $(eval echo \$${name#lib}_deps)) | |||||
requires=${requires%, } | |||||
enabled ${name#lib} || return 0 | |||||
mkdir -p $name | |||||
cat <<EOF > $name/$name${build_suffix}.pc | |||||
cat > ffbuild/config.sh <<EOF | |||||
# Automatically generated by configure - do not modify! | |||||
shared=$shared | |||||
build_suffix=$build_suffix | |||||
prefix=$prefix | prefix=$prefix | ||||
exec_prefix=\${prefix} | |||||
libdir=$libdir | libdir=$libdir | ||||
includedir=$incdir | |||||
Name: $name | |||||
Description: $comment | |||||
Version: $version | |||||
Requires: $(enabled shared || echo $requires) | |||||
Requires.private: $(enabled shared && echo $requires) | |||||
Conflicts: | |||||
Libs: -L\${libdir} $(enabled rpath && echo "-Wl,-rpath,\${libdir}") -l${shortname} $(enabled shared || echo $libs) | |||||
Libs.private: $(enabled shared && echo $libs) | |||||
Cflags: -I\${includedir} | |||||
incdir=$incdir | |||||
rpath=$(enabled rpath && echo "-Wl,-rpath,\${libdir}") | |||||
source_path=${source_path} | |||||
LIBPREF=${LIBPREF} | |||||
LIBSUF=${LIBSUF} | |||||
extralibs_avutil="$LIBRT $LIBM" | |||||
extralibs_avcodec="$extralibs" | |||||
extralibs_avformat="$extralibs" | |||||
extralibs_avdevice="$extralibs" | |||||
extralibs_avfilter="$extralibs" | |||||
extralibs_avresample="$LIBM" | |||||
extralibs_postproc="" | |||||
extralibs_swscale="$LIBM" | |||||
extralibs_swresample="$LIBM $LIBSOXR" | |||||
EOF | EOF | ||||
mkdir -p doc/examples/pc-uninstalled | |||||
includedir=${source_path} | |||||
[ "$includedir" = . ] && includedir="\${pcfiledir}/../../.." | |||||
cat <<EOF > doc/examples/pc-uninstalled/${name}-uninstalled.pc | |||||
prefix= | |||||
exec_prefix= | |||||
libdir=\${pcfiledir}/../../../$name | |||||
includedir=${includedir} | |||||
Name: $name | |||||
Description: $comment | |||||
Version: $version | |||||
Requires: $requires | |||||
Conflicts: | |||||
Libs: -L\${libdir} -Wl,-rpath,\${libdir} -l${shortname} $(enabled shared || echo $libs) | |||||
Cflags: -I\${includedir} | |||||
EOF | |||||
} | |||||
pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION" "$LIBRT $LIBM" | |||||
pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" | |||||
pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" | |||||
pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" | |||||
pkgconfig_generate libavfilter "FFmpeg audio/video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" | |||||
pkgconfig_generate libpostproc "FFmpeg postprocessing library" "$LIBPOSTPROC_VERSION" "" | |||||
pkgconfig_generate libavresample "Libav audio resampling library" "$LIBAVRESAMPLE_VERSION" "$LIBM" | |||||
pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "$LIBM" | |||||
pkgconfig_generate libswresample "FFmpeg audio resampling library" "$LIBSWRESAMPLE_VERSION" "$LIBM $LIBSOXR" | |||||
for lib in $LIBRARY_LIST; do | |||||
lib_deps="$(eval echo \$${lib}_deps)" | |||||
echo ${lib}_deps=\"$lib_deps\" >> ffbuild/config.sh | |||||
done |
@@ -2,3 +2,4 @@ | |||||
/config.fate | /config.fate | ||||
/config.log | /config.log | ||||
/config.mak | /config.mak | ||||
/config.sh |
@@ -89,7 +89,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 %.pc %.ver %.version: TAG = GEN | |||||
# Dummy rule to stop make trying to rebuild removed or renamed headers | # Dummy rule to stop make trying to rebuild removed or renamed headers | ||||
%.h: | %.h: | ||||
@@ -154,7 +154,7 @@ $(TOOLOBJS): | tools | |||||
OBJDIRS := $(OBJDIRS) $(dir $(OBJS) $(HOBJS) $(HOSTOBJS) $(SLIBOBJS) $(TESTOBJS)) | OBJDIRS := $(OBJDIRS) $(dir $(OBJS) $(HOBJS) $(HOSTOBJS) $(SLIBOBJS) $(TESTOBJS)) | ||||
CLEANSUFFIXES = *.d *.o *~ *.h.c *.gcda *.gcno *.map *.ver *.ho *$(DEFAULT_YASMD).asm | |||||
CLEANSUFFIXES = *.d *.o *~ *.h.c *.gcda *.gcno *.map *.ver *.version *.ho *$(DEFAULT_YASMD).asm | |||||
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)/ffbuild/common.mak | include $(SRC_PATH)/ffbuild/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) | ||||
@@ -7,8 +9,8 @@ INCINSTDIR := $(INCDIR)/lib$(NAME) | |||||
INSTHEADERS := $(INSTHEADERS) $(HEADERS:%=$(SUBDIR)%) | INSTHEADERS := $(INSTHEADERS) $(HEADERS:%=$(SUBDIR)%) | ||||
all-$(CONFIG_STATIC): $(SUBDIR)$(LIBNAME) | |||||
all-$(CONFIG_SHARED): $(SUBDIR)$(SLIBNAME) | |||||
all-$(CONFIG_STATIC): $(SUBDIR)$(LIBNAME) $(SUBDIR)lib$(NAME).pc | |||||
all-$(CONFIG_SHARED): $(SUBDIR)$(SLIBNAME) $(SUBDIR)lib$(NAME).pc | |||||
LIBOBJS := $(OBJS) $(SUBDIR)%.h.o $(TESTOBJS) | LIBOBJS := $(OBJS) $(SUBDIR)%.h.o $(TESTOBJS) | ||||
$(LIBOBJS) $(LIBOBJS:.o=.s) $(LIBOBJS:.o=.i): CPPFLAGS += -DHAVE_AV_CONFIG_H | $(LIBOBJS) $(LIBOBJS:.o=.s) $(LIBOBJS:.o=.i): CPPFLAGS += -DHAVE_AV_CONFIG_H | ||||
@@ -31,6 +33,12 @@ $(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)/ffbuild/libversion.sh $(NAME) $$< $(RAISE_MAJOR) > $$@ | |||||
$(SUBDIR)lib$(FULLNAME).pc: $(SUBDIR)version.h | $(SUBDIR) | |||||
$$(M) $$(SRC_PATH)/ffbuild/pkgconfig_generate.sh $(NAME) "$(DESC)" | |||||
$(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 @@ | |||||
toupper(){ | |||||
echo "$@" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ | |||||
} | |||||
name=lib$1 | |||||
ucname=$(toupper ${name}) | |||||
file=$2 | |||||
raise_major=$3 | |||||
eval $(awk "/#define ${ucname}_VERSION_M/ { print \$2 \"=\" \$3 }" "$file") | |||||
eval ${ucname}_VERSION_MAJOR=$((${ucname}_VERSION_MAJOR+${raise_major})) | |||||
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" |
@@ -0,0 +1,62 @@ | |||||
#!/bin/sh | |||||
. ffbuild/config.sh | |||||
if test "$shared" = "yes"; then | |||||
shared=true | |||||
else | |||||
shared=false | |||||
fi | |||||
shortname=$1 | |||||
name=lib${shortname} | |||||
fullname=${name}${build_suffix} | |||||
comment=$2 | |||||
libs=$(eval echo \$extralibs_${shortname}) | |||||
deps=$(eval echo \$${shortname}_deps) | |||||
for dep in $deps; do | |||||
depname=lib${dep} | |||||
fulldepname=${depname}${build_suffix} | |||||
. ${depname}/${depname}.version | |||||
depversion=$(eval echo \$${depname}_VERSION) | |||||
requires="$requires ${fulldepname} >= ${depversion}, " | |||||
done | |||||
requires=${requires%, } | |||||
version=$(grep ${name}_VERSION= $name/${name}.version | cut -d= -f2) | |||||
cat <<EOF > $name/$fullname.pc | |||||
prefix=$prefix | |||||
exec_prefix=\${prefix} | |||||
libdir=$libdir | |||||
includedir=$incdir | |||||
Name: $fullname | |||||
Description: $comment | |||||
Version: $version | |||||
Requires: $($shared || echo $requires) | |||||
Requires.private: $($shared && echo $requires) | |||||
Conflicts: | |||||
Libs: -L\${libdir} $rpath -l${fullname#lib} $($shared || echo $libs) | |||||
Libs.private: $($shared && echo $libs) | |||||
Cflags: -I\${includedir} | |||||
EOF | |||||
mkdir -p doc/examples/pc-uninstalled | |||||
includedir=${source_path} | |||||
[ "$includedir" = . ] && includedir="\${pcfiledir}/../../.." | |||||
cat <<EOF > doc/examples/pc-uninstalled/${name}-uninstalled.pc | |||||
prefix= | |||||
exec_prefix= | |||||
libdir=\${pcfiledir}/../../../$name | |||||
includedir=${source_path} | |||||
Name: $fullname | |||||
Description: $comment | |||||
Version: $version | |||||
Requires: $requires | |||||
Conflicts: | |||||
Libs: -L\${libdir} -Wl,-rpath,\${libdir} -l${fullname#lib} $($shared || echo $libs) | |||||
Cflags: -I\${includedir} | |||||
EOF |
@@ -1,6 +1,5 @@ | |||||
include $(SUBDIR)../ffbuild/config.mak | |||||
NAME = avcodec | NAME = avcodec | ||||
DESC = FFmpeg codec library | |||||
HEADERS = avcodec.h \ | HEADERS = avcodec.h \ | ||||
avdct.h \ | avdct.h \ | ||||
@@ -1,6 +1,5 @@ | |||||
include $(SUBDIR)../ffbuild/config.mak | |||||
NAME = avdevice | NAME = avdevice | ||||
DESC = FFmpeg device handling library | |||||
HEADERS = avdevice.h \ | HEADERS = avdevice.h \ | ||||
version.h \ | version.h \ | ||||
@@ -1,6 +1,5 @@ | |||||
include $(SUBDIR)../ffbuild/config.mak | |||||
NAME = avfilter | NAME = avfilter | ||||
DESC = FFmpeg audio/video filtering library | |||||
HEADERS = avfilter.h \ | HEADERS = avfilter.h \ | ||||
avfiltergraph.h \ | avfiltergraph.h \ | ||||
@@ -1,6 +1,5 @@ | |||||
include $(SUBDIR)../ffbuild/config.mak | |||||
NAME = avformat | NAME = avformat | ||||
DESC = FFmpeg container format library | |||||
HEADERS = avformat.h \ | HEADERS = avformat.h \ | ||||
avio.h \ | avio.h \ | ||||
@@ -1,4 +1,5 @@ | |||||
NAME = avresample | NAME = avresample | ||||
DESC = Libav audio resampling library | |||||
HEADERS = avresample.h \ | HEADERS = avresample.h \ | ||||
version.h \ | version.h \ | ||||
@@ -1,6 +1,5 @@ | |||||
include $(SUBDIR)../ffbuild/config.mak | |||||
NAME = avutil | NAME = avutil | ||||
DESC = FFmpeg utility library | |||||
HEADERS = adler32.h \ | HEADERS = adler32.h \ | ||||
aes.h \ | aes.h \ | ||||
@@ -1,6 +1,5 @@ | |||||
include $(SUBDIR)../ffbuild/config.mak | |||||
NAME = postproc | NAME = postproc | ||||
DESC = FFmpeg postprocessing library | |||||
FFLIBS = avutil | FFLIBS = avutil | ||||
HEADERS = postprocess.h \ | HEADERS = postprocess.h \ | ||||
@@ -1,6 +1,5 @@ | |||||
include $(SUBDIR)../ffbuild/config.mak | |||||
NAME = swresample | NAME = swresample | ||||
DESC = FFmpeg audio resampling library | |||||
FFLIBS = avutil | FFLIBS = avutil | ||||
HEADERS = swresample.h \ | HEADERS = swresample.h \ | ||||
@@ -1,6 +1,5 @@ | |||||
include $(SUBDIR)../ffbuild/config.mak | |||||
NAME = swscale | NAME = swscale | ||||
DESC = FFmpeg image rescaling library | |||||
HEADERS = swscale.h \ | HEADERS = swscale.h \ | ||||
version.h \ | version.h \ | ||||