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