Changeset 32 for trunk/setup.py


Ignore:
Timestamp:
09/07/05 03:02:13 (9 years ago)
Author:
xi
Message:

Add the examples directory.
Working on #29.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/setup.py

    r27 r32  
    2525from distutils.core import setup, Extension 
    2626 
     27from distutils import log 
     28from distutils.command.build_ext import build_ext 
     29from distutils.errors import CCompilerError, CompileError, LinkError 
     30 
    2731import sys 
    2832if sys.version < '2.2.4': 
     
    3236 
    3337import os 
    34 home = os.environ.get('HOME', '') 
     38#home = os.environ.get('HOME', '') 
     39 
     40CHECK_SYCK = """ 
     41#include <syck.h> 
     42#include <stdio.h> 
     43int main(void) { 
     44    syck_free_parser(syck_new_parser()); 
     45    syck_free_emitter(syck_new_emitter()); 
     46    puts(SYCK_VERSION); 
     47    return 0; 
     48} 
     49""" 
     50CHECK_SYCK_PROG = './_check_syck' 
     51 
     52class PySyckBuildExt(build_ext): 
     53 
     54    def build_extensions(self): 
     55        if not self.force: 
     56            self.check_syck() 
     57        build_ext.build_extensions(self) 
     58 
     59    def _clean(self, *filenames): 
     60        for filename in filenames: 
     61            try: 
     62                os.remove(filename) 
     63            except OSError: 
     64                pass 
     65 
     66    def check_syck(self): 
     67        prog = CHECK_SYCK_PROG 
     68        src = prog + '.c' 
     69        file(src, 'w').write(CHECK_SYCK) 
     70        [obj] = self.compiler.object_filenames([src]) 
     71        log.info("checking for syck.h") 
     72        try: 
     73            self.compiler.compile([src]) 
     74        except CompileError: 
     75            self._clean(src, obj) 
     76            raise CompileError, "syck.h is not found" 
     77        log.info("checking for libsyck.a") 
     78        try: 
     79            self.compiler.link_executable([obj], prog, libraries=['syck']) 
     80        except LinkError: 
     81            self._clean(src, obj, prog) 
     82            raise LinkError, "libsyck.a is not found" 
     83        if self.compiler.exe_extension: 
     84            prog += self.compiler.exe_extension 
     85        log.info("checking syck version") 
     86        pipe = os.popen(prog, 'r') 
     87        data = pipe.read().strip() 
     88        pipe.close() 
     89        version = float(data) 
     90        log.info("syck version: %s" % version) 
     91        if version < 0.55: 
     92            self._clean(src, obj, prog) 
     93            raise CCompilerError, "syck 0.55 or higher is required" 
     94        self._clean(src, obj, prog) 
     95             
    3596 
    3697setup( 
     
    51112    ext_modules=[ 
    52113        Extension('_syck', ['ext/_syckmodule.c'], 
    53             include_dirs=['../../include', '%s/include' % home, '/usr/local/include'], 
    54             library_dirs=['../../lib', '%s/lib' % home, '/usr/local/include'], 
     114#            include_dirs=['../../include', '%s/include' % home, '/usr/local/include'], 
     115#            library_dirs=['../../lib', '%s/lib' % home, '/usr/local/include'], 
    55116            libraries=['syck'], 
    56117        ), 
    57118    ], 
     119    cmdclass={ 
     120        'build_ext': PySyckBuildExt, 
     121    }, 
    58122) 
    59123 
Note: See TracChangeset for help on using the changeset viewer.