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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
# -*- coding: utf-8 -*-
"""
pyvisa.wrapper
~~~~~~~~~~~~~~
ctypes wrapper for VISA library.
This file is part of PyVISA.
:copyright: 2014 by PyVISA Authors, see AUTHORS for more details.
:license: MIT, see LICENSE for more details.
"""
from __future__ import division, unicode_literals, print_function, absolute_import
import os
import sys
if os.name == 'nt':
from ctypes import WINFUNCTYPE as FUNCTYPE, WinDLL as Library
else:
from ctypes import CFUNCTYPE as FUNCTYPE, CDLL as Library
from . import types
from .functions import *
# On Linux, find Library returns the name not the path.
# This excerpt provides a modified find_library.
# noinspection PyUnresolvedReferences
if os.name == "posix" and sys.platform.startswith('linux'):
# Andreas Degert's find functions, using gcc, /sbin/ldconfig, objdump
import re
import tempfile
import errno
def _findlib_gcc(name):
expr = r'[^\(\)\s]*lib%s\.[^\(\)\s]*' % re.escape(name)
fdout, ccout = tempfile.mkstemp()
os.close(fdout)
cmd = 'if type gcc >/dev/null 2>&1; then CC=gcc; else CC=cc; fi;' \
'$CC -Wl,-t -o ' + ccout + ' 2>&1 -l' + name
trace = ''
try:
f = os.popen(cmd)
trace = f.read()
f.close()
finally:
try:
os.unlink(ccout)
except OSError as e:
if e.errno != errno.ENOENT:
raise
res = re.search(expr, trace)
if not res:
return None
return res.group(0)
def _findlib_ldconfig(name):
# XXX assuming GLIBC's ldconfig (with option -p)
expr = r'/[^\(\)\s]*lib%s\.[^\(\)\s]*' % re.escape(name)
res = re.search(expr,
os.popen('/sbin/ldconfig -p 2>/dev/null').read())
if not res:
# Hm, this works only for libs needed by the python executable.
cmd = 'ldd %s 2>/dev/null' % sys.executable
res = re.search(expr, os.popen(cmd).read())
if not res:
return None
return res.group(0)
def find_library(name):
path = _findlib_ldconfig(name) or _findlib_gcc(name)
if path:
return os.path.realpath(path)
return path
else:
from ctypes.util import find_library
|