test/named-root.sh
author J. Ali Harlow <ali@juiblex.co.uk>
Sat Oct 04 18:12:58 2014 +0100 (2014-10-04)
changeset 454 56ff755c268c
child 456 bae5adee8c8c
permissions -rwxr-xr-x
Only export symbols starting with razor_ in dynamic library.

Apart from being good practice to avoid clashes with higher-level
libraries and the application, this also fixes an obscure bug: The
gnulib library is used both by librazor (the dynamic library) and
by razor (the executable). In doing so, we want to have two separate
copies of the library despite the code duplication this involves.
Without the explicit limit to export only razor_ symbols, the razor
executable under mingw64 was picking up the getopt_long function
from librazor and the optind variable from libgnu which meant that
it did not see optind changing. Hiding librazor's copy of getopt
causes the linker to find libgnu's copy and everything works.

Note that under mingw librazor-#.dll still contains undocumented
(private) razor_ symbols but these will do no harm as long as nobody
tries to use them.
     1 #!/bin/sh
     2 check_file()
     3 {
     4     ../src/razor list-files | grep -x "$1" > /dev/null
     5     if [ $? -ne 0 ]; then
     6 	echo $1: Not in database >&2
     7 	../src/razor list-files >&2
     8 	exit 1
     9     fi
    10     ../src/razor list-files c: | grep -x "$1" > /dev/null
    11     if [ $? -ne 0 ]; then
    12 	echo $1: Not seen by named root list >&2
    13 	../src/razor list-files c: >&2
    14 	exit 1
    15     fi
    16     ../src/razor list-files "$1" | grep -x "$1" > /dev/null
    17     if [ $? -ne 0 ]; then
    18 	echo $1: Not seen by patterned list >&2
    19 	../src/razor list-files "$1" >&2
    20 	exit 1
    21     fi
    22     pkgs=`../src/razor list-file-packages "$1"`
    23     if [ -z "$pkgs" ]; then
    24 	echo $1: Not owned by any package >&2
    25 	../src/razor list-file-packages "$1"
    26 	exit 1
    27     fi
    28     for nevra in "$pkgs"; do
    29 	name=`echo $nevra | sed 's/\-.*$//'`
    30 	../src/razor list-package-files "$name" | grep -x "$1" > /dev/null
    31 	if [ $? -ne 0 ]; then
    32 	    echo $1: Not in database for package $name >&2
    33 	    ../src/razor list-package-files "$name"
    34 	    exit 1
    35 	fi
    36     done
    37     if [ ! -e "$RAZOR_ROOT$1" ]; then 
    38 	echo $1: Not in filesystem >&2
    39 	exit 1
    40     fi
    41 }
    42 tmpdir=`mktemp -dt` || exit 1
    43 export RAZOR_ROOT="$tmpdir/x-"
    44 mkdir -p "$tmpdir/x-/var/lib" "$tmpdir/x-c:"
    45 export RAZOR_NO_ROOT_NAME_CHECKS=1
    46 ../src/razor init || exit 1
    47 export YUM_URL="file://localhost/`pwd`"
    48 ../src/razor import-yum || exit 1
    49 ../src/razor install --relocate /usr=c:/test zap || exit 1
    50 ../src/razor install --relocate /usr=c:/test zip || exit 1
    51 check_file c:/test/bin/zap
    52 check_file c:/test/bin/zip
    53 rm -rf "$tmpdir"