diff --git a/Makefile b/Makefile index e1d4905..857fbda 100644 --- a/Makefile +++ b/Makefile @@ -9,4 +9,7 @@ install-extra: mkdir -p $(DESTDIR)/$(datarootdir)/aclocal install -c -m644 pkg.m4 $(DESTDIR)/$(datarootdir)/aclocal/pkg.m4 +check: $(PROG) + $(SHELL) tests/run.sh ./$(PROG) + include .deps diff --git a/pkg.c b/pkg.c index 3015523..e70343d 100644 --- a/pkg.c +++ b/pkg.c @@ -63,7 +63,7 @@ pkg_find(const char *name, unsigned int flags) { char locbuf[PKG_CONFIG_PATH_SZ]; char **path; - size_t count, iter; + size_t count, iter = 0; const char *env_path; FILE *f; diff --git a/tests/lib1/bar.pc b/tests/lib1/bar.pc new file mode 100644 index 0000000..688d2af --- /dev/null +++ b/tests/lib1/bar.pc @@ -0,0 +1,10 @@ +prefix=/usr +exec_prefix=${prefix} +libdir=${prefix}/lib +includedir=${prefix}/include + +Name: bar +Description: Another pkg-config test +Version: 1.3 +Libs: -L${libdir} -lbar +Requires: foo diff --git a/tests/lib1/baz.pc b/tests/lib1/baz.pc new file mode 100644 index 0000000..1f0c16a --- /dev/null +++ b/tests/lib1/baz.pc @@ -0,0 +1,11 @@ +prefix=/usr +exec_prefix=${prefix} +libdir=${prefix}/lib +includedir=${prefix}/include + +Name: bar +Description: Another pkg-config test (with private Requires, ha!) +Version: 1.3 +Libs: -L${libdir} -lbaz +Libs.private: -L${libdir} -lzee +Requires.private: foo diff --git a/tests/lib1/foo.pc b/tests/lib1/foo.pc new file mode 100644 index 0000000..5974fbe --- /dev/null +++ b/tests/lib1/foo.pc @@ -0,0 +1,10 @@ +prefix=/usr +exec_prefix=${prefix} +libdir=${prefix}/lib +includedir=${prefix}/include + +Name: foo +Description: A testing pkg-config file +Version: 1.2.3 +Libs: -L${libdir} -lfoo +Cflags: -fPIC -I${includedir}/foo diff --git a/tests/lib2/foo.pc b/tests/lib2/foo.pc new file mode 100644 index 0000000..6491a43 --- /dev/null +++ b/tests/lib2/foo.pc @@ -0,0 +1,10 @@ +prefix=/usr +exec_prefix=${prefix} +libdir=${prefix}/lib +includedir=${prefix}/include + +Name: foo +Description: A testing pkg-config file +Version: 1.2.3 +Libs: -L${libdir} -lbar +Cflags: -fPIC -I${includedir}/bar diff --git a/tests/run.sh b/tests/run.sh new file mode 100644 index 0000000..1d24a54 --- /dev/null +++ b/tests/run.sh @@ -0,0 +1,71 @@ +#!/bin/sh +# Tests for pkg-config compliance. +# * Copyright (c) 2012 Michał Górny . + +done=0 +failed=0 + +run_test() { + local res t_ret 2>/dev/null || true + + echo "$ ${1}" + eval res="\$(${1})" + echo "${res}" + + t_ret=0 + while [ ${#} -gt 1 ]; do + shift + + case "${res}" in + *${1}*) + ;; + *) + echo "! expected ${1}" + t_ret=1 + ;; + esac + done + + if [ ${t_ret} -eq 0 ]; then + echo "+ [OK]" + else + failed=$(( failed + 1 )) + fi + done=$(( done + 1 )) + + echo +} + +selfdir=$(cd "$(dirname "${0}")"; pwd) + +# 1) overall 'is it working?' test +run_test "PKG_CONFIG_PATH=${selfdir}/lib1 ${1} --libs foo" \ + '-lfoo' +run_test "PKG_CONFIG_PATH=${selfdir}/lib1 ${1} --cflags --libs foo" \ + '-lfoo' '-I/usr/include/foo' '-fPIC' +run_test "PKG_CONFIG_PATH=${selfdir}/lib1 ${1} --exists 'foo > 1.2'; echo \$?" \ + '0' +run_test "PKG_CONFIG_PATH=${selfdir}/lib1 ${1} --exists 'foo > 1.2.3'; echo \$?" \ + '1' + +# 2) tests for PKG_CONFIG_PATH order +run_test "PKG_CONFIG_PATH=${selfdir}/lib1:${selfdir}/lib2 ${1} --libs foo" \ + '-lfoo' +run_test "PKG_CONFIG_PATH=${selfdir}/lib2:${selfdir}/lib1 ${1} --libs foo" \ + '-lbar' + +# 3) tests for 'Requires' and 'Requires.private' +run_test "PKG_CONFIG_PATH=${selfdir}/lib1 ${1} --libs bar" \ + '-lfoo' '-lbar' +run_test "PKG_CONFIG_PATH=${selfdir}/lib1 ${1} --libs --cflags baz" \ + '-lbaz' '-fPIC' '-I/usr/include/foo' +run_test "PKG_CONFIG_PATH=${selfdir}/lib1 ${1} --static --libs baz" \ + '-lfoo -lbaz -lzee' + +if [ ${failed} -gt 0 ]; then + echo "${failed} of ${done} tests failed. See output for details." >&2 + exit 1 +else + echo "${done} tests done. All succeeded." >&2 + exit 0 +fi