xref: /petsc/src/binding/petsc4py/conf/cythonize.py (revision f46a955babf5119406b7365221263e26671fb65d)
15808f684SSatish Balay#!/usr/bin/env python
2*f46a955bSLisandro Dalcin"""Run Cython with custom options."""
3*f46a955bSLisandro Dalcinimport os
4*f46a955bSLisandro Dalcinimport sys
55808f684SSatish Balay
6*f46a955bSLisandro Dalcinappdir = os.path.dirname(os.path.abspath(__file__))
7*f46a955bSLisandro Dalcinsys.path.insert(0, appdir)
8*f46a955bSLisandro Dalcin
9*f46a955bSLisandro Dalcin# import cyautodoc  # noqa: F401,E402
10*f46a955bSLisandro Dalcinfrom Cython.Compiler.Main import main as cython_main  # noqa: E402
11*f46a955bSLisandro Dalcin
12*f46a955bSLisandro Dalcin
13*f46a955bSLisandro Dalcindef cythonize(args=None):
14*f46a955bSLisandro Dalcin    """Run `cython --3str --cleanup 3 <args>...`."""
15*f46a955bSLisandro Dalcin    if args is None:
16*f46a955bSLisandro Dalcin        argv = sys.argv[:]
17a9c71d45SLisandro Dalcin    else:
18*f46a955bSLisandro Dalcin        argv = [os.path.abspath(__file__)] + list(args)
19*f46a955bSLisandro Dalcin
20*f46a955bSLisandro Dalcin    if '--cleanup' not in argv:
21*f46a955bSLisandro Dalcin        argv[1:1] = ['--cleanup', '3']
22*f46a955bSLisandro Dalcin    if '--3str' not in argv:
23*f46a955bSLisandro Dalcin        argv[1:1] = ['--3str']
24*f46a955bSLisandro Dalcin
25*f46a955bSLisandro Dalcin    cwd = os.getcwd()
26*f46a955bSLisandro Dalcin    sys_argv = sys.argv[:]
275808f684SSatish Balay    try:
28*f46a955bSLisandro Dalcin        sys.argv[:] = argv
29*f46a955bSLisandro Dalcin        cython_main(command_line=1)
305808f684SSatish Balay        return 0
31*f46a955bSLisandro Dalcin    except SystemExit as exc:
32*f46a955bSLisandro Dalcin        return exc.code
335808f684SSatish Balay    finally:
345808f684SSatish Balay        os.chdir(cwd)
35*f46a955bSLisandro Dalcin        sys.argv[:] = sys_argv
36*f46a955bSLisandro Dalcin
37*f46a955bSLisandro Dalcin
38*f46a955bSLisandro Dalcindef main():
39*f46a955bSLisandro Dalcin    """Entry-point to run Cython with custom options."""
40*f46a955bSLisandro Dalcin    args = sys.argv[1:]
41*f46a955bSLisandro Dalcin    if not args:
42*f46a955bSLisandro Dalcin        topdir = os.path.dirname(appdir)
43*f46a955bSLisandro Dalcin        srcdir = os.path.join(topdir, 'src')
44*f46a955bSLisandro Dalcin        source = os.path.join('petsc4py', 'PETSc.pyx')
45*f46a955bSLisandro Dalcin        target = os.path.join('petsc4py', 'PETSc.c')
46*f46a955bSLisandro Dalcin        args += ['--working', srcdir]
47*f46a955bSLisandro Dalcin        args += [source, '--output-file', target]
48*f46a955bSLisandro Dalcin    sys.exit(cythonize(args))
495808f684SSatish Balay
505808f684SSatish Balay
515808f684SSatish Balayif __name__ == "__main__":
52*f46a955bSLisandro Dalcin    main()
53