summaryrefslogtreecommitdiff
path: root/var/spack/repos/builtin/packages/nlopt/package.py
blob: b4aa99199dc1b4b32fbb42a71ba9a99e6932a04b (plain) (blame)
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
# Copyright 2013-2024 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 Nlopt(CMakePackage):
    """NLopt is a free/open-source library for nonlinear optimization,
    providing a common interface for a number of different free optimization
    routines available online as well as original implementations of various
    other algorithms."""

    homepage = "https://nlopt.readthedocs.io"
    url = "https://github.com/stevengj/nlopt/archive/v2.5.0.tar.gz"
    git = "https://github.com/stevengj/nlopt.git"

    license("LGPL-2.1-or-later")

    version("master", branch="master")

    version("2.7.0", sha256="b881cc2a5face5139f1c5a30caf26b7d3cb43d69d5e423c9d78392f99844499f")
    version("2.6.2", sha256="cfa5981736dd60d0109c534984c4e13c615314d3584cf1c392a155bfe1a3b17e")
    version("2.6.1", sha256="66d63a505187fb6f98642703bd0ef006fedcae2f9a6d1efa4f362ea919a02650")
    version("2.6.0", sha256="a13077cdf5f5f1127eaaac0bf1e06744bfe98d8a4a3430a15e0af50a69f451ab")
    version("2.5.0", sha256="c6dd7a5701fff8ad5ebb45a3dc8e757e61d52658de3918e38bab233e7fd3b4ae")

    variant("shared", default=True, description="Enables the build of shared libraries")
    variant("python", default=True, description="Build python wrappers")
    variant("guile", default=False, description="Enable Guile support")
    variant("octave", default=False, description="Enable GNU Octave support")
    variant("cxx", default=False, description="Build the C++ routines")

    # Note: matlab is licenced - spack does not download automatically
    variant("matlab", default=False, description="Build the Matlab bindings.")

    depends_on("cmake@3.0:", type="build", when="@master")
    depends_on("python", when="+python", type=("build", "run"))
    depends_on("py-numpy", when="+python", type=("build", "run"))
    depends_on("swig", when="+python")
    depends_on("guile", when="+guile")
    depends_on("octave", when="+octave")
    depends_on("matlab", when="+matlab")
    extends("python", when="+python")

    def cmake_args(self):
        # Add arguments other than
        # CMAKE_INSTALL_PREFIX and CMAKE_BUILD_TYPE
        spec = self.spec
        args = []

        # Specify on command line to alter defaults:
        # eg: spack install nlopt@master +guile -octave +cxx

        # Spack should locate python by default - but to point to a build
        if "+python" in spec:
            args.append("-DPYTHON_EXECUTABLE=%s" % spec["python"].command.path)

        # On is default
        if "-shared" in spec:
            args.append("-DBUILD_SHARED_LIBS:Bool=OFF")

        # On is default
        if "-octave" in spec:
            args.append("-DNLOPT_OCTAVE:Bool=OFF")

        if "+cxx" in spec:
            args.append("-DNLOPT_CXX:BOOL=ON")

        if "+matlab" in spec:
            args.append("-DMatlab_ROOT_DIR=%s" % spec["matlab"].command.path)

        return args