summaryrefslogtreecommitdiff
path: root/var/spack/repos/builtin/packages/cgal/package.py
blob: ecdd759d1770e5e48efd4526a617ea06c3a3a86e (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
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
# 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 Cgal(CMakePackage):
    """The Computational Geometry Algorithms Library (CGAL) is a C++ library
    that aims to provide easy access to efficient and reliable algorithms in
    computational geometry. CGAL is used in various areas needing geometric
    computation, such as geographic information systems, computer aided design,
    molecular biology, medical imaging, computer graphics, and robotics.
    """

    homepage = "https://www.cgal.org/"
    url = "https://github.com/CGAL/cgal/releases/download/v5.4.1/CGAL-5.4.1.tar.xz"

    version("5.5.2", sha256="b2b05d5616ecc69facdc24417cce0b04fb4321491d107db45103add520e3d8c3")
    version("5.4.1", sha256="4c3dd7ee4d36d237111a4d72b6e14170093271595d5b695148532daa95323d76")
    version("5.1.5", sha256="b1bb8a6053aa12baa5981aef20a542cd3e617a86826963fb8fb6852b1a0da97c")
    version("5.0.3", sha256="e5a3672e35e5e92e3c1b4452cd3c1d554f3177dc512bd98b29edf21866a4288c")
    version("5.0", sha256="e1e7e932988c5d149aa471c1afd69915b7603b5b31b9b317a0debb20ecd42dcc")
    version("4.13", sha256="3e3dd7a64febda58be54c3cbeba329ab6a73b72d4d7647ba4931ecd1fad0e3bc")
    version("4.12", sha256="442ef4fffb2ad6e4141e5a7902993ae6a4e73f7cb641fae1010bb586f6ca5e3f")
    version("4.11", sha256="27a7762e5430f5392a1fe12a3a4abdfe667605c40224de1c6599f49d66cfbdd2")
    version("4.9.1", sha256="56557da971b5310c2678ffc5def4109266666ff3adc7babbe446797ee2b90cca")
    version("4.9", sha256="63ac5df71f912f34f2f0f2e54a303578df51f4ec2627db593a65407d791f9039")
    version("4.7", sha256="50bd0a1cad7a8957b09012f831eebaf7d670e2a3467e8f365ec0c71fa5436369")
    version("4.6.3", sha256="e338027b8767c0a7a6e4fd8679182d1b83b5b1a0da0a1fe4546e7c0ca094fc21")

    variant("shared", default=True, description="Enables the build of shared libraries")
    variant(
        "build_type",
        default="Release",
        description="The build type to build",
        values=("Debug", "Release"),
    )
    variant("header_only", default=False, description="Install in header only mode")

    # ---- See "7 CGAL Libraries" at:
    # https://doc.cgal.org/latest/Manual/installation.html

    # The CORE library provides exact arithmetic for geometric computations.
    # See: https://cs.nyu.edu/exact/core_pages/
    #      https://cs.nyu.edu/exact/core_pages/svn-core.html
    variant("core", default=False, description="Build the CORE library for algebraic numbers")
    variant("imageio", default=False, description="Build utilities to read/write image files")
    variant("demos", default=False, description="Build CGAL demos")
    variant("eigen", default=True, description="Build with Eigen support")

    depends_on("cmake@2.8.11:", type="build")

    # Essential Third Party Libraries
    depends_on("boost+exception+math+random+container", when="@5.0:")
    depends_on("boost+thread+system", when="@:5.0")
    depends_on("gmp")
    depends_on("mpfr")

    # Required for CGAL_ImageIO
    # depends_on('opengl', when='+imageio') # not yet in Spack
    depends_on("zlib-api")

    # Optional to build CGAL_Qt5 (demos)
    # depends_on('opengl', when='+demos')   # not yet in Spack
    depends_on("qt@5:", when="+demos")

    # Optional Third Party Libraries
    depends_on("eigen", when="+eigen")

    # depends_on('leda')
    # depends_on('mpfi')
    # depends_on('rs')
    # depends_on('rs3')
    # depends_on('ntl')
    # depends_on('libqglviewer')
    # depends_on('esbtl')
    # depends_on('intel-tbb')

    conflicts(
        "~header_only",
        when="@:4.9",
        msg="Header only builds became optional in 4.9," " default thereafter",
    )

    def url_for_version(self, version):
        url = "https://github.com/CGAL/cgal/releases/download/"
        if version <= Version("5.0.3"):
            url += "releases/CGAL-{0}/CGAL-{0}.tar.xz"
        else:
            url += "v{0}/CGAL-{0}.tar.xz"

        return url.format(version)

    def setup_build_environment(self, env):
        spec = self.spec

        env.set("BOOST_INCLUDEDIR", spec["boost"].headers.directories[0])
        env.set("BOOST_LIBRARYDIR", spec["boost"].libs.directories[0])

        if "+eigen" in spec:
            env.set("EIGEN3_INC_DIR", spec["eigen"].headers.directories[0])

    def cmake_args(self):
        # Installation instructions:
        # https://doc.cgal.org/latest/Manual/installation.html
        spec = self.spec
        variant_bool = lambda feature: str(feature in spec)
        cmake_args = []

        cmake_args.append("-DBUILD_SHARED_LIBS:BOOL=%s" % variant_bool("+shared"))
        cmake_args.append("-DWITH_CGAL_Core:BOOL=%s" % variant_bool("+core"))
        cmake_args.append("-DWITH_CGAL_ImageIO:BOOL=%s" % variant_bool("+imageio"))
        cmake_args.append("-DWITH_CGAL_Qt5:BOOL=%s" % variant_bool("+demos"))

        if spec.satisfies("@4.9:"):
            cmake_args.append("-DCGAL_HEADER_ONLY:BOOL=%s" % variant_bool("+header_only"))

        return cmake_args