Esempio n. 1
0
def cythonize(source, includes=(),
              output_h=os.curdir):
    name, ext = os.path.splitext(source)
    output_c = name + '.c'
    #
    from Cython.Compiler.Main import \
         CompilationOptions, default_options, \
         compile, \
         PyrexError
    #
    options = CompilationOptions(default_options)
    options.output_file = output_c
    options.include_path = includes
    #
    from Cython.Compiler import Options
    Options.generate_cleanup_code = 3
    #
    any_failures = 0
    try:
        result = compile(source, options)
        if result.num_errors > 0:
            any_failures = 1
    except (EnvironmentError, PyrexError), e:
        sys.stderr.write(str(e) + '\n')
        any_failures = 1
Esempio n. 2
0
def cythonize(source,
              includes=(),
              destdir_c=None,
              destdir_h=None,
              wdir=None):
    from Cython.Compiler.Main import \
         CompilationOptions, default_options, \
         compile, \
         PyrexError
    from Cython.Compiler import Options
    cwd = os.getcwd()
    try:
        name, ext = os.path.splitext(source)
        outputs_c = [name+'.c']
        outputs_h = [name+'.h', name+'_api.h']
        # change working directory
        if wdir:
            os.chdir(wdir)
        # run Cython on source
        options = CompilationOptions(default_options)
        options.output_file = outputs_c[0]
        options.include_path = list(includes)
        Options.generate_cleanup_code = 3
        any_failures = 0
        try:
            result = compile(source, options)
            if result.num_errors > 0:
                any_failures = 1
        except (EnvironmentError, PyrexError):
            e = sys.exc_info()[1]
            sys.stderr.write(str(e) + '\n')
            any_failures = 1
        if any_failures:
            for output in outputs_c + outputs_h:
                try:
                    os.remove(output)
                except OSError:
                    pass
            return 1
        # move ouputs
        for destdir, outputs in (
            (destdir_c, outputs_c),
            (destdir_h, outputs_h)):
            if destdir is None: continue
            for output in outputs:
                dest = os.path.join(
                    destdir, os.path.basename(output))
                try:
                    os.remove(dest)
                except OSError:
                    pass
                os.rename(output, dest)
        #
        return 0
    #
    finally:
        os.chdir(cwd)
Esempio n. 3
0
def cythonize(source,
              includes=(),
              destdir_c=None,
              destdir_h=None,
              wdir=None):
    from Cython.Compiler.Main import \
         CompilationOptions, default_options, \
         compile, \
         PyrexError
    from Cython.Compiler import Options
    cwd = os.getcwd()
    try:
        name, ext = os.path.splitext(source)
        outputs_c = [name+'.c']
        outputs_h = [name+'.h', name+'_api.h']
        # change working directory
        if wdir:
            os.chdir(wdir)
        # run Cython on source
        options = CompilationOptions(default_options)
        options.output_file = outputs_c[0]
        options.include_path = list(includes)
        Options.generate_cleanup_code = 3
        any_failures = 0
        try:
            result = compile(source, options)
            if result.num_errors > 0:
                any_failures = 1
        except (EnvironmentError, PyrexError):
            e = sys.exc_info()[1]
            sys.stderr.write(str(e) + '\n')
            any_failures = 1
        if any_failures:
            for output in outputs_c + outputs_h:
                try:
                    os.remove(output)
                except OSError:
                    pass
            return 1
        # move ouputs
        for destdir, outputs in (
            (destdir_c, outputs_c),
            (destdir_h, outputs_h)):
            if destdir is None: continue
            for output in outputs:
                dest = os.path.join(
                    destdir, os.path.basename(output))
                try:
                    os.remove(dest)
                except OSError:
                    pass
                os.rename(output, dest)
        #
        return 0
    #
    finally:
        os.chdir(cwd)
Esempio n. 4
0
def cythonize(source, output=None, includes=(), workdir=None):
    import cyautodoc
    from Cython.Compiler import Options
    from Cython.Compiler.Main import (
        CompilationOptions,
        default_options,
        compile,
        PyrexError,
    )
    cwd = os.getcwd()
    try:
        # compute output filenames
        if output is None:
            name, _ = os.path.splitext(source)
            output = name + '.c'
        else:
            name, _ = os.path.splitext(output)
        outputs_c = [output]
        outputs_h = [name + '.h', name + '_api.h']
        # run Cython on source
        options = CompilationOptions(default_options)
        lang_level = Options.directive_types.get('language_level', int)
        options.language_level = lang_level(3)
        options.output_file = output
        options.include_path = list(includes)
        options.working_path = workdir or ""
        Options.generate_cleanup_code = 3
        any_failures = 0
        try:
            if options.working_path:
                os.chdir(options.working_path)
            result = compile(source, options)
            if result.num_errors > 0:
                any_failures = 1
        except (EnvironmentError, PyrexError) as e:
            sys.stderr.write(str(e) + '\n')
            any_failures = 1
        if any_failures:
            for out in outputs_c + outputs_h:
                try:
                    os.remove(out)
                except OSError:
                    pass
            return 1
        return 0
    #
    finally:
        os.chdir(cwd)
Esempio n. 5
0
def cythonize():
    try:
        from Cython.Compiler.Main import CompilationOptions, default_options, \
           compile, PyrexError
        from Cython.Compiler import Options
        import subprocess

        for code in cythoncodes:
            source = code[0] + '.pyx'
            options = CompilationOptions(default_options)
            options.output_file = code[0] + '.c'
            options.include_path = code[1]
            Options.generate_cleanup_code = 3
            any_failures = False
            try:
                result = compile(source, options)
                if result.num_errors > 0:
                    any_failures = True
                if not any_failures:
                    callist = [
                        cythcompiler, '-shared', '-fwrapv', '-Wall',
                        '-fno-strict-aliasing'
                    ]
                    for x in CFLAGS:
                        callist.append(x)
                    for x in code[1]:
                        callist.append('-L' + x)
                    callist.append('-o')
                    callist.append('_' + code[0] + '.so')
                    callist.append(code[0] + '.c')
                    subprocess.call(callist)
            except (EnvironmentError, PyrexError):
                e = sys.exc_info()[1]
                sys.stderr.write(str(e) + '\n')
                any_failures = True
            if any_failures:
                try:
                    os.remove(code[0] + '.c')
                except OSError:
                    pass
    except:
        raise ValueError
Esempio n. 6
0
def cythonize():
   try:
      from Cython.Compiler.Main import CompilationOptions, default_options, \
         compile, PyrexError
      from Cython.Compiler import Options
      import subprocess 

      for code in cythoncodes:
         source = code[0] + '.pyx'
         options = CompilationOptions(default_options)
         options.output_file = code[0] + '.c'
         options.include_path = code[1]
         Options.generate_cleanup_code = 3
         any_failures = False
         try:
            result = compile(source, options)
            if result.num_errors > 0: 
               any_failures = True
            if not any_failures:
               callist = [cythcompiler,'-shared','-fwrapv','-Wall','-fno-strict-aliasing']
               for x in CFLAGS:
                  callist.append(x)
               for x in code[1]:
                  callist.append('-L' + x)
               callist.append('-o')
               callist.append('_' + code[0] + '.so')
               callist.append(code[0] + '.c')
               subprocess.call(callist)
         except (EnvironmentError, PyrexError):
            e = sys.exc_info()[1]
            sys.stderr.write(str(e) + '\n')
            any_failures = True
         if any_failures:
            try:  os.remove(code[0] + '.c')
            except OSError: pass
   except:
      raise ValueError
Esempio n. 7
0
def cythonize(source, includes=(), output_h=os.curdir):
    name, ext = os.path.splitext(source)
    output_c = name + '.c'
    #
    from Cython.Compiler.Main import \
         CompilationOptions, default_options, \
         compile, \
         PyrexError
    #
    options = CompilationOptions(default_options)
    options.output_file = output_c
    options.include_path = includes
    #
    from Cython.Compiler import Options
    Options.generate_cleanup_code = 3
    #
    any_failures = 0
    try:
        result = compile(source, options)
        if result.num_errors > 0:
            any_failures = 1
    except (EnvironmentError, PyrexError), e:
        sys.stderr.write(str(e) + '\n')
        any_failures = 1