#!/usr/bin/env python # vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai from __future__ import with_statement __license__ = 'GPL v3' __copyright__ = '2009, Kovid Goyal ' __docformat__ = 'restructuredtext en' import os, socket, struct, subprocess from distutils.spawn import find_executable from PyQt4 import pyqtconfig from setup import isosx, iswindows OSX_SDK = '/Developer/SDKs/MacOSX10.5.sdk' if not os.path.exists(OSX_SDK): OSX_SDK = '/Developer/SDKs/MacOSX10.4u.sdk' leopard_build = '10.5' in OSX_SDK os.environ['MACOSX_DEPLOYMENT_TARGET'] = '10.5' if leopard_build else '10.4' NMAKE = RC = msvc = MT = win_inc = win_lib = None if iswindows: from distutils import msvc9compiler msvc = msvc9compiler.MSVCCompiler() msvc.initialize() NMAKE = msvc.find_exe('nmake.exe') RC = msvc.find_exe('rc.exe') SDK = os.environ.get('WINSDK', r'C:\Program Files\Microsoft SDKs\Windows\v6.0A') win_inc = os.environ['include'].split(';') win_lib = os.environ['lib'].split(';') for p in win_inc: if 'SDK' in p: MT = os.path.join(os.path.dirname(p), 'bin', 'mt.exe') MT = os.path.join(SDK, 'bin', 'mt.exe') QMAKE = '/Volumes/sw/qt/bin/qmake' if isosx else 'qmake' if find_executable('qmake-qt4'): QMAKE = find_executable('qmake-qt4') elif find_executable('qmake'): QMAKE = find_executable('qmake') QMAKE = os.environ.get('QMAKE', QMAKE) PKGCONFIG = find_executable('pkg-config') PKGCONFIG = os.environ.get('PKG_CONFIG', PKGCONFIG) def run_pkgconfig(name, envvar, default, flag, prefix): ans = [] if envvar: ans = os.environ.get(envvar, default) ans = [x.strip() for x in ans.split(os.pathsep)] ans = [x for x in ans if x and (prefix=='-l' or os.path.exists(x))] if not ans: try: raw = subprocess.Popen([PKGCONFIG, flag, name], stdout=subprocess.PIPE).stdout.read() ans = [x.strip() for x in raw.split(prefix)] ans = [x for x in ans if x and (prefix=='-l' or os.path.exists(x))] except: print 'Failed to run pkg-config:', PKGCONFIG, 'for:', name return ans def pkgconfig_include_dirs(name, envvar, default): return run_pkgconfig(name, envvar, default, '--cflags-only-I', '-I') def pkgconfig_lib_dirs(name, envvar, default): return run_pkgconfig(name, envvar, default,'--libs-only-L', '-L') def pkgconfig_libs(name, envvar, default): return run_pkgconfig(name, envvar, default,'--libs-only-l', '-l') def consolidate(envvar, default): val = os.environ.get(envvar, default) ans = [x.strip() for x in val.split(os.pathsep())] return [x for x in ans if x and os.path.exists(x)] pyqt = pyqtconfig.Configuration() qt_inc = pyqt.qt_inc_dir qt_lib = pyqt.qt_lib_dir fc_inc = '/usr/include/fontconfig' fc_lib = '/usr/lib' podofo_inc = '/usr/include/podofo' podofo_lib = '/usr/lib' if iswindows: fc_inc = r'C:\cygwin\home\kovid\fontconfig\include\fontconfig' fc_lib = r'C:\cygwin\home\kovid\fontconfig\lib' poppler_inc_dirs = consolidate('POPPLER_INC_DIR', r'C:\cygwin\home\kovid\poppler\include\poppler') popplerqt4_inc_dirs = poppler_inc_dirs + [poppler_inc_dirs[0]+r'\qt4'] poppler_lib_dirs = consolidate('POPPLER_LIB_DIR', r'C:\cygwin\home\kovid\poppler\lib') popplerqt4_lib_dirs = poppler_lib_dirs poppler_libs = ['poppler'] popplerqt4_libs = poppler_libs + ['QtCore4', 'QtGui4'] podofo_inc = 'C:\\podofo\\include\\podofo' podofo_lib = r'C:\podofo' elif isosx: fc_inc = '/Users/kovid/fontconfig/include/fontconfig' fc_lib = '/Users/kovid/fontconfig/lib' poppler_inc_dirs = consolidate('POPPLER_INC_DIR', '/Volumes/sw/build/poppler-0.10.7/poppler') popplerqt4_inc_dirs = poppler_inc_dirs + [poppler_inc_dirs[0]+'/qt4'] poppler_lib_dirs = consolidate('POPPLER_LIB_DIR', '/Users/kovid/poppler/lib') popplerqt4_lib_dirs = poppler_lib_dirs poppler_libs = popplerqt4_libs = ['poppler'] podofo_inc = '/usr/local/include/podofo' podofo_lib = '/usr/local/lib' else: # Include directories poppler_inc_dirs = pkgconfig_include_dirs('poppler', 'POPPLER_INC_DIR', '/usr/include/poppler') popplerqt4_inc_dirs = pkgconfig_include_dirs('poppler-qt4', '', '') if not popplerqt4_inc_dirs: popplerqt4_inc_dirs = poppler_inc_dirs + [poppler_inc_dirs[0]+'/qt4'] png_inc_dirs = pkgconfig_include_dirs('libpng', 'PNG_INC_DIR', '/usr/include') magick_inc_dirs = pkgconfig_include_dirs('MagickWand', 'MAGICK_INC', '/usr/include/ImageMagick') # Library directories poppler_lib_dirs = popplerqt4_lib_dirs = pkgconfig_lib_dirs('poppler', 'POPPLER_LIB_DIR', '/usr/lib') png_lib_dirs = pkgconfig_lib_dirs('libpng', 'PNG_LIB_DIR', '/usr/lib') magick_lib_dirs = pkgconfig_lib_dirs('MagickWand', 'MAGICK_LIB', '/usr/lib') # Libraries poppler_libs = pkgconfig_libs('poppler', '', '') if not poppler_libs: poppler_libs = ['poppler'] popplerqt4_libs = pkgconfig_libs('poppler-qt4', '', '') if not popplerqt4_libs: popplerqt4_libs = ['poppler-qt4', 'poppler'] magick_libs = pkgconfig_libs('MagickWand', '', '') if not magick_libs: magick_libs = ['MagickWand', 'MagickCore'] png_libs = ['png'] fc_inc = os.environ.get('FC_INC_DIR', fc_inc) fc_lib = os.environ.get('FC_LIB_DIR', fc_lib) fc_error = None if os.path.exists(os.path.join(fc_inc, 'fontconfig.h')) else \ ('fontconfig header files not found on your system. ' 'Try setting the FC_INC_DIR and FC_LIB_DIR environment ' 'variables.') poppler_error = None if not poppler_inc_dirs or not os.path.exists( os.path.join(poppler_inc_dirs[0], 'OutputDev.h')): poppler_error = \ ('Poppler not found on your system. Various PDF related', ' functionality will not work. Use the POPPLER_INC_DIR and', ' POPPLER_LIB_DIR environment variables.') popplerqt4_error = None if not popplerqt4_inc_dirs or not os.path.exists( os.path.join(popplerqt4_inc_dirs[-1], 'poppler-qt4.h')): popplerqt4_error = \ ('Poppler Qt4 bindings not found on your system.') magick_error = None if not magick_inc_dirs or not os.path.exists(os.path.join(magick_inc_dirs[0], 'wand')): magick_error = ('ImageMagick not found on your system. ' 'Try setting the environment variables MAGICK_INC ' 'and MAGICK_LIB to help calibre locate the inclue and libbrary ' 'files.') podofo_lib = os.environ.get('PODOFO_LIB_DIR', podofo_lib) podofo_inc = os.environ.get('PODOFO_INC_DIR', podofo_inc) podofo_error = None if os.path.exists(os.path.join(podofo_inc, 'podofo.h')) else \ ('PoDoFo not found on your system. Various PDF related', ' functionality will not work. Use the PODOFO_INC_DIR and', ' PODOFO_LIB_DIR environment variables.') def get_ip_address(ifname): import fcntl s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) return socket.inet_ntoa(fcntl.ioctl( s.fileno(), 0x8915, # SIOCGIFADDR struct.pack('256s', ifname[:15]) )[20:24]) try: HOST=get_ip_address('eth0') except: try: HOST=get_ip_address('wlan0') except: HOST='unknown' PROJECT=os.path.basename(os.path.abspath('.'))