File: setup.py

package info (click to toggle)
pygrib 2.1.8-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 28,444 kB
  • sloc: javascript: 1,365; python: 1,356; makefile: 39; ansic: 13
file content (133 lines) | stat: -rw-r--r-- 3,735 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
import glob
import os
import setuptools
import subprocess
import sys
from Cython.Distutils import build_ext


class NumpyBuildExtCommand(build_ext):
    """
    build_ext command for use when numpy headers are needed.
    from https://stackoverflow.com/questions/2379898/
    and https://stackoverflow.com/questions/48283503/
    """

    def run(self):
        import numpy

        self.distribution.fetch_build_eggs(["numpy"])
        self.include_dirs.append(numpy.get_include())
        build_ext.run(self)


def extract_version(CYTHON_FNAME):
    version = None
    with open(CYTHON_FNAME) as fi:
        for line in fi:
            if line.startswith("__version__"):
                _, version = line.split("=")
                version = version.strip()[1:-1]  # Remove quotation characters.
                break
    return version


def package_files(directory):
    owd = os.getcwd()
    os.chdir(os.path.join('src','pygrib'))
    paths = []
    for (path, directories, filenames) in os.walk(directory):
        for filename in filenames:
            paths.append(os.path.join(path, filename))
    os.chdir(owd)
    return paths

if os.environ.get("PYGRIB_WHEEL") is not None:
    package_data={'':package_files('share')}
else:
    package_data={}

cmdclass = {"build_ext": NumpyBuildExtCommand}

searchdirs = []
if os.environ.get("GRIBAPI_DIR"):
    searchdirs.append(os.environ["GRIBAPI_DIR"])
if os.environ.get("ECCODES_DIR"):
    searchdirs.append(os.environ["ECCODES_DIR"])
if os.environ.get("CONDA_PREFIX"):
    searchdirs.append(os.environ["CONDA_PREFIX"])
    searchdirs.append(os.path.join(os.environ["CONDA_PREFIX"],'Library')) # windows
searchdirs += [
    os.path.expanduser("~"),
    "/usr",
    "/usr/local",
    "/opt/local",
    "/opt/homebrew",
    "/opt",
    "/sw",
]
# look for grib_api.h in searchdirs
eccdir = None
# Debian/Ubuntu
st,reply = subprocess.getstatusoutput('dpkg-architecture --query DEB_HOST_MULTIARCH')
if st != 0:
    raise Exception("Multiarch check failed for pygrib %s" % reply)
else:
    arch=reply.strip()
for d in searchdirs:
    incpath = os.path.join(os.path.join(d, "include"), "grib_api.h")
    if os.path.exists(incpath):
        eccdir = d
        print("eccodes found in %s" % eccdir)
        break
    incpath = os.path.join(os.path.join(d, "include",arch), "grib_api.h")
    if os.path.exists(incpath):
        eccdir = d
        print("eccodes found in %s" % eccdir)
        break
if eccdir is not None:
    incdirs = [os.path.join(eccdir, "include")]
    libdirs = [os.path.join(eccdir, "lib"), os.path.join(eccdir, "lib64")]
else:
    print("eccodes not found, build may fail...")
    incdirs = []
    libdirs = []
if sys.platform == 'win32':
    runtime_lib_dirs = []
else:
    runtime_lib_dirs = libdirs
ext_modules = [
    setuptools.Extension(
        "pygrib._pygrib",
        ["src/pygrib/_pygrib.pyx"],
        include_dirs=incdirs,
        library_dirs=libdirs,
        runtime_library_dirs=runtime_lib_dirs,
        libraries=["eccodes"],
    )
]

# man pages installed in MAN_DIR/man1
if os.environ.get("MAN_DIR"):
    man_dir = os.environ.get("MAN_DIR")
    manpages = glob.glob(os.path.join("man", "*.1"))
    data_files = [(os.path.join(man_dir, "man1"), manpages)]
# if MAN_DIR not set, man pages not installed
else:
    data_files = None

# See pyproject.toml for project metadata
setuptools.setup(
    name="pygrib",  # need by GitHub dependency graph
    version=extract_version("src/pygrib/_pygrib.pyx"),
    cmdclass=cmdclass,
    scripts=[
        "utils/grib_list",
        "utils/grib_repack",
        "utils/cnvgrib1to2",
        "utils/cnvgrib2to1",
    ],
    ext_modules=ext_modules,
    data_files=data_files,
    package_data=package_data,
)