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