Commit 92db5083 authored by Diego Biurrun's avatar Diego Biurrun

build: Generate pkg-config files from Make and not from configure

This moves work from the configure to the Make stage where it can
be parallelized and ensures that pkgconfig files are updated when
library versions change.

Bug-Id: 449
parent edb43487
...@@ -67,7 +67,7 @@ COMPILE_HOSTC = $(call COMPILE,HOSTCC) ...@@ -67,7 +67,7 @@ COMPILE_HOSTC = $(call COMPILE,HOSTCC)
%.h.c: %.h.c:
$(Q)echo '#include "$*.h"' >$@ $(Q)echo '#include "$*.h"' >$@
%.c %.h %.ver %.version: TAG = GEN %.c %.h %.pc %.ver %.version: TAG = GEN
AVPROGS-$(CONFIG_AVCONV) += avconv AVPROGS-$(CONFIG_AVCONV) += avconv
AVPROGS-$(CONFIG_AVPLAY) += avplay AVPROGS-$(CONFIG_AVPLAY) += avplay
...@@ -125,7 +125,6 @@ tools/cws2fws$(EXESUF): ELIBS = $(ZLIB) ...@@ -125,7 +125,6 @@ tools/cws2fws$(EXESUF): ELIBS = $(ZLIB)
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 \
......
...@@ -2,3 +2,4 @@ ...@@ -2,3 +2,4 @@
/config.fate /config.fate
/config.log /config.log
/config.mak /config.mak
/config.sh
...@@ -9,8 +9,8 @@ INCINSTDIR := $(INCDIR)/lib$(NAME) ...@@ -9,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=.i): CPPFLAGS += -DHAVE_AV_CONFIG_H $(LIBOBJS) $(LIBOBJS:.o=.i): CPPFLAGS += -DHAVE_AV_CONFIG_H
...@@ -35,6 +35,9 @@ $(TESTPROGS) $(TOOLS): %$(EXESUF): %.o ...@@ -35,6 +35,9 @@ $(TESTPROGS) $(TOOLS): %$(EXESUF): %.o
$(SUBDIR)lib$(NAME).version: $(SUBDIR)version.h | $(SUBDIR) $(SUBDIR)lib$(NAME).version: $(SUBDIR)version.h | $(SUBDIR)
$$(M) $$(SRC_PATH)/avbuild/libversion.sh $(NAME) $$< > $$@ $$(M) $$(SRC_PATH)/avbuild/libversion.sh $(NAME) $$< > $$@
$(SUBDIR)lib$(NAME).pc: $(SUBDIR)version.h | $(SUBDIR)
$$(M) $$(SRC_PATH)/avbuild/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) > $$@
......
#!/bin/sh
. avbuild/config.sh
if test "$shared" = "yes"; then
shared=true
else
shared=false
fi
shortname=$1
name=lib${shortname}
comment=$2
libs=$(eval echo \$extralibs_${shortname})
requires=$(eval echo \$requires_${shortname})
requires=${requires%, }
version=$(grep ${name}_VERSION= $name/${name}.version | cut -d= -f2)
cat <<EOF > $name/$name.pc
prefix=$prefix
exec_prefix=\${prefix}
libdir=$libdir
includedir=$incdir
Name: $name
Description: $comment
Version: $version
Requires: $($shared || echo $requires)
Requires.private: $($shared && echo $requires)
Conflicts:
Libs: -L\${libdir} -l${shortname} $($shared || echo $libs)
Libs.private: $($shared && echo $libs)
Cflags: -I\${includedir}
EOF
cat <<EOF > $name/$name-uninstalled.pc
prefix=
exec_prefix=
libdir=\${pcfiledir}
includedir=${source_path}
Name: $name
Description: $comment
Version: $version
Requires: $requires
Conflicts:
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
Cflags: -I\${includedir}
EOF
...@@ -5402,52 +5402,29 @@ lib_version(){ ...@@ -5402,52 +5402,29 @@ lib_version(){
eval printf "\"lib${1} >= \$LIB$(toupper ${1})_VERSION, \"" eval printf "\"lib${1} >= \$LIB$(toupper ${1})_VERSION, \""
} }
pkgconfig_generate(){ cat > avbuild/config.sh <<EOF
name=$1 # Automatically generated by configure - do not modify!
shortname=${name#lib} shared=$shared
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.pc
prefix=$prefix prefix=$prefix
exec_prefix=\${prefix}
libdir=$libdir libdir=$libdir
includedir=$incdir includedir=$incdir
source_path=${source_path}
Name: $name LIBPREF=${LIBPREF}
Description: $comment LIBSUF=${LIBSUF}
Version: $version
Requires: $(enabled shared || echo $requires) requires_avutil="$(map 'lib_version $v' $(echo $avutil_deps))"
Requires.private: $(enabled shared && echo $requires) requires_avcodec="$(map 'lib_version $v' $(echo $avcodec_deps))"
Conflicts: requires_avformat="$(map 'lib_version $v' $(echo $avformat_deps))"
Libs: -L\${libdir} -l${shortname} $(enabled shared || echo $libs) requires_avdevice="$(map 'lib_version $v' $(echo $avdevice_deps))"
Libs.private: $(enabled shared && echo $libs) requires_avfilter="$(map 'lib_version $v' $(echo $avfilter_deps))"
Cflags: -I\${includedir} requires_avresample="$(map 'lib_version $v' $(echo $avresample_deps))"
requires_swscale="$(map 'lib_version $v' $(echo $swscale_deps))"
extralibs_avutil="$LIBRT $LIBM"
extralibs_avcodec="$extralibs"
extralibs_avformat="$extralibs"
extralibs_avdevice="$extralibs"
extralibs_avfilter="$extralibs"
extralibs_avresample="$LIBM"
extralibs_swscale="$LIBM"
EOF EOF
cat <<EOF > $name/$name-uninstalled.pc
prefix=
exec_prefix=
libdir=\${pcfiledir}
includedir=${source_path}
Name: $name
Description: $comment
Version: $version
Requires: $requires
Conflicts:
Libs: \${libdir}/${LIBPREF}${shortname}${LIBSUF} $libs
Cflags: -I\${includedir}
EOF
}
pkgconfig_generate libavutil "Libav utility library" "$LIBAVUTIL_VERSION" "$LIBRT $LIBM"
pkgconfig_generate libavcodec "Libav codec library" "$LIBAVCODEC_VERSION" "$extralibs"
pkgconfig_generate libavformat "Libav container format library" "$LIBAVFORMAT_VERSION" "$extralibs"
pkgconfig_generate libavdevice "Libav device handling library" "$LIBAVDEVICE_VERSION" "$extralibs"
pkgconfig_generate libavfilter "Libav video filtering library" "$LIBAVFILTER_VERSION" "$extralibs"
pkgconfig_generate libavresample "Libav audio resampling library" "$LIBAVRESAMPLE_VERSION" "$LIBM"
pkgconfig_generate libswscale "Libav image rescaling library" "$LIBSWSCALE_VERSION" "$LIBM"
NAME = avcodec NAME = avcodec
DESC = Libav codec library
HEADERS = avcodec.h \ HEADERS = avcodec.h \
avfft.h \ avfft.h \
......
NAME = avdevice NAME = avdevice
DESC = Libav device handling library
HEADERS = avdevice.h \ HEADERS = avdevice.h \
version.h \ version.h \
......
NAME = avfilter NAME = avfilter
DESC = Libav video filtering library
HEADERS = avfilter.h \ HEADERS = avfilter.h \
avfiltergraph.h \ avfiltergraph.h \
......
NAME = avformat NAME = avformat
DESC = Libav 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 \
......
NAME = avutil NAME = avutil
DESC = Libav utility library
HEADERS = adler32.h \ HEADERS = adler32.h \
aes.h \ aes.h \
......
NAME = swscale NAME = swscale
DESC = Libav 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