Skip to content

Commit

Permalink
build: Generate pkg-config files from Make and not from configure
Browse files Browse the repository at this point in the history
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
  • Loading branch information
DonDiego committed Dec 22, 2016
1 parent edb4348 commit 92db508
Show file tree
Hide file tree
Showing 12 changed files with 86 additions and 49 deletions.
3 changes: 1 addition & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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 \

Expand Down
1 change: 1 addition & 0 deletions avbuild/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@
/config.fate
/config.log
/config.mak
/config.sh
7 changes: 5 additions & 2 deletions avbuild/library.mak
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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) > $$@

Expand Down
50 changes: 50 additions & 0 deletions avbuild/pkgconfig_generate.sh
Original file line number Diff line number Diff line change
@@ -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
67 changes: 22 additions & 45 deletions configure
Original file line number Diff line number Diff line change
Expand Up @@ -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"
1 change: 1 addition & 0 deletions libavcodec/Makefile
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
NAME = avcodec
DESC = Libav codec library

HEADERS = avcodec.h \
avfft.h \
Expand Down
1 change: 1 addition & 0 deletions libavdevice/Makefile
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
NAME = avdevice
DESC = Libav device handling library

HEADERS = avdevice.h \
version.h \
Expand Down
1 change: 1 addition & 0 deletions libavfilter/Makefile
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
NAME = avfilter
DESC = Libav video filtering library

HEADERS = avfilter.h \
avfiltergraph.h \
Expand Down
1 change: 1 addition & 0 deletions libavformat/Makefile
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
NAME = avformat
DESC = Libav container format library

HEADERS = avformat.h \
avio.h \
Expand Down
1 change: 1 addition & 0 deletions libavresample/Makefile
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
NAME = avresample
DESC = Libav audio resampling library

HEADERS = avresample.h \
version.h \
Expand Down
1 change: 1 addition & 0 deletions libavutil/Makefile
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
NAME = avutil
DESC = Libav utility library

HEADERS = adler32.h \
aes.h \
Expand Down
1 change: 1 addition & 0 deletions libswscale/Makefile
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
NAME = swscale
DESC = Libav image rescaling library

HEADERS = swscale.h \
version.h \
Expand Down

0 comments on commit 92db508

Please sign in to comment.