Ignore:
Timestamp:
04/13/12 17:33:00 (2 years ago)
Author:
Ales Erjavec <ales.erjavec@…>
Branch:
default
Message:

Now also builds on windows.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • source/orangeqt/setup.py

    r10783 r10791  
    1111 
    1212from distutils.core import Extension 
     13from distutils import log 
    1314 
    1415import subprocess 
    15  
     16import glob 
     17import numpy 
    1618 
    1719NAME                = 'orangeqt-qt' 
     
    2325VERSION             = '0.0.1a' 
    2426 
    25 import numpy 
    2627 
    27 import glob 
    2828 
    2929import PyQt4.QtCore 
    30 from PyQt4 import pyqtconfig 
     30 
     31from PyQt4 import pyqtconfig  
    3132 
    3233cfg = pyqtconfig.Configuration() 
    33  
    3434pyqt_sip_dir = cfg.pyqt_sip_dir 
    3535 
     
    3838extra_compile_args = [] 
    3939extra_link_args = [] 
     40include_dirs = [] 
     41library_dirs = [] 
    4042 
    4143if sys.platform == "darwin": 
     
    4850    sip_plaftorm_tag = "" 
    4951 
    50 class my_build_ext(sipdistutils.build_ext): 
     52class PyQt4Extension(Extension): 
     53    pass 
     54 
     55class build_pyqt_ext(sipdistutils.build_ext): 
     56    description = "Build a orangeqt PyQt4 extension." 
     57     
     58    user_options = sipdistutils.build_ext.user_options + \ 
     59        [("required", None,   
     60          "orangeqt is required (failure to build will raise an error)")] 
     61         
     62    boolean_options = sipdistutils.build_ext.boolean_options + \ 
     63        ["required"] 
     64     
     65    def initialize_options(self): 
     66        sipdistutils.build_ext.initialize_options(self) 
     67        self.required = False 
     68         
    5169    def finalize_options(self): 
    5270        sipdistutils.build_ext.finalize_options(self) 
     
    5472                        sip_plaftorm_tag, "-t", 
    5573                        "Qt_" + PyQt4.QtCore.QT_VERSION_STR.replace('.', '_')] 
     74        if self.required is not None: 
     75            self.required = True 
    5676 
    5777    def build_extension(self, ext): 
     78        if not isinstance(ext, PyQt4Extension): 
     79            return 
    5880        cppsources = [source for source in ext.sources if source.endswith(".cpp")] 
    5981        if not os.path.exists(self.build_temp): 
     
    6284            header = source.replace(".cpp", ".h") 
    6385            if os.path.exists(header): 
    64                 moc_file = header.split('/')[-1].replace(".h", ".moc") 
     86                moc_file = os.path.basename(header).replace(".h", ".moc") 
     87                call_arg = ["moc", "-o", os.path.join(self.build_temp, moc_file), header] 
     88                log.info("Calling: " + " ".join(call_arg)) 
    6589                try: 
    66                     subprocess.call(["moc", "-o" + os.path.join(self.build_temp, moc_file), header]) 
     90                    subprocess.call(call_arg) 
    6791                except OSError: 
    6892                    raise OSError("Could not locate 'moc' executable.") 
    6993        ext.extra_compile_args = ext.extra_compile_args + ["-I" + self.build_temp] 
    7094        sipdistutils.build_ext.build_extension(self, ext) 
     95     
     96    def run(self): 
     97        try: 
     98            sipdistutils.build_ext.run(self) 
     99        except Exception, ex: 
     100            if self.required: 
     101                raise 
     102            else: 
     103                log.info("Could not build orangeqt extension (%r)\nSkipping." % ex) 
    71104 
     105    # For sipdistutils to find PyQt4's .sip files 
    72106    def _sip_sipfiles_dir(self): 
    73107        return pyqt_sip_dir 
     108 
    74109 
    75110def get_source_files(path, ext="cpp", exclude=[]): 
     
    78113    return files 
    79114 
     115 
     116# Used Qt4 libs 
    80117qt_libs = ["QtCore", "QtGui", "QtOpenGL"] 
    81118 
     119 
    82120if cfg.qt_framework: 
    83     extra_includes = ["-F%s" % cfg.qt_lib_dir] 
     121    extra_compile_args = ["-F%s" % cfg.qt_lib_dir] 
    84122    extra_link_args = ["-F%s" % cfg.qt_lib_dir] 
    85123    for lib in qt_libs: 
    86         extra_includes += ["-I" + os.path.join(cfg.qt_lib_dir, 
    87                                         lib + ".framework", "Headers")] 
     124        include_dirs += [os.path.join(cfg.qt_lib_dir, 
     125                                      lib + ".framework", "Headers")] 
    88126        extra_link_args += ["-framework", lib] 
     127#    extra_link_args += ["-framework", "OpenGL"] 
    89128    qt_libs = [] 
    90129else: 
    91     extra_includes = ["-I" + cfg.qt_inc_dir] \ 
    92             + ["-I" + os.path.join(cfg.qt_inc_dir, lib) for lib in qt_libs] 
    93     extra_link_args = ["-L%s" % cfg.qt_lib_dir] 
     130    include_dirs = [cfg.qt_inc_dir] + \ 
     131                   [os.path.join(cfg.qt_inc_dir, lib) for lib in qt_libs] 
     132    library_dirs += [cfg.qt_lib_dir] 
    94133 
    95 extra_includes += ["-I" + numpy.get_include()] + ["-I./"] 
     134if sys.platform == "win32": 
     135    # Qt libs on windows have a 4 added 
     136    qt_libs = [lib + "4" for lib in qt_libs] 
    96137 
    97 orangeqt_ext = Extension("orangeqt", 
    98                         ["orangeqt.sip"] + get_source_files("", "cpp"), 
    99                         extra_compile_args = extra_compile_args 
    100                                             + ["-DORANGEQT_EXPORTS"] 
    101                                             + extra_includes, 
    102                         extra_link_args = extra_link_args, 
    103                         libraries = qt_libs 
    104                         ) 
     138include_dirs += [numpy.get_include(), "./"] 
     139 
     140orangeqt_ext = PyQt4Extension("orangeqt", 
     141                              ["orangeqt.sip"] + get_source_files("", "cpp", 
     142                               exclude=["canvas3d.cpp", "plot3d.cpp", "glextensions.cpp"] 
     143                               ), 
     144                              include_dirs=include_dirs, 
     145                              extra_compile_args=extra_compile_args + \ 
     146                                                   ["-DORANGEQT_EXPORTS"], 
     147                              extra_link_args=extra_link_args, 
     148                              libraries = qt_libs, 
     149                              library_dirs=library_dirs 
     150                             ) 
    105151 
    106152def setup_package(): 
     
    113159          license = LICENSE, 
    114160          ext_modules = [orangeqt_ext], 
    115           cmdclass={"build_ext": my_build_ext}, 
     161          cmdclass={"build_ext": build_pyqt_ext}, 
    116162          ) 
    117163 
Note: See TracChangeset for help on using the changeset viewer.