summaryrefslogtreecommitdiff
path: root/test cases/linuxlike/14 static dynamic linkage/verify_static.py
blob: 25e97f368bb18b5ed84824f6ab2125b93bf2b581 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#!/usr/bin/env python3
"""Test script that checks if zlib was statically linked to executable"""
import subprocess
import sys

def handle_common(path):
    """Handle the common case."""
    try:
        output = subprocess.check_output(['nm', '--defined-only', '-P', '-A', path]).decode('utf-8')
    except subprocess.CalledProcessError:
        # some NMs only support -U. Older binutils only supports --defined-only.
        output = subprocess.check_output(['nm', '-UPA', path]).decode('utf-8')
    # POSIX format. Prints all *defined* symbols, looks like this:
    # builddir/main_static: zlibVersion T 1190 39
    # or
    # builddir/main_static: zlibVersion D 1fde0 30
    if ': zlibVersion ' in output:
        return 0
    return 1

def handle_cygwin(path):
    """Handle the Cygwin case."""
    output = subprocess.check_output(['nm', path]).decode('utf-8')
    if (('I __imp_zlibVersion' in output) or ('D __imp_zlibVersion' in output)):
        return 1
    return 0

def main():
    """Main function"""
    if len(sys.argv) > 2 and sys.argv[1] == '--platform=cygwin':
        return handle_cygwin(sys.argv[2])
    else:
        return handle_common(sys.argv[2])


if __name__ == '__main__':
    sys.exit(main())