|
32 | 32 | import os
|
33 | 33 | import cffi
|
34 | 34 |
|
| 35 | +library = "s-dftd3" |
| 36 | +include_header = '#include "dftd3.h"' |
| 37 | +prefix_var = "SDFTD3_PREFIX" |
| 38 | +if prefix_var not in os.environ: |
| 39 | + prefix_var = "CONDA_PREFIX" |
| 40 | + |
35 | 41 | if __name__ == "__main__":
|
36 | 42 | import sys
|
37 | 43 |
|
38 |
| - kwargs = dict(libraries=["s-dftd3"]) |
| 44 | + kwargs = dict(libraries=[library]) |
39 | 45 |
|
40 | 46 | header_file = sys.argv[1]
|
41 | 47 | module_name = sys.argv[2]
|
|
44 | 50 | cdefs = f.read()
|
45 | 51 | else:
|
46 | 52 | import subprocess
|
47 |
| - import pkgconfig |
48 |
| - |
49 |
| - if not pkgconfig.exists("s-dftd3"): |
50 |
| - raise Exception("Unable to find pkg-config package 's-dftd3'") |
51 |
| - if pkgconfig.installed("s-dftd3", "< 0.4"): |
52 |
| - raise Exception( |
53 |
| - "Installed 's-dftd3' version is too old, 0.4 or newer is required" |
54 |
| - ) |
55 |
| - |
56 |
| - kwargs = pkgconfig.parse("s-dftd3") |
57 |
| - |
58 |
| - if "CC" not in os.environ: |
59 |
| - raise Exception("This build script requires to set a C compiler in CC") |
60 |
| - cc = os.environ["CC"] |
61 | 53 |
|
62 |
| - cflags = pkgconfig.cflags("s-dftd3").split() |
| 54 | + try: |
| 55 | + import pkgconfig |
| 56 | + |
| 57 | + if not pkgconfig.exists(library): |
| 58 | + raise ModuleNotFoundError("Unable to find pkg-config package 's-dftd3'") |
| 59 | + if pkgconfig.installed(library, "< 0.4"): |
| 60 | + raise Exception( |
| 61 | + "Installed 's-dftd3' version is too old, 0.4 or newer is required" |
| 62 | + ) |
| 63 | + |
| 64 | + kwargs = pkgconfig.parse(library) |
| 65 | + cflags = pkgconfig.cflags(library).split() |
| 66 | + |
| 67 | + except ModuleNotFoundError: |
| 68 | + kwargs = dict(libraries=[library]) |
| 69 | + cflags = [] |
| 70 | + if prefix_var in os.environ: |
| 71 | + prefix = os.environ[prefix_var] |
| 72 | + kwargs.update( |
| 73 | + include_dirs=[os.path.join(prefix, "include")], |
| 74 | + library_dirs=[os.path.join(prefix, "lib")], |
| 75 | + runtime_library_dirs=[os.path.join(prefix, "lib")], |
| 76 | + ) |
| 77 | + cflags.append("-I" + os.path.join(prefix, "include")) |
| 78 | + |
| 79 | + cc = os.environ["CC"] if "CC" in os.environ else "cc" |
63 | 80 |
|
64 | 81 | module_name = "dftd3._libdftd3"
|
65 | 82 |
|
|
69 | 86 | stdout=subprocess.PIPE,
|
70 | 87 | stderr=subprocess.PIPE,
|
71 | 88 | )
|
72 |
| - out, err = p.communicate(b'#include "s-dftd3.h"') |
| 89 | + out, err = p.communicate(include_header.encode()) |
73 | 90 |
|
74 | 91 | cdefs = out.decode()
|
75 | 92 |
|
76 | 93 | ffibuilder = cffi.FFI()
|
77 |
| -ffibuilder.set_source(module_name, '#include "s-dftd3.h"', **kwargs) |
| 94 | +ffibuilder.set_source(module_name, include_header, **kwargs) |
78 | 95 | ffibuilder.cdef(cdefs)
|
79 | 96 |
|
80 | 97 | if __name__ == "__main__":
|
|
0 commit comments