summaryrefslogblamecommitdiff
path: root/lib/spack/spack/build_systems/sourceforge.py
blob: 35bb10e5bd18a91eb5d0a6eba21aed96966fe23d (plain) (tree)
1
2
3
4
5
6
7
8
9
                                                                         



                                                                         


                           
                     

 
                                                         
                                                                       

                
                                                  
                                                 


                                                





                                                      





                                                              
                                                                                   





                                                              
                                                                                           
                                                      
# 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 typing import Optional

import spack.package_base
import spack.util.url


class SourceforgePackage(spack.package_base.PackageBase):
    """Mixin that takes care of setting url and mirrors for Sourceforge
    packages."""

    #: Path of the package in a Sourceforge mirror
    sourceforge_mirror_path: Optional[str] = None

    #: List of Sourceforge mirrors used by Spack
    base_mirrors = [
        "https://prdownloads.sourceforge.net/",
        "https://freefr.dl.sourceforge.net/",
        "https://netcologne.dl.sourceforge.net/",
        "https://pilotfiber.dl.sourceforge.net/",
        "https://downloads.sourceforge.net/",
        "http://kent.dl.sourceforge.net/sourceforge/",
    ]

    @property
    def urls(self):
        self._ensure_sourceforge_mirror_path_is_set_or_raise()
        return [
            spack.util.url.join(m, self.sourceforge_mirror_path, resolve_href=True)
            for m in self.base_mirrors
        ]

    def _ensure_sourceforge_mirror_path_is_set_or_raise(self):
        if self.sourceforge_mirror_path is None:
            cls_name = type(self).__name__
            msg = "{0} must define a `sourceforge_mirror_path` attribute" " [none defined]"
            raise AttributeError(msg.format(cls_name))