[FFmpeg-cvslog] build: Generate pkg-config files from Make and not from configure

Diego Biurrun git at videolan.org
Fri May 5 02:05:43 EEST 2017


ffmpeg | branch: master | Diego Biurrun <diego at biurrun.de> | Tue Dec 20 14:27:19 2016 +0100| [92db5083077a8b0f8e1050507671b456fd155125] | committer: 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

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=92db5083077a8b0f8e1050507671b456fd155125
---

 Makefile                      |  3 +-
 avbuild/.gitignore            |  1 +
 avbuild/library.mak           |  7 +++--
 avbuild/pkgconfig_generate.sh | 50 ++++++++++++++++++++++++++++++++
 configure                     | 67 ++++++++++++++-----------------------------
 libavcodec/Makefile           |  1 +
 libavdevice/Makefile          |  1 +
 libavfilter/Makefile          |  1 +
 libavformat/Makefile          |  1 +
 libavresample/Makefile        |  1 +
 libavutil/Makefile            |  1 +
 libswscale/Makefile           |  1 +
 12 files changed, 86 insertions(+), 49 deletions(-)

diff --git a/Makefile b/Makefile
index 6036e447db..a9f5f9a8e9 100644
--- a/Makefile
+++ b/Makefile
@@ -67,7 +67,7 @@ COMPILE_HOSTC = $(call COMPILE,HOSTCC)
 %.h.c:
 	$(Q)echo '#include "$*.h"' >$@
 
-%.c %.h %.ver %.version: TAG = GEN
+%.c %.h %.pc %.ver %.version: TAG = GEN
 
 AVPROGS-$(CONFIG_AVCONV)   += avconv
 AVPROGS-$(CONFIG_AVPLAY)   += avplay
@@ -125,7 +125,6 @@ tools/cws2fws$(EXESUF): ELIBS = $(ZLIB)
 
 CONFIGURABLE_COMPONENTS =                                           \
     $(wildcard $(FFLIBS:%=$(SRC_PATH)/lib%/all*.c))                 \
-    $(wildcard $(FFLIBS:%=$(SRC_PATH)/lib%/version.h))              \
     $(SRC_PATH)/libavcodec/bitstream_filters.c                      \
     $(SRC_PATH)/libavformat/protocols.c                             \
 
diff --git a/avbuild/.gitignore b/avbuild/.gitignore
index 693b7aa0d3..38ed170752 100644
--- a/avbuild/.gitignore
+++ b/avbuild/.gitignore
@@ -2,3 +2,4 @@
 /config.fate
 /config.log
 /config.mak
+/config.sh
diff --git a/avbuild/library.mak b/avbuild/library.mak
index 45152bebe8..e5f6d7d288 100644
--- a/avbuild/library.mak
+++ b/avbuild/library.mak
@@ -9,8 +9,8 @@ INCINSTDIR := $(INCDIR)/lib$(NAME)
 
 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) $(LIBOBJS:.o=.i):   CPPFLAGS += -DHAVE_AV_CONFIG_H
@@ -35,6 +35,9 @@ $(TESTPROGS) $(TOOLS): %$(EXESUF): %.o
 $(SUBDIR)lib$(NAME).version: $(SUBDIR)version.h | $(SUBDIR)
 	$$(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)
 	$$(M)sed 's/MAJOR/$(lib$(NAME)_VERSION_MAJOR)/' $$< | $(VERSION_SCRIPT_POSTPROCESS_CMD) > $$@
 
diff --git a/avbuild/pkgconfig_generate.sh b/avbuild/pkgconfig_generate.sh
new file mode 100755
index 0000000000..33e188f5ea
--- /dev/null
+++ b/avbuild/pkgconfig_generate.sh
@@ -0,0 +1,50 @@
+#!/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
diff --git a/configure b/configure
index 2671b5a02b..8e402383d8 100755
--- a/configure
+++ b/configure
@@ -5402,52 +5402,29 @@ lib_version(){
     eval printf "\"lib${1} >= \$LIB$(toupper ${1})_VERSION, \""
 }
 
-pkgconfig_generate(){
-    name=$1
-    shortname=${name#lib}
-    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
+cat > avbuild/config.sh <<EOF
+# Automatically generated by configure - do not modify!
+shared=$shared
 prefix=$prefix
-exec_prefix=\${prefix}
 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} -l${shortname} $(enabled shared || echo $libs)
-Libs.private: $(enabled shared && echo $libs)
-Cflags: -I\${includedir}
+source_path=${source_path}
+LIBPREF=${LIBPREF}
+LIBSUF=${LIBSUF}
+
+requires_avutil="$(map 'lib_version $v' $(echo $avutil_deps))"
+requires_avcodec="$(map 'lib_version $v' $(echo $avcodec_deps))"
+requires_avformat="$(map 'lib_version $v' $(echo $avformat_deps))"
+requires_avdevice="$(map 'lib_version $v' $(echo $avdevice_deps))"
+requires_avfilter="$(map 'lib_version $v' $(echo $avfilter_deps))"
+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
-    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"
diff --git a/libavcodec/Makefile b/libavcodec/Makefile
index 239a4c0f0a..b3cee1d0ca 100644
--- a/libavcodec/Makefile
+++ b/libavcodec/Makefile
@@ -1,4 +1,5 @@
 NAME = avcodec
+DESC = Libav codec library
 
 HEADERS = avcodec.h                                                     \
           avfft.h                                                       \
diff --git a/libavdevice/Makefile b/libavdevice/Makefile
index 664fa0f9ff..ab8931c639 100644
--- a/libavdevice/Makefile
+++ b/libavdevice/Makefile
@@ -1,4 +1,5 @@
 NAME    = avdevice
+DESC    = Libav device handling library
 
 HEADERS = avdevice.h                                                    \
           version.h                                                     \
diff --git a/libavfilter/Makefile b/libavfilter/Makefile
index 646a5b5a26..c8d1515d2c 100644
--- a/libavfilter/Makefile
+++ b/libavfilter/Makefile
@@ -1,4 +1,5 @@
 NAME = avfilter
+DESC = Libav video filtering library
 
 HEADERS = avfilter.h                                                    \
           avfiltergraph.h                                               \
diff --git a/libavformat/Makefile b/libavformat/Makefile
index 6146cbe12a..f363955e0e 100644
--- a/libavformat/Makefile
+++ b/libavformat/Makefile
@@ -1,4 +1,5 @@
 NAME = avformat
+DESC = Libav container format library
 
 HEADERS = avformat.h                                                    \
           avio.h                                                        \
diff --git a/libavresample/Makefile b/libavresample/Makefile
index b9ca491194..928b721cc2 100644
--- a/libavresample/Makefile
+++ b/libavresample/Makefile
@@ -1,4 +1,5 @@
 NAME = avresample
+DESC = Libav audio resampling library
 
 HEADERS = avresample.h                                                  \
           version.h                                                     \
diff --git a/libavutil/Makefile b/libavutil/Makefile
index f34c79950e..60e180c79d 100644
--- a/libavutil/Makefile
+++ b/libavutil/Makefile
@@ -1,4 +1,5 @@
 NAME = avutil
+DESC = Libav utility library
 
 HEADERS = adler32.h                                                     \
           aes.h                                                         \
diff --git a/libswscale/Makefile b/libswscale/Makefile
index c9b2fc9c46..a9502f6f29 100644
--- a/libswscale/Makefile
+++ b/libswscale/Makefile
@@ -1,4 +1,5 @@
 NAME = swscale
+DESC = Libav image rescaling library
 
 HEADERS = swscale.h                                                     \
           version.h                                                     \



More information about the ffmpeg-cvslog mailing list