parent
5eb6cafd2e
commit
7250adee26
16 changed files with 294 additions and 310 deletions
@ -0,0 +1,26 @@ |
||||
#!/usr/bin/env python3 |
||||
|
||||
import sys, os |
||||
|
||||
os.chdir (os.environ.get ('srcdir', os.path.dirname (__file__))) |
||||
|
||||
HBHEADERS = os.environ.get ('HBHEADERS', '').split () or \ |
||||
[x for x in os.listdir ('.') if x.startswith ('hb') and x.endswith ('.h')] |
||||
HBSOURCES = os.environ.get ('HBSOURCES', '').split () or \ |
||||
[x for x in os.listdir ('.') if x.startswith ('hb') and x.endswith (('.cc', '.hh'))] |
||||
|
||||
stat = 0 |
||||
|
||||
for x in HBHEADERS: |
||||
with open (x, 'r', encoding='utf-8') as f: content = f.read () |
||||
if ('HB_BEGIN_DECLS' not in content) or ('HB_END_DECLS' not in content): |
||||
print ('Ouch, file %s does not have HB_BEGIN_DECLS / HB_END_DECLS, but it should' % x) |
||||
stat = 1 |
||||
|
||||
for x in HBSOURCES: |
||||
with open (x, 'r', encoding='utf-8') as f: content = f.read () |
||||
if ('HB_BEGIN_DECLS' in content) or ('HB_END_DECLS' in content): |
||||
print ('Ouch, file %s has HB_BEGIN_DECLS / HB_END_DECLS, but it shouldn\'t' % x) |
||||
stat = 1 |
||||
|
||||
sys.exit (stat) |
@ -1,27 +0,0 @@ |
||||
#!/bin/sh |
||||
|
||||
LC_ALL=C |
||||
export LC_ALL |
||||
|
||||
test -z "$srcdir" && srcdir=. |
||||
stat=0 |
||||
|
||||
test "x$HBHEADERS" = x && HBHEADERS=`cd "$srcdir"; find . -maxdepth 1 -name 'hb*.h'` |
||||
test "x$HBSOURCES" = x && HBSOURCES=`cd "$srcdir"; find . -maxdepth 1 -name 'hb*.cc'` |
||||
|
||||
for x in $HBHEADERS; do |
||||
test -f "$srcdir/$x" -a ! -f "$x" && x="$srcdir/$x" |
||||
if ! grep -q HB_BEGIN_DECLS "$x" || ! grep -q HB_END_DECLS "$x"; then |
||||
echo "Ouch, file $x does not have HB_BEGIN_DECLS / HB_END_DECLS, but it should" |
||||
stat=1 |
||||
fi |
||||
done |
||||
for x in $HBSOURCES; do |
||||
test -f "$srcdir/$x" -a ! -f "$x" && x="$srcdir/$x" |
||||
if grep -q HB_BEGIN_DECLS "$x" || grep -q HB_END_DECLS "$x"; then |
||||
echo "Ouch, file $x has HB_BEGIN_DECLS / HB_END_DECLS, but it shouldn't" |
||||
stat=1 |
||||
fi |
||||
done |
||||
|
||||
exit $stat |
@ -0,0 +1,20 @@ |
||||
#!/usr/bin/env python3 |
||||
|
||||
import sys, os, re |
||||
|
||||
os.chdir (os.environ.get ('srcdir', os.path.dirname (__file__))) |
||||
|
||||
HBHEADERS = os.environ.get ('HBHEADERS', '').split () or \ |
||||
[x for x in os.listdir ('.') if x.startswith ('hb') and x.endswith ('.h')] |
||||
|
||||
stat = 0 |
||||
|
||||
print ('Checking that all public symbols are exported with HB_EXTERN') |
||||
for x in HBHEADERS: |
||||
with open (x, 'r', encoding='utf-8') as f: content = f.read () |
||||
for s in re.findall (r'\n.+\nhb_.+\n', content): |
||||
if not s.startswith ('\nHB_EXTERN '): |
||||
print ('failure on:', s) |
||||
stat = 1 |
||||
|
||||
sys.exit (stat) |
@ -1,22 +0,0 @@ |
||||
#!/bin/sh |
||||
|
||||
LC_ALL=C |
||||
export LC_ALL |
||||
|
||||
test -z "$srcdir" && srcdir=. |
||||
stat=0 |
||||
|
||||
test "x$HBHEADERS" = x && HBHEADERS=`cd "$srcdir"; find . -maxdepth 1 -name 'hb*.h'` |
||||
test "x$EGREP" = x && EGREP='grep -E' |
||||
|
||||
|
||||
echo 'Checking that all public symbols are exported with HB_EXTERN' |
||||
|
||||
for x in $HBHEADERS; do |
||||
test -f "$srcdir/$x" -a ! -f "$x" && x="$srcdir/$x" |
||||
$EGREP -B1 -n '^hb_' /dev/null "$x" | |
||||
$EGREP -v '(^--|:hb_|-HB_EXTERN )' -A1 |
||||
done | |
||||
grep . >&2 && stat=1 |
||||
|
||||
exit $stat |
@ -0,0 +1,22 @@ |
||||
#!/usr/bin/env python3 |
||||
|
||||
import sys, os, re |
||||
|
||||
os.chdir (os.environ.get ('srcdir', os.path.dirname (__file__))) |
||||
|
||||
HBHEADERS = os.environ.get ('HBHEADERS', '').split () or \ |
||||
[x for x in os.listdir ('.') if x.startswith ('hb') and x.endswith ('.h')] |
||||
HBSOURCES = os.environ.get ('HBSOURCES', '').split () or \ |
||||
[x for x in os.listdir ('.') if x.startswith ('hb') and x.endswith (('.cc', '.hh'))] |
||||
|
||||
stat = 0 |
||||
|
||||
for x in HBHEADERS + HBSOURCES: |
||||
if not x.endswith ('h') or x == 'hb-gobject-structs.h': continue |
||||
tag = x.upper ().replace ('.', '_').replace ('-', '_') |
||||
with open (x, 'r', encoding='utf-8') as f: content = f.read () |
||||
if len (re.findall (tag + r'\b', content)) != 3: |
||||
print ('Ouch, header file %s does not have correct preprocessor guards' % x) |
||||
stat = 1 |
||||
|
||||
sys.exit (stat) |
@ -1,24 +0,0 @@ |
||||
#!/bin/sh |
||||
|
||||
LC_ALL=C |
||||
export LC_ALL |
||||
|
||||
test -z "$srcdir" && srcdir=. |
||||
stat=0 |
||||
|
||||
test "x$HBHEADERS" = x && HBHEADERS=`cd "$srcdir"; find . -maxdepth 1 -name 'hb*.h' ! -name 'hb-gobject-structs.h'` |
||||
test "x$HBSOURCES" = x && HBSOURCES=`cd "$srcdir"; find . -maxdepth 1 -name 'hb-*.cc' -or -name 'hb-*.hh'` |
||||
|
||||
for x in $HBHEADERS $HBSOURCES; do |
||||
test -f "$srcdir/$x" -a ! -f "$x" && x="$srcdir/$x" |
||||
echo "$x" | grep -q '[^h]$' && continue; |
||||
xx=`echo "$x" | sed 's@.*/@@'` |
||||
tag=`echo "$xx" | tr 'a-z.-' 'A-Z_'` |
||||
lines=`grep -w "$tag" "$x" | wc -l | sed 's/[ ]*//g'` |
||||
if test "x$lines" != x3; then |
||||
echo "Ouch, header file $x does not have correct preprocessor guards" |
||||
stat=1 |
||||
fi |
||||
done |
||||
|
||||
exit $stat |
@ -0,0 +1,39 @@ |
||||
#!/usr/bin/env python3 |
||||
|
||||
import sys, os, re |
||||
|
||||
os.chdir (os.environ.get ('srcdir', os.path.dirname (__file__))) |
||||
|
||||
HBHEADERS = os.environ.get ('HBHEADERS', '').split () or \ |
||||
[x for x in os.listdir ('.') if x.startswith ('hb') and x.endswith ('.h')] |
||||
HBSOURCES = os.environ.get ('HBSOURCES', '').split () or \ |
||||
[x for x in os.listdir ('.') if x.startswith ('hb') and x.endswith (('.cc', '.hh'))] |
||||
|
||||
stat = 0 |
||||
|
||||
print ('Checking that public header files #include "hb-common.h" or "hb.h" first (or none)') |
||||
for x in HBHEADERS: |
||||
if x == 'hb.h' or x == 'hb-common.h': continue |
||||
with open (x, 'r', encoding='utf-8') as f: content = f.read () |
||||
first = re.findall (r'#.*include.*', content)[0] |
||||
if first not in ['#include "hb.h"', '#include "hb-common.h"']: |
||||
print ('failure on %s' % x) |
||||
stat = 1 |
||||
|
||||
print ('Checking that source files #include a private header first (or none)') |
||||
for x in HBSOURCES: |
||||
with open (x, 'r', encoding='utf-8') as f: content = f.read () |
||||
includes = re.findall (r'#.*include.*', content) |
||||
if includes: |
||||
if not len (re.findall (r'"hb.*\.hh"', includes[0])): |
||||
print ('failure on %s' % x) |
||||
stat = 1 |
||||
|
||||
print ('Checking that there is no #include <hb-*.h>') |
||||
for x in HBHEADERS + HBSOURCES: |
||||
with open (x, 'r', encoding='utf-8') as f: content = f.read () |
||||
if re.findall ('#.*include.*<.*hb', content): |
||||
print ('failure on %s' % x) |
||||
stat = 1 |
||||
|
||||
sys.exit (stat) |
@ -1,44 +0,0 @@ |
||||
#!/bin/sh |
||||
|
||||
LC_ALL=C |
||||
export LC_ALL |
||||
|
||||
test -z "$srcdir" && srcdir=. |
||||
stat=0 |
||||
|
||||
test "x$HBHEADERS" = x && HBHEADERS=`cd "$srcdir"; find . -maxdepth 1 -name 'hb*.h'` |
||||
test "x$HBSOURCES" = x && HBSOURCES=`cd "$srcdir"; find . -maxdepth 1 -name 'hb-*.cc' -or -name 'hb-*.hh'` |
||||
|
||||
|
||||
echo 'Checking that public header files #include "hb-common.h" or "hb.h" first (or none)' |
||||
|
||||
for x in $HBHEADERS; do |
||||
test -f "$srcdir/$x" -a ! -f "$x" && x="$srcdir/$x" |
||||
grep '#.*\<include\>' "$x" /dev/null | head -n 1 |
||||
done | |
||||
grep -v '"hb-common[.]h"' | |
||||
grep -v '"hb[.]h"' | |
||||
grep -v 'hb-common[.]h:' | |
||||
grep -v 'hb[.]h:' | |
||||
grep . >&2 && stat=1 |
||||
|
||||
|
||||
echo 'Checking that source files #include a private header first (or none)' |
||||
|
||||
for x in $HBSOURCES; do |
||||
test -f "$srcdir/$x" -a ! -f "$x" && x="$srcdir/$x" |
||||
grep '#.*\<include\>' "$x" /dev/null | head -n 1 |
||||
done | |
||||
grep -v '"hb-.*[.]hh"' | |
||||
grep -v 'hb[.]hh' | |
||||
grep . >&2 && stat=1 |
||||
|
||||
|
||||
echo 'Checking that there is no #include <hb-*.h>' |
||||
for x in $HBHEADERS $HBSOURCES; do |
||||
test -f "$srcdir/$x" && x="$srcdir/$x" |
||||
grep '#.*\<include\>.*<.*hb' "$x" /dev/null >&2 && stat=1 |
||||
done |
||||
|
||||
|
||||
exit $stat |
@ -0,0 +1,41 @@ |
||||
#!/usr/bin/env python3 |
||||
|
||||
import sys, os, shutil, subprocess |
||||
|
||||
os.chdir (os.environ.get ('srcdir', os.path.dirname (__file__))) |
||||
|
||||
libs = os.environ.get ('libs', '.libs') |
||||
|
||||
ldd = shutil.which ('ldd') |
||||
if ldd: |
||||
ldd = [ldd] |
||||
else: |
||||
ldd = shutil.which ('otool') |
||||
if ldd: |
||||
ldd = [ldd, '-L'] # otool -L |
||||
else: |
||||
print ('check-libstdc++.py: \'ldd\' not found; skipping test') |
||||
sys.exit (77) |
||||
|
||||
stat = 0 |
||||
tested = False |
||||
|
||||
# harfbuzz-icu links to libstdc++ because icu does. |
||||
for soname in ['harfbuzz', 'harfbuzz-subset', 'harfbuzz-gobject']: |
||||
for suffix in ['so', 'dylib']: |
||||
so = os.path.join (libs, 'lib%s.%s' % (soname, suffix)) |
||||
if not os.path.exists (so): continue |
||||
|
||||
print ('Checking that we are not linking to libstdc++ or libc++ in %s' % so) |
||||
ldd_result = subprocess.check_output (ldd + [so]) |
||||
if (b'libstdc++' in ldd_result) or (b'libc++' in ldd_result): |
||||
print ('Ouch, %s is linked to libstdc++ or libc++' % so) |
||||
stat = 1 |
||||
|
||||
tested = True |
||||
|
||||
if not tested: |
||||
print ('check-libstdc++.py: libharfbuzz shared library not found; skipping test') |
||||
sys.exit (77) |
||||
|
||||
sys.exit (stat) |
@ -1,43 +0,0 @@ |
||||
#!/bin/sh |
||||
|
||||
LC_ALL=C |
||||
export LC_ALL |
||||
|
||||
test -z "$srcdir" && srcdir=. |
||||
test -z "$libs" && libs=.libs |
||||
stat=0 |
||||
|
||||
|
||||
if which ldd 2>/dev/null >/dev/null; then |
||||
LDD=ldd |
||||
else |
||||
# macOS specific tool |
||||
if which otool 2>/dev/null >/dev/null; then |
||||
LDD="otool -L" |
||||
else |
||||
echo "check-libstdc++.sh: 'ldd' not found; skipping test" |
||||
exit 77 |
||||
fi |
||||
fi |
||||
|
||||
tested=false |
||||
# harfbuzz-icu links to libstdc++ because icu does. |
||||
for soname in harfbuzz harfbuzz-subset harfbuzz-gobject; do |
||||
for suffix in so dylib; do |
||||
so=$libs/lib$soname.$suffix |
||||
if ! test -f "$so"; then continue; fi |
||||
|
||||
echo "Checking that we are not linking to libstdc++ or libc++ in $so" |
||||
if $LDD $so | grep 'libstdc[+][+]\|libc[+][+]'; then |
||||
echo "Ouch, linked to libstdc++ or libc++" |
||||
stat=1 |
||||
fi |
||||
tested=true |
||||
done |
||||
done |
||||
if ! $tested; then |
||||
echo "check-libstdc++.sh: libharfbuzz shared library not found; skipping test" |
||||
exit 77 |
||||
fi |
||||
|
||||
exit $stat |
@ -0,0 +1,38 @@ |
||||
#!/usr/bin/env python3 |
||||
|
||||
import sys, os, shutil, subprocess, glob, re |
||||
|
||||
builddir = os.environ.get ('builddir', os.path.dirname (__file__)) |
||||
libs = os.environ.get ('libs', '.libs') |
||||
|
||||
objdump = shutil.which ('objdump') |
||||
if not objdump: |
||||
print ('check-static-inits.py: \'ldd\' not found; skipping test') |
||||
sys.exit (77) |
||||
|
||||
if sys.version_info < (3, 5): |
||||
print ('check-static-inits.py: needs python 3.5 for recursive support in glob') |
||||
sys.exit (77) |
||||
|
||||
OBJS = glob.glob (os.path.join (builddir, libs, '**', '*.o'), recursive=True) |
||||
if not OBJS: |
||||
print ('check-static-inits.py: object files not found; skipping test') |
||||
sys.exit (77) |
||||
|
||||
stat = 0 |
||||
|
||||
for obj in OBJS: |
||||
result = subprocess.check_output ([objdump, '-t', obj]).decode ('utf-8') |
||||
|
||||
# Checking that no object file has static initializers |
||||
for l in re.findall (r'^.*\.[cd]tors.*$', result, re.MULTILINE): |
||||
if not re.match (r'.*\b0+\b', l): |
||||
print ('Ouch, %s has static initializers/finalizers' % obj) |
||||
stat = 1 |
||||
|
||||
# Checking that no object file has lazy static C++ constructors/destructors or other such stuff |
||||
if ('__cxa_' in result) and ('__ubsan_handle' not in result): |
||||
print ('Ouch, %s has lazy static C++ constructors/destructors or other such stuff' % obj) |
||||
stat = 1 |
||||
|
||||
sys.exit (stat) |
@ -1,49 +0,0 @@ |
||||
#!/bin/sh |
||||
|
||||
LC_ALL=C |
||||
export LC_ALL |
||||
|
||||
test -z "$srcdir" && srcdir=. |
||||
test -z "$builddir" && builddir=. |
||||
stat=0 |
||||
|
||||
if which objdump 2>/dev/null >/dev/null; then |
||||
: |
||||
else |
||||
echo "check-static-inits.sh: 'objdump' not found; skipping test" |
||||
exit 77 |
||||
fi |
||||
|
||||
OBJS=$(find $builddir/ -name '*.o') |
||||
if test "x`echo $OBJS`" = "x$OBJS" 2>/dev/null >/dev/null; then |
||||
echo "check-static-inits.sh: object files not found; skipping test" |
||||
exit 77 |
||||
fi |
||||
|
||||
tested=false |
||||
|
||||
echo "Checking that no object file has static initializers" |
||||
for obj in $OBJS; do |
||||
if objdump -t "$obj" | grep '[.][cd]tors' | grep -v '\<00*\>'; then |
||||
echo "Ouch, $obj has static initializers/finalizers" |
||||
stat=1 |
||||
fi |
||||
tested=true |
||||
done |
||||
|
||||
echo "Checking that no object file has lazy static C++ constructors/destructors or other such stuff" |
||||
for obj in $OBJS; do |
||||
if objdump -t "$obj" | grep -q '__cxa_' && ! objdump -t "$obj" | grep -q __ubsan_handle; then |
||||
objdump -t "$obj" | grep '__cxa_' |
||||
echo "Ouch, $obj has lazy static C++ constructors/destructors or other such stuff" |
||||
stat=1 |
||||
fi |
||||
tested=true |
||||
done |
||||
|
||||
if ! $tested; then |
||||
echo "check-static-inits.sh: no objects found; skipping test" |
||||
exit 77 |
||||
fi |
||||
|
||||
exit $stat |
@ -0,0 +1,73 @@ |
||||
#!/usr/bin/env python3 |
||||
|
||||
import sys, os, shutil, subprocess, re, difflib |
||||
|
||||
os.environ['LC_ALL'] = 'C' # otherwise 'nm' prints in wrong order |
||||
|
||||
builddir = os.environ.get ('builddir', os.path.dirname (__file__)) |
||||
libs = os.environ.get ('libs', '.libs') |
||||
|
||||
IGNORED_SYMBOLS = '|'.join(['_fini', '_init', '_fdata', '_ftext', '_fbss', |
||||
'__bss_start', '__bss_start__', '__bss_end__', '_edata', '_end', '_bss_end__', |
||||
'__end__', '__gcov_.*', 'llvm_.*', 'flush_fn_list', 'writeout_fn_list']) |
||||
|
||||
nm = shutil.which ('nm') |
||||
if not nm: |
||||
print ('check-symbols.py: \'nm\' not found; skipping test') |
||||
sys.exit (77) |
||||
|
||||
cxxflit = shutil.which ('c++filt') |
||||
|
||||
tested = False |
||||
stat = 0 |
||||
|
||||
for soname in ['harfbuzz', 'harfbuzz-subset', 'harfbuzz-icu', 'harfbuzz-gobject']: |
||||
for suffix in ['so', 'dylib']: |
||||
so = os.path.join (builddir, libs, 'lib%s.%s' % (soname, suffix)) |
||||
if not os.path.exists (so): continue |
||||
|
||||
# On macOS, C symbols are prefixed with _ |
||||
symprefix = '_' if suffix == 'dylib' else '' |
||||
|
||||
EXPORTED_SYMBOLS = [s.split ()[2] |
||||
for s in re.findall (r'^.+ [BCDGIRST] .+$', subprocess.check_output ([nm, so]).decode ('utf-8'), re.MULTILINE) |
||||
if not re.match (r'.* %s(%s)\b' % (symprefix, IGNORED_SYMBOLS), s)] |
||||
|
||||
# run again c++flit also if is available |
||||
if cxxflit: |
||||
EXPORTED_SYMBOLS = subprocess.check_output ( |
||||
[cxxflit], input='\n'.join (EXPORTED_SYMBOLS).encode () |
||||
).decode ('utf-8').splitlines () |
||||
|
||||
prefix = (symprefix + os.path.basename (so)).replace ('libharfbuzz', 'hb').replace ('-', '_').split ('.')[0] |
||||
|
||||
print ('Checking that %s does not expose internal symbols' % so) |
||||
suspicious_symbols = [x for x in EXPORTED_SYMBOLS if not re.match (r'^%s(_|$)' % prefix, x)] |
||||
if suspicious_symbols: |
||||
print ('Ouch, internal symbols exposed:', suspicious_symbols) |
||||
stat = 1 |
||||
|
||||
def_path = os.path.join (builddir, soname + '.def') |
||||
if not os.path.exists (def_path): |
||||
print ('\'%s\' not found; skipping' % def_path) |
||||
else: |
||||
print ('Checking that %s has the same symbol list as %s' % (so, def_path)) |
||||
with open (def_path, 'r', encoding='utf-8') as f: def_file = f.read () |
||||
diff_result = list (difflib.context_diff ( |
||||
def_file.splitlines (), |
||||
['EXPORTS'] + [re.sub ('^%shb' % symprefix, 'hb', x) for x in EXPORTED_SYMBOLS] + |
||||
# cheat: copy the last line from the def file! |
||||
[def_file.splitlines ()[-1]] |
||||
)) |
||||
|
||||
if diff_result: |
||||
print ('\n'.join (diff_result)) |
||||
stat = 1 |
||||
|
||||
tested = True |
||||
|
||||
if not tested: |
||||
print ('check-symbols.sh: no shared libraries found; skipping test') |
||||
sys.exit (77) |
||||
|
||||
sys.exit (stat) |
@ -1,61 +0,0 @@ |
||||
#!/bin/sh |
||||
|
||||
LC_ALL=C |
||||
export LC_ALL |
||||
|
||||
test -z "$srcdir" && srcdir=. |
||||
test -z "$builddir" && builddir=. |
||||
test -z "$libs" && libs=.libs |
||||
stat=0 |
||||
|
||||
IGNORED_SYMBOLS='_fini\|_init\|_fdata\|_ftext\|_fbss\|__bss_start\|__bss_start__\|__bss_end__\|_edata\|_end\|_bss_end__\|__end__\|__gcov_.*\|llvm_.*\|flush_fn_list\|writeout_fn_list' |
||||
|
||||
if which nm 2>/dev/null >/dev/null; then |
||||
: |
||||
else |
||||
echo "check-symbols.sh: 'nm' not found; skipping test" |
||||
exit 77 |
||||
fi |
||||
|
||||
tested=false |
||||
for soname in harfbuzz harfbuzz-subset harfbuzz-icu harfbuzz-gobject; do |
||||
for suffix in so dylib; do |
||||
so=$libs/lib$soname.$suffix |
||||
if ! test -f "$so"; then continue; fi |
||||
|
||||
# On macOS, C symbols are prefixed with _ |
||||
symprefix= |
||||
if test $suffix = dylib; then symprefix=_; fi |
||||
|
||||
EXPORTED_SYMBOLS=`nm "$so" | grep ' [BCDGIRST] .' | grep -v " $symprefix\\($IGNORED_SYMBOLS\\>\\)" | cut -d' ' -f3 | c++filt` |
||||
|
||||
prefix=$symprefix`basename "$so" | sed 's/libharfbuzz/hb/; s/-/_/g; s/[.].*//'` |
||||
|
||||
echo "Checking that $so does not expose internal symbols" |
||||
if echo "$EXPORTED_SYMBOLS" | grep -v "^${prefix}\(_\|$\)"; then |
||||
echo "Ouch, internal symbols exposed" |
||||
stat=1 |
||||
fi |
||||
|
||||
def=$builddir/$soname.def |
||||
if ! test -f "$def"; then |
||||
echo "'$def' not found; skipping" |
||||
else |
||||
echo "Checking that $so has the same symbol list as $def" |
||||
{ |
||||
echo EXPORTS |
||||
echo "$EXPORTED_SYMBOLS" | sed -e "s/^${symprefix}hb/hb/g" |
||||
# cheat: copy the last line from the def file! |
||||
tail -n1 "$def" |
||||
} | c++filt | diff "$def" - >&2 || stat=1 |
||||
|
||||
tested=true |
||||
fi |
||||
done |
||||
done |
||||
if ! $tested; then |
||||
echo "check-symbols.sh: no shared libraries found; skipping test" |
||||
exit 77 |
||||
fi |
||||
|
||||
exit $stat |
Loading…
Reference in new issue