summaryrefslogtreecommitdiff
path: root/var/spack/repos/builtin/packages/pvm/package.py
blob: 0000c87e810ff0f8c12864dee59584c1fcd80813 (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
# 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)

import subprocess

from spack.package import *


class Pvm(MakefilePackage):
    """PVM (Parallel Virtual Machine) is a software package that permits a
    heterogeneous collection of Unix and/or Windows computers hooked together
    by a network to be used as a single large parallel computer."""

    homepage = "https://www.csm.ornl.gov/pvm/pvm_home.html"
    url = "https://www.netlib.org/pvm3/pvm3.4.6.tgz"

    version("3.4.6", sha256="482665e9bc975d826bcdacf1df1d42e43deda9585a2c430fd3b7b7ed08eada44")

    depends_on("m4", type="build")
    depends_on("libtirpc", type="link")

    variant(
        "fpic", default=False, description="Enables -fPIC compilation flag on static libraries."
    )

    parallel = False

    @staticmethod
    def pvm_arch(root):
        """Returns the appropriate PVM_ARCH."""
        process = subprocess.Popen([join_path(root, "lib", "pvmgetarch")], stdout=subprocess.PIPE)
        return process.communicate()[0].strip().decode()

    def edit(self, spec, prefix):
        # Before building PVM, you must set the environment
        # variable "PVM_ROOT" to the path where PVM resides
        env["PVM_ROOT"] = self.stage.source_path

    def patch(self):
        pvm_arch = self.pvm_arch(self.stage.source_path)

        if "+fpic" in self.spec:
            filter_file(
                "^SHAREDCFLAGS =", "SHAREDCFLAGS = -fPIC", join_path("conf", pvm_arch + ".def")
            )

    def setup_build_environment(self, env):
        tirpc = self.spec["libtirpc"].prefix
        env.prepend_path("SPACK_INCLUDE_DIRS", tirpc.include.tirpc)
        env.set("SPACK_LDLIBS", "-ltirpc")

    def install(self, spec, prefix):
        install_tree("bin", prefix.bin)
        install_tree("include", prefix.include)
        install_tree("lib", prefix.lib)
        install_tree("man", prefix.man)

    def setup_run_environment(self, env):
        # Before running PVM, you must set the environment
        # variable "PVM_ROOT" to the path where PVM resides
        pvm_arch = self.pvm_arch(self.prefix)
        env.set("PVM_ROOT", self.prefix)
        env.set("PVM_ARCH", pvm_arch)
        env.prepend_path("PATH", join_path(self.prefix, "lib"))
        env.prepend_path("PATH", join_path(self.prefix, "lib", pvm_arch))