Merge pull request #81 from dankegel/quotefest

Preserve double and single quotes in library / framework names
pull/84/head
William Pitcock 2015-09-11 14:22:04 -05:00
commit 42551f6364
6 changed files with 73 additions and 3 deletions

View File

@ -23,6 +23,7 @@ EXTRA_DIST = \
tests/lib1/prefix-foo2.pc \ tests/lib1/prefix-foo2.pc \
tests/lib1/bar.pc \ tests/lib1/bar.pc \
tests/lib1/framework-2.pc \ tests/lib1/framework-2.pc \
tests/lib1/framework-3.pc \
tests/lib1/private-libs-duplication.pc \ tests/lib1/private-libs-duplication.pc \
tests/lib1/baz.pc \ tests/lib1/baz.pc \
tests/lib1/incomplete.pc \ tests/lib1/incomplete.pc \
@ -72,5 +73,12 @@ noinst_HEADERS = getopt_long.h
dist_doc_DATA = README.md AUTHORS dist_doc_DATA = README.md AUTHORS
check: pkgconf EXTRA_PROGRAMS = unit_tests
unit_tests_SOURCES = libpkgconf/tests/argvsplit-test.c
unit_tests_LDADD = libpkgconf.la
CLEANFILES = $(EXTRA_PROGRAMS)
check: pkgconf unit_tests
./unit_tests
$(SHELL) tests/run.sh ./pkgconf $(SHELL) tests/run.sh ./pkgconf

View File

@ -42,8 +42,10 @@ pkgconf_argv_split(const char *src, int *argc, char ***argv)
while (*src_iter) while (*src_iter)
{ {
if (quote == *src_iter) if (quote == *src_iter) {
quote = 0; quote = 0;
*dst_iter++ = *src_iter;
}
else if (quote) else if (quote)
{ {
if (*src_iter == '\\') if (*src_iter == '\\')
@ -81,6 +83,7 @@ pkgconf_argv_split(const char *src, int *argc, char ***argv)
case '"': case '"':
case '\'': case '\'':
quote = *src_iter; quote = *src_iter;
*dst_iter++ = *src_iter;
break; break;
case '\\': case '\\':

View File

@ -0,0 +1,46 @@
#include <stdio.h>
#include <assert.h>
#include "../libpkgconf.h"
void test_simple()
{
int argc;
char **argv;
pkgconf_argv_split("A B", &argc, &argv);
assert(argc == 2);
assert(!strcmp(argv[0], "A"));
assert(!strcmp(argv[1], "B"));
pkgconf_argv_free(argv);
}
void test_escaped()
{
int argc;
char **argv;
pkgconf_argv_split("A\\ B", &argc, &argv);
assert(argc == 1);
assert(!strcmp(argv[0], "A\\ B"));
pkgconf_argv_free(argv);
}
void test_quoted()
{
int argc;
char **argv;
pkgconf_argv_split("\"A B\"", &argc, &argv);
assert(argc == 1);
assert(!strcmp(argv[0], "\"A B\""));
pkgconf_argv_free(argv);
}
int main(int argc, char **argv)
{
(void) argc; (void) argv;
test_simple();
test_escaped();
test_quoted();
}

View File

@ -0,0 +1,9 @@
prefix=/test
exec_prefix=${prefix}
libdir=${prefix}/lib
includedir=${prefix}/include
Name: framework-3
Description: pkg-config with space in framework name
Version: 1.3
Libs: -F${libdir} -framework "Spacey Framework"

View File

@ -6,5 +6,5 @@ includedir=${prefix}/include
Name: quotes Name: quotes
Description: A testing pkg-config file Description: A testing pkg-config file
Version: 1.2.3 Version: 1.2.3
Libs: -L${libdir} -lfoo Libs: -L${libdir} -lfoo\ bar "-lfoobie bletch"
Cflags: -DQUOTED=\"bla\" Cflags: -DQUOTED=\"bla\"

View File

@ -220,6 +220,8 @@ run_test "PKG_CONFIG_PATH='${selfdir}/lib1' ${1} --list-all | grep -q 'multiline
# test quoted #35 # test quoted #35
run_test "PKG_CONFIG_PATH='${selfdir}/lib1' ${1} --cflags quotes" \ run_test "PKG_CONFIG_PATH='${selfdir}/lib1' ${1} --cflags quotes" \
"-DQUOTED=\\\"bla\\\"" "-DQUOTED=\\\"bla\\\""
run_test "PKG_CONFIG_PATH='${selfdir}/lib1' ${1} --libs quotes" \
'-lfoo\ bar "-lfoobie bletch"'
run_test "PKG_CONFIG_PATH='${selfdir}/lib1' ${1} --libs nolib; echo \$?" \ run_test "PKG_CONFIG_PATH='${selfdir}/lib1' ${1} --libs nolib; echo \$?" \
'0' '0'
@ -239,6 +241,8 @@ run_test "PKG_CONFIG_PATH='${selfdir}/lib1' ${1} --libs framework-2" \
"-F/test/lib -framework framework-2 -framework framework-1" "-F/test/lib -framework framework-2 -framework framework-1"
run_test "PKG_CONFIG_PATH='${selfdir}/lib1' ${1} --libs framework-1 framework-2" \ run_test "PKG_CONFIG_PATH='${selfdir}/lib1' ${1} --libs framework-1 framework-2" \
"-F/test/lib -framework framework-1 -framework framework-2" "-F/test/lib -framework framework-1 -framework framework-2"
run_test "PKG_CONFIG_PATH='${selfdir}/lib1' ${1} --libs framework-3" \
'-F/test/lib -framework "Spacey Framework"'
run_test "PKG_CONFIG_PATH='${selfdir}/lib1' ${1} --exists --print-errors 'foo > 0.6.0 foo < 0.8.0'; echo \$?" \ run_test "PKG_CONFIG_PATH='${selfdir}/lib1' ${1} --exists --print-errors 'foo > 0.6.0 foo < 0.8.0'; echo \$?" \
'1' '1'