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
|
# Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from spack.package import *
class PyCvxopt(PythonPackage):
"""CVXOPT is a free software package for convex optimization based on the
Python programming language."""
homepage = "https://cvxopt.org/"
pypi = "cvxopt/cvxopt-1.1.9.tar.gz"
version("1.2.5", sha256="94ec8c36bd6628a11de9014346692daeeef99b3b7bae28cef30c7490bbcb2d72")
variant(
"gsl",
default=False,
description="Use GSL random number generators for constructing random matrices",
)
variant("fftw", default=False, description="Install the cvxopt.fftw interface to FFTW")
variant(
"glpk", default=False, description="Enable support for the linear programming solver GLPK"
)
# variant(
# 'mosek',
# default=False,
# description=(
# 'Enable support for the linear, second-order cone, and quadratic '
# 'programming solvers in MOSEK'
# ),
# )
variant(
"dsdp",
default=False,
description="Enable support for the semidefinite programming solver DSDP",
)
# Required dependencies
depends_on("python@2.7:", type=("build", "link", "run"))
depends_on("py-setuptools", type="build")
depends_on("blas")
depends_on("lapack")
depends_on("suite-sparse")
# Optional dependencies
depends_on("gsl", when="+gsl")
depends_on("fftw", when="+fftw")
depends_on("glpk", when="+glpk")
# depends_on('mosek@8:', when='+mosek')
depends_on("dsdp@5.8:", when="+dsdp")
def setup_build_environment(self, env):
spec = self.spec
# BLAS/LAPACK Libraries
# Default names of BLAS and LAPACK libraries
env.set("CVXOPT_BLAS_LIB", ";".join(spec["blas"].libs.names))
env.set("CVXOPT_LAPACK_LIB", ";".join(spec["lapack"].libs.names))
# Directory containing BLAS and LAPACK libraries
env.set("CVXOPT_BLAS_LIB_DIR", spec["blas"].libs.directories[0])
# SuiteSparse Libraries
# Directory containing SuiteSparse libraries
env.set("CVXOPT_SUITESPARSE_LIB_DIR", spec["suite-sparse"].libs.directories[0])
# Directory containing SuiteSparse header files
env.set("CVXOPT_SUITESPARSE_INC_DIR", spec["suite-sparse"].headers.directories[0])
# GSL Libraries
if "+gsl" in spec:
env.set("CVXOPT_BUILD_GSL", 1)
# Directory containing libgsl
env.set("CVXOPT_GSL_LIB_DIR", spec["gsl"].libs.directories[0])
# Directory containing the GSL header files
env.set("CVXOPT_GSL_INC_DIR", spec["gsl"].headers.directories[0])
else:
env.set("CVXOPT_BUILD_GSL", 0)
# FFTW Libraries
if "+fftw" in spec:
env.set("CVXOPT_BUILD_FFTW", 1)
# Directory containing libfftw3
env.set("CVXOPT_FFTW_LIB_DIR", spec["fftw"].libs.directories[0])
# Directory containing fftw.h
env.set("CVXOPT_FFTW_INC_DIR", spec["fftw"].headers.directories[0])
else:
env.set("CVXOPT_BUILD_FFTW", 0)
# GLPK Libraries
if "+glpk" in spec:
env.set("CVXOPT_BUILD_GLPK", 1)
# Directory containing libglpk
env.set("CVXOPT_GLPK_LIB_DIR", spec["glpk"].libs.directories[0])
# Directory containing glpk.h
env.set("CVXOPT_GLPK_INC_DIR", spec["glpk"].headers.directories[0])
else:
env.set("CVXOPT_BUILD_GLPK", 0)
# DSDP Libraries
if "+dsdp" in spec:
env.set("CVXOPT_BUILD_DSDP", 1)
# Directory containing libdsdp
env.set("CVXOPT_DSDP_LIB_DIR", spec["dsdp"].libs.directories[0])
# Directory containing dsdp5.h
env.set("CVXOPT_DSDP_INC_DIR", spec["dsdp"].headers.directories[0])
@run_after("install")
@on_package_attributes(run_tests=True)
def install_test(self):
"""Test that the installation was successful."""
python("-m", "unittest", "discover", "-s", "tests")
|