Commit 6fdd35a3 authored by James Almer's avatar James Almer

Merge commit '92db5083'

* commit '92db5083':
  build: Generate pkg-config files from Make and not from configure
  build: Store library version numbers in .version files

Includes cherry-picked commits 8a34f365 and
ee164727 to fix issues.

Changes were also made to retain support for raise_major and build_suffix.

Reviewed-by: ubitux
Merged-by: 's avatarJames Almer <jamrial@gmail.com>
parents c0f17a90 92db5083
...@@ -87,7 +87,6 @@ tools/target_dec_%_fuzzer$(EXESUF): $(FF_DEP_LIBS) ...@@ -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) := ...@@ -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 ...@@ -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 ...@@ -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(){ cat > ffbuild/config.sh <<EOF
eval printf "\"lib${1}${build_suffix} >= \$LIB$(toupper ${1})_VERSION, \"" # Automatically generated by configure - do not modify!
} shared=$shared
build_suffix=$build_suffix
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
prefix=$prefix prefix=$prefix
exec_prefix=\${prefix}
libdir=$libdir libdir=$libdir
includedir=$incdir incdir=$incdir
rpath=$(enabled rpath && echo "-Wl,-rpath,\${libdir}")
Name: $name source_path=${source_path}
Description: $comment LIBPREF=${LIBPREF}
Version: $version LIBSUF=${LIBSUF}
Requires: $(enabled shared || echo $requires)
Requires.private: $(enabled shared && echo $requires) extralibs_avutil="$LIBRT $LIBM"
Conflicts: extralibs_avcodec="$extralibs"
Libs: -L\${libdir} $(enabled rpath && echo "-Wl,-rpath,\${libdir}") -l${shortname} $(enabled shared || echo $libs) extralibs_avformat="$extralibs"
Libs.private: $(enabled shared && echo $libs) extralibs_avdevice="$extralibs"
Cflags: -I\${includedir} extralibs_avfilter="$extralibs"
extralibs_avresample="$LIBM"
extralibs_postproc=""
extralibs_swscale="$LIBM"
extralibs_swresample="$LIBM $LIBSOXR"
EOF EOF
mkdir -p doc/examples/pc-uninstalled for lib in $LIBRARY_LIST; do
includedir=${source_path} lib_deps="$(eval echo \$${lib}_deps)"
[ "$includedir" = . ] && includedir="\${pcfiledir}/../../.." echo ${lib}_deps=\"$lib_deps\" >> ffbuild/config.sh
cat <<EOF > doc/examples/pc-uninstalled/${name}-uninstalled.pc done
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"
...@@ -2,3 +2,4 @@ ...@@ -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) ...@@ -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 ...@@ -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
......
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) ...@@ -7,8 +9,8 @@ INCINSTDIR := $(INCDIR)/lib$(NAME)
INSTHEADERS := $(INSTHEADERS) $(HEADERS:%=$(SUBDIR)%) INSTHEADERS := $(INSTHEADERS) $(HEADERS:%=$(SUBDIR)%)
all-$(CONFIG_STATIC): $(SUBDIR)$(LIBNAME) all-$(CONFIG_STATIC): $(SUBDIR)$(LIBNAME) $(SUBDIR)lib$(NAME).pc
all-$(CONFIG_SHARED): $(SUBDIR)$(SLIBNAME) 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) ...@@ -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) > $$@
......
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"
#!/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
include $(SUBDIR)../ffbuild/config.mak
NAME = avcodec NAME = avcodec
DESC = FFmpeg codec library
HEADERS = avcodec.h \ HEADERS = avcodec.h \
avdct.h \ avdct.h \
......
include $(SUBDIR)../ffbuild/config.mak
NAME = avdevice NAME = avdevice
DESC = FFmpeg device handling library
HEADERS = avdevice.h \ HEADERS = avdevice.h \
version.h \ version.h \
......
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 \
......
include $(SUBDIR)../ffbuild/config.mak
NAME = avformat NAME = avformat
DESC = FFmpeg container format library
HEADERS = avformat.h \ HEADERS = avformat.h \
avio.h \ avio.h \
......
NAME = avresample NAME = avresample
DESC = Libav audio resampling library
HEADERS = avresample.h \ HEADERS = avresample.h \
version.h \ version.h \
......
include $(SUBDIR)../ffbuild/config.mak
NAME = avutil NAME = avutil
DESC = FFmpeg utility library
HEADERS = adler32.h \ HEADERS = adler32.h \
aes.h \ aes.h \
......
include $(SUBDIR)../ffbuild/config.mak
NAME = postproc NAME = postproc
DESC = FFmpeg postprocessing library
FFLIBS = avutil FFLIBS = avutil
HEADERS = postprocess.h \ HEADERS = postprocess.h \
......
include $(SUBDIR)../ffbuild/config.mak
NAME = swresample NAME = swresample
DESC = FFmpeg audio resampling library
FFLIBS = avutil FFLIBS = avutil
HEADERS = swresample.h \ HEADERS = swresample.h \
......
include $(SUBDIR)../ffbuild/config.mak
NAME = swscale NAME = swscale
DESC = FFmpeg image rescaling library
HEADERS = swscale.h \ HEADERS = swscale.h \
version.h \ version.h \
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment