summaryrefslogblamecommitdiff
path: root/var/spack/repos/builtin.mock/packages/autotools-config-replacement/package.py
blob: d07edd9ea8f0ae7f85d71b3d0d75e141876a2b2a (plain) (tree)
1
2
3
4
5
6
7
8
                                                                         





                                                                         
                           










                                                                                


                                                
 
                                                            


                                 
                                                         










                                       

                                                                 


                                                  
                             








                                                                            

                                                                 




                                        

                                                                         



                                            

                                                           


                                                                     

                                                               



                                            

                                                             



                                           

                                                                 

                                             
# 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 os

from spack.package import *


class AutotoolsConfigReplacement(AutotoolsPackage):
    """
    This package features broken and working config.sub and config.guess files,
    that should be replaced by the ones provided by gnuconfig. It allows testing
    with / without patches and with / without substitutes available.
    """

    has_code = False

    version("1.0.0")
    variant("patch_config_files", default=False)
    variant("gnuconfig", default=False)

    depends_on("gnuconfig", type="build", when="+gnuconfig")

    @property
    def patch_config_files(self):
        return self.spec.satisfies("+patch_config_files")

    def autoreconf(self, spec, prefix):
        pass

    def configure(self, spec, prefix):
        pass

    def build(self, spec, prefix):
        pass

    def install(self, spec, prefix):
        broken = os.path.join(self.stage.source_path, "broken")
        working = os.path.join(self.stage.source_path, "working")
        install_tree(broken, self.prefix.broken)
        install_tree(working, self.prefix.working)

    @run_before("autoreconf")
    def create_the_package_sources(self):
        # Creates the following file structure:
        # ./broken/config.sub    -- not executable
        # ./broken/config.guess  -- exectuable & exit code 1
        # ./working/config.sub   -- executable & exit code 0
        # ./working/config.guess -- executable & exit code 0
        # Automatic config helper script substitution should replace the two
        # broken scripts with those from the gnuconfig package.

        broken = os.path.join(self.stage.source_path, "broken")
        working = os.path.join(self.stage.source_path, "working")

        mkdirp(broken)
        mkdirp(working)

        # a configure script is required
        configure_script = join_path(self.stage.source_path, "configure")
        with open(configure_script, "w") as f:
            f.write("#!/bin/sh\nexit 0")
        os.chmod(configure_script, 0o775)

        # broken config.sub (not executable)
        broken_config_sub = join_path(broken, "config.sub")
        with open(broken_config_sub, "w") as f:
            f.write("#!/bin/sh\nexit 0")

        # broken config.guess (exectuable but with error return code)
        broken_config_guess = join_path(broken, "config.guess")
        with open(broken_config_guess, "w") as f:
            f.write("#!/bin/sh\nexit 1")
        os.chmod(broken_config_guess, 0o775)

        # working config.sub
        working_config_sub = join_path(working, "config.sub")
        with open(working_config_sub, "w") as f:
            f.write("#!/bin/sh\nexit 0")
        os.chmod(working_config_sub, 0o775)

        # working config.guess
        working_config_guess = join_path(working, "config.guess")
        with open(working_config_guess, "w") as f:
            f.write("#!/bin/sh\nexit 0")
        os.chmod(working_config_guess, 0o775)