home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2010 November / maximum-cd-2010-11.iso / DiscContents / calibre-0.7.13.msi / file_399 (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2010-08-06  |  6.7 KB  |  234 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. import sys
  5. import os
  6. if os.name == 'nt':
  7.     
  8.     def _get_build_version():
  9.         prefix = 'MSC v.'
  10.         i = sys.version.find(prefix)
  11.         if i == -1:
  12.             return 6
  13.         i = i + len(prefix)
  14.         (s, rest) = sys.version[i:].split(' ', 1)
  15.         majorVersion = int(s[:-2]) - 6
  16.         minorVersion = int(s[2:3]) / 10
  17.         if majorVersion == 6:
  18.             minorVersion = 0
  19.         
  20.         if majorVersion >= 6:
  21.             return majorVersion + minorVersion
  22.  
  23.     
  24.     def find_msvcrt():
  25.         version = _get_build_version()
  26.         if version is None:
  27.             return None
  28.         if version <= 6:
  29.             clibname = 'msvcrt'
  30.         else:
  31.             clibname = 'msvcr%d' % version * 10
  32.         import imp
  33.         if imp.get_suffixes()[0][0] == '_d.pyd':
  34.             clibname += 'd'
  35.         
  36.         return clibname + '.dll'
  37.  
  38.     
  39.     def find_library(name):
  40.         if name in ('c', 'm'):
  41.             return find_msvcrt()
  42.         for directory in os.environ['PATH'].split(os.pathsep):
  43.             fname = os.path.join(directory, name)
  44.             if os.path.isfile(fname):
  45.                 return fname
  46.             fname = fname + '.dll'
  47.             if os.path.isfile(fname):
  48.                 return fname
  49.         
  50.  
  51.  
  52. if os.name == 'ce':
  53.     
  54.     def find_library(name):
  55.         return name
  56.  
  57.  
  58. if os.name == 'posix' and sys.platform == 'darwin':
  59.     from ctypes.macholib.dyld import dyld_find as _dyld_find
  60.     
  61.     def find_library(name):
  62.         possible = [
  63.             'lib%s.dylib' % name,
  64.             '%s.dylib' % name,
  65.             '%s.framework/%s' % (name, name)]
  66.         for name in possible:
  67.             
  68.             try:
  69.                 return _dyld_find(name)
  70.             continue
  71.             except ValueError:
  72.                 continue
  73.                 continue
  74.             
  75.  
  76.         
  77.  
  78. elif os.name == 'posix':
  79.     import re
  80.     import tempfile
  81.     import errno
  82.     
  83.     def _findLib_gcc(name):
  84.         expr = '[^\\(\\)\\s]*lib%s\\.[^\\(\\)\\s]*' % re.escape(name)
  85.         (fdout, ccout) = tempfile.mkstemp()
  86.         os.close(fdout)
  87.         cmd = 'if type gcc >/dev/null 2>&1; then CC=gcc; elif type cc >/dev/null 2>&1; then CC=cc;else exit 10; fi;$CC -Wl,-t -o ' + ccout + ' 2>&1 -l' + name
  88.         
  89.         try:
  90.             f = os.popen(cmd)
  91.             trace = f.read()
  92.             rv = f.close()
  93.         finally:
  94.             
  95.             try:
  96.                 os.unlink(ccout)
  97.             except OSError:
  98.                 e = None
  99.                 if e.errno != errno.ENOENT:
  100.                     raise 
  101.                 e.errno != errno.ENOENT
  102.  
  103.  
  104.         if rv == 10:
  105.             raise OSError, 'gcc or cc command not found'
  106.         rv == 10
  107.         res = re.search(expr, trace)
  108.         if not res:
  109.             return None
  110.         return res.group(0)
  111.  
  112.     if sys.platform == 'sunos5':
  113.         
  114.         def _get_soname(f):
  115.             if not f:
  116.                 return None
  117.             cmd = '/usr/ccs/bin/dump -Lpv 2>/dev/null ' + f
  118.             res = re.search('\\[.*\\]\\sSONAME\\s+([^\\s]+)', os.popen(cmd).read())
  119.             if not res:
  120.                 return None
  121.             return res.group(1)
  122.  
  123.     else:
  124.         
  125.         def _get_soname(f):
  126.             if not f:
  127.                 return None
  128.             cmd = 'if ! type objdump >/dev/null 2>&1; then exit 10; fi;objdump -p -j .dynamic 2>/dev/null ' + f
  129.             f = os.popen(cmd)
  130.             dump = f.read()
  131.             rv = f.close()
  132.             if rv == 10:
  133.                 raise OSError, 'objdump command not found'
  134.             rv == 10
  135.             res = re.search('\\sSONAME\\s+([^\\s]+)', os.popen(cmd).read())
  136.             if not res:
  137.                 return None
  138.             return res.group(1)
  139.  
  140.     if sys.platform.startswith('freebsd') and sys.platform.startswith('openbsd') or sys.platform.startswith('dragonfly'):
  141.         
  142.         def _num_version(libname):
  143.             parts = libname.split('.')
  144.             nums = []
  145.             
  146.             try:
  147.                 while parts:
  148.                     nums.insert(0, int(parts.pop()))
  149.             except ValueError:
  150.                 pass
  151.  
  152.             if not nums:
  153.                 pass
  154.             return [
  155.                 sys.maxint]
  156.  
  157.         
  158.         def find_library(name):
  159.             ename = re.escape(name)
  160.             expr = ':-l%s\\.\\S+ => \\S*/(lib%s\\.\\S+)' % (ename, ename)
  161.             res = re.findall(expr, os.popen('/sbin/ldconfig -r 2>/dev/null').read())
  162.             if not res:
  163.                 return _get_soname(_findLib_gcc(name))
  164.             res.sort(cmp = (lambda x, y: cmp(_num_version(x), _num_version(y))))
  165.             return res[-1]
  166.  
  167.     else:
  168.         
  169.         def _findLib_ldconfig(name):
  170.             expr = '/[^\\(\\)\\s]*lib%s\\.[^\\(\\)\\s]*' % re.escape(name)
  171.             res = re.search(expr, os.popen('/sbin/ldconfig -p 2>/dev/null').read())
  172.             if not res:
  173.                 cmd = 'ldd %s 2>/dev/null' % sys.executable
  174.                 res = re.search(expr, os.popen(cmd).read())
  175.                 if not res:
  176.                     return None
  177.             
  178.             return res.group(0)
  179.  
  180.         
  181.         def _findSoname_ldconfig(name):
  182.             import struct
  183.             if struct.calcsize('l') == 4:
  184.                 machine = os.uname()[4] + '-32'
  185.             else:
  186.                 machine = os.uname()[4] + '-64'
  187.             mach_map = {
  188.                 'x86_64-64': 'libc6,x86-64',
  189.                 'ppc64-64': 'libc6,64bit',
  190.                 'sparc64-64': 'libc6,64bit',
  191.                 's390x-64': 'libc6,64bit',
  192.                 'ia64-64': 'libc6,IA-64' }
  193.             abi_type = mach_map.get(machine, 'libc6')
  194.             expr = '(\\S+)\\s+\\((%s(?:, OS ABI:[^\\)]*)?)\\)[^/]*(/[^\\(\\)\\s]*lib%s\\.[^\\(\\)\\s]*)' % (abi_type, re.escape(name))
  195.             res = re.search(expr, os.popen('/sbin/ldconfig -p 2>/dev/null').read())
  196.             if not res:
  197.                 return None
  198.             return res.group(1)
  199.  
  200.         
  201.         def find_library(name):
  202.             if not _findSoname_ldconfig(name):
  203.                 pass
  204.             return _get_soname(_findLib_gcc(name))
  205.  
  206.  
  207.  
  208. def test():
  209.     cdll = cdll
  210.     import ctypes
  211.     if os.name == 'nt':
  212.         print cdll.msvcrt
  213.         print cdll.load('msvcrt')
  214.         print find_library('msvcrt')
  215.     
  216.     if os.name == 'posix':
  217.         print find_library('m')
  218.         print find_library('c')
  219.         print find_library('bz2')
  220.         if sys.platform == 'darwin':
  221.             print cdll.LoadLibrary('libm.dylib')
  222.             print cdll.LoadLibrary('libcrypto.dylib')
  223.             print cdll.LoadLibrary('libSystem.dylib')
  224.             print cdll.LoadLibrary('System.framework/System')
  225.         else:
  226.             print cdll.LoadLibrary('libm.so')
  227.             print cdll.LoadLibrary('libcrypt.so')
  228.             print find_library('crypt')
  229.     
  230.  
  231. if __name__ == '__main__':
  232.     test()
  233.  
  234.