import gcc-toolset-12-12.0-6.el8
This commit is contained in:
		
							parent
							
								
									49504f4265
								
							
						
					
					
						commit
						3bba462ddf
					
				
							
								
								
									
										226
									
								
								SOURCES/gts-annobin-plugin-select.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										226
									
								
								SOURCES/gts-annobin-plugin-select.sh
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,226 @@ | ||||
| #!/usr/bin/sh | ||||
| # This is a script to switch the symlinks in a GTS gcc's plugin | ||||
| # directory so that they select either the GTS-annobin provided | ||||
| # plugin or the GTS-gcc provided plugin. | ||||
| 
 | ||||
| # Author: Nick Clifton  <nickc@redhat.com> | ||||
| # Copyright (c) 2021-2022 Red Hat. | ||||
| # | ||||
| # This is free software; you can redistribute it and/or modify it | ||||
| # under the terms of the GNU General Public License as published | ||||
| # by the Free Software Foundation; either version 2, or (at your | ||||
| # option) any later version. | ||||
| 
 | ||||
| # It is distributed in the hope that it will be useful, but | ||||
| # WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| # GNU General Public License for more details. | ||||
| # | ||||
| # Usage: | ||||
| #   gts-annobin-plugin-select scl_root | ||||
| # | ||||
| 
 | ||||
| # Set this variable to non-zero to enable the generation of debugging | ||||
| # messages. | ||||
| debug=0 | ||||
| 
 | ||||
| if test "x$1" = "x" ; | ||||
| then | ||||
|     if [ $debug -eq 1 ] | ||||
|     then | ||||
| 	echo "  gts-annobin-plugin-select: Must provide a root directory" | ||||
|     fi | ||||
|     exit 1 | ||||
| else | ||||
|     scl_root=$1 | ||||
| fi | ||||
| 
 | ||||
| # This script is similar to the redhat-annobin-plugin-select.sh script which | ||||
| # is part of the redhat-rpm-config package.  That scripts decides between two | ||||
| # versions of the annobin plugin for the system compiler and stores it choice | ||||
| # in a symlink in the /usr/lib/rpm/redhat directory.  The choice eventually | ||||
| # resolves into the system gcc attempting to load either a plugin called | ||||
| # annobin.so or a plugin called gcc-annobin.so. | ||||
| 
 | ||||
| # In a GTS environment the choice made by redhat-annobin-plugin-select.sh | ||||
| # might not be appropriate (or even possible).  The choice cannot be changed | ||||
| # because the system compilation environment must remain instact.  So instead | ||||
| # the GTS versions of gcc and annobin install plugins called gts-annobin.so | ||||
| # and gts-gcc-annobin.so (into the GTS gcc's plugin directory) and this script | ||||
| # creates a pair of symlinks called annobin.so and gcc-annobin.so.  In this | ||||
| # way the decision made by redhat-annobin-plugin-select.sh is overridden | ||||
| # without affecting any system files. | ||||
| 
 | ||||
| # We cannot be sure that this script will run inside a GTS enabled shell, | ||||
| # so we have to use absolute paths. | ||||
| gts_gcc=$scl_root/usr/bin/gcc | ||||
| 
 | ||||
| if [ ! -x $gts_gcc ] | ||||
| then | ||||
|     if [ $debug -eq 1 ] | ||||
|     then | ||||
| 	echo "  gts-annobin-plugin-select: Could not find gcc.  Expected: $gts_gcc" | ||||
|     fi | ||||
|     exit 0 | ||||
| fi | ||||
| 
 | ||||
| # This is where the annobin package stores the information on the version | ||||
| # of gcc that built the annobin plugin. | ||||
| aver=`$gts_gcc --print-file-name=plugin`/annobin-plugin-version-info | ||||
| 
 | ||||
| # This is where the gcc package stores its version information. | ||||
| gver=`$gts_gcc --print-file-name=rpmver` | ||||
| 
 | ||||
| aplugin=`$gts_gcc --print-file-name=plugin`/gts-annobin.so.0.0.0 | ||||
| gplugin=`$gts_gcc --print-file-name=plugin`/gts-gcc-annobin.so.0.0.0 | ||||
| 
 | ||||
| install_annobin_version=0 | ||||
| install_gcc_version=0 | ||||
| 
 | ||||
| if [ -f $aplugin ] | ||||
| then | ||||
|     if [ -f $gplugin ] | ||||
|     then | ||||
| 	if [ $debug -eq 1 ] | ||||
| 	then | ||||
| 	    echo "  gts-annobin-plugin-select: Both plugins exist, checking version information" | ||||
| 	fi | ||||
| 
 | ||||
| 	if [ -f $gver ] | ||||
| 	then | ||||
| 	    if [ -f $aver ] | ||||
| 	    then | ||||
| 		if [ $debug -eq 1 ] | ||||
| 		then | ||||
| 		    echo "  gts-annobin-plugin-select: Both plugin version files exist - comparing..." | ||||
| 		fi | ||||
| 
 | ||||
| 		# Get the first line from the version info files.  This is just in | ||||
| 		# case there are extra lines in the files. | ||||
| 		avers=`head --lines=1 $aver` | ||||
| 		gvers=`head --lines=1 $gver` | ||||
| 
 | ||||
| 		if [ $debug -eq 1 ] | ||||
| 		then | ||||
| 		    echo "  gts-annobin-plugin-select: Annobin plugin built by gcc $avers" | ||||
| 		    echo "  gts-annobin-plugin-select: GCC     plugin built by gcc $gvers" | ||||
| 		fi | ||||
| 
 | ||||
| 		# If both plugins were built by the same version of gcc then select | ||||
| 		# the one from the annobin package (in case it is built from newer | ||||
| 		# sources).  If the plugin builder versions differ, select the gcc | ||||
| 		# built version instead.  This assumes that the gcc built version | ||||
| 		# always matches the installed gcc, which should be true. | ||||
| 		if [ $avers = $gvers ] | ||||
| 		then | ||||
| 		    if [ $debug -eq 1 ] | ||||
| 		    then | ||||
| 			echo "  gts-annobin-plugin-select: Both plugins built by the same compiler - using annobin-built plugin" | ||||
| 		    fi | ||||
| 		    install_annobin_version=1 | ||||
| 		else | ||||
| 		    if [ $debug -eq 1 ] | ||||
| 		    then | ||||
| 			echo "  gts-annobin-plugin-select: Versions differ - using gcc-built plugin" | ||||
| 		    fi | ||||
| 		    install_gcc_version=1 | ||||
| 		fi | ||||
| 	    else | ||||
| 		if [ $debug -eq 1 ] | ||||
| 		then | ||||
| 		    echo "  gts-annobin-plugin-select: Annobin version file does not exist, using gcc-built plugin" | ||||
| 		fi | ||||
| 		install_gcc_version=1 | ||||
| 	    fi | ||||
| 	else | ||||
| 	    if [ -f $aver ] | ||||
| 	    then | ||||
| 		# FIXME: This is suspicious.  If the installed GCC does not supports plugins | ||||
| 		# then enabling the annobin plugin will not work. | ||||
| 		if [ $debug -eq 1 ] | ||||
| 		then | ||||
| 		    echo "  gts-annobin-plugin-select: GCC plugin version file does not exist, using annobin-built plugin" | ||||
| 		fi | ||||
| 		install_annobin_version=1 | ||||
| 	    else | ||||
| 		if [ $debug -eq 1 ] | ||||
| 		then | ||||
| 		    echo "  gts-annobin-plugin-select: Neither version file exists - playing safe and using gcc-built plugin" | ||||
| 		    echo "  gts-annobin-plugin-select: Note: expected to find $aver and/or $gver" | ||||
| 		fi | ||||
| 		install_gcc_version=1 | ||||
| 	    fi | ||||
| 	fi | ||||
|     else | ||||
| 	if [ $debug -eq 1 ] | ||||
| 	then | ||||
| 	    echo "  gts-annobin-plugin-select: Only the annobin plugin exists - using that" | ||||
| 	fi | ||||
| 	install_annobin_version=1 | ||||
|     fi | ||||
| else | ||||
|     if [ -f $gplugin ] | ||||
|     then | ||||
| 	if [ $debug -eq 1 ] | ||||
| 	then | ||||
| 	    echo "  gts-annobin-plugin-select: Only the gcc plugin exists - using that" | ||||
| 	fi | ||||
| 	install_gcc_version=1 | ||||
|     else | ||||
| 	aplugin=`$gts_gcc --print-file-name=plugin`/annobin.so.0.0.0 | ||||
| 
 | ||||
| 	if [ -f $aplugin ] | ||||
| 	then | ||||
| 	    if [ $debug -eq 1 ] | ||||
| 	    then | ||||
| 		echo "  gts-annobin-plugin-select: Original annobin plugin exists - renaming" | ||||
| 		echo "  gts-annobin-plugin-select: Using renamed original annobin plugin" | ||||
| 	    fi | ||||
| 	    pushd `$gts_gcc --print-file-name=plugin` > /dev/null | ||||
| 	    mv annobin.so.0.0.0 gts-annobin.so.0.0.0 | ||||
| 	    popd > /dev/null | ||||
| 	    install_annobin_version=1 | ||||
| 	else | ||||
| 	    if [ $debug -eq 1 ] | ||||
| 	    then | ||||
| 		echo "  gts-annobin-plugin-select: Neither plugin exists - playing safe and not changing anything" | ||||
| 		echo "  gts-annobin-plugin-select: Note: expected to find $aplugin and/or $gplugin" | ||||
| 	    fi | ||||
| 	fi | ||||
|     fi | ||||
| fi | ||||
| 
 | ||||
| if [ $install_annobin_version -eq 1 ] | ||||
| then | ||||
|     if [ $debug -eq 1 ] | ||||
|     then | ||||
| 	echo "  gts-annobin-plugin-select: Setting symlinks for the annobin version of the plugin" | ||||
|     fi | ||||
|     pushd `$gts_gcc --print-file-name=plugin` > /dev/null | ||||
|     rm -f gcc-annobin.so.0.0.0 annobin.so.0.0.0 gcc-annobin.so annobin.so | ||||
|     ln -s gts-annobin.so.0.0.0 annobin.so | ||||
|     ln -s gts-annobin.so.0.0.0 gcc-annobin.so | ||||
|     ln -s gts-annobin.so.0.0.0 annobin.so.0.0.0 | ||||
|     ln -s gts-annobin.so.0.0.0 gcc-annobin.so.0.0.0 | ||||
|     popd > /dev/null | ||||
|      | ||||
| else if [ $install_gcc_version -eq 1 ] | ||||
| then | ||||
|     if [ $debug -eq 1 ] | ||||
|     then | ||||
| 	echo "  gts-annobin-plugin-select: Setting symlinks for the gcc version of the plugin" | ||||
|     fi | ||||
|     pushd `$gts_gcc --print-file-name=plugin` > /dev/null | ||||
|     rm -f gcc-annobin.so.0.0.0     annobin.so.0.0.0 gcc-annobin.so annobin.so | ||||
|     ln -s gts-gcc-annobin.so.0.0.0 annobin.so | ||||
|     ln -s gts-gcc-annobin.so.0.0.0 gcc-annobin.so | ||||
|     ln -s gts-gcc-annobin.so.0.0.0 annobin.so.0.0.0 | ||||
|     ln -s gts-gcc-annobin.so.0.0.0 gcc-annobin.so.0.0.0 | ||||
|     popd > /dev/null | ||||
| else | ||||
|     if [ $debug -eq 1 ] | ||||
|     then | ||||
| 	echo "  gts-annobin-plugin-select: NOT CHANGING SYMLINKS" | ||||
|     fi | ||||
| fi | ||||
| fi | ||||
| @ -5,12 +5,13 @@ | ||||
| Summary: Package that installs %scl | ||||
| Name: %scl_name | ||||
| Version: 12.0 | ||||
| Release: 5%{?dist} | ||||
| Release: 6%{?dist} | ||||
| License: GPLv2+ | ||||
| Group: Applications/File | ||||
| BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) | ||||
| Source0: README | ||||
| Source1: sudo.sh | ||||
| Source2: gts-annobin-plugin-select.sh | ||||
| 
 | ||||
| Requires: %{scl_prefix}runtime | ||||
| Requires: %{scl_prefix}gcc %{scl_prefix}gcc-c++ %{scl_prefix}gcc-gfortran | ||||
| @ -28,6 +29,8 @@ BuildRequires: help2man | ||||
| BuildRequires: python3-devel | ||||
| %endif | ||||
| 
 | ||||
| %global rrcdir %{_scl_root}/usr/lib/rpm/redhat | ||||
| 
 | ||||
| %description | ||||
| This is the main package for %scl Software Collection. | ||||
| 
 | ||||
| @ -142,11 +145,31 @@ install -d -m 755 %{buildroot}%{_libdir}/perl5/vendor_perl/auto | ||||
| install -d -m 755 %{buildroot}%{_mandir}/man7 | ||||
| install -p -m 644 %{?scl_name}.7 %{buildroot}%{_mandir}/man7/ | ||||
| 
 | ||||
| # Install the plugin selector trigger script. | ||||
| mkdir -p %{buildroot}%{rrcdir} | ||||
| install -p -m 755 %{SOURCE2} %{buildroot}%{rrcdir}/ | ||||
| 
 | ||||
| # This trigger is used to decide which version of the annobin plugin for gcc | ||||
| # should be used.  See comments in the script for full details. | ||||
| 
 | ||||
| %triggerin runtime -- %{scl_prefix}annobin-plugin-gcc %{scl_prefix}gcc-plugin-annobin | ||||
| %{rrcdir}/gts-annobin-plugin-select.sh %{_scl_root} | ||||
| %end | ||||
| 
 | ||||
| # We also trigger when annobin is uninstalled.  This allows us to switch | ||||
| # over to the gcc generated version of the plugin.  It does not matter if | ||||
| # gcc is uninstalled, since if that happens the plugin cannot be used. | ||||
| 
 | ||||
| %triggerpostun runtime -- %{scl_prefix}annobin-plugin-gcc | ||||
| %{rrcdir}/gts-annobin-plugin-select.sh %{_scl_root} | ||||
| %end | ||||
| 
 | ||||
| %files | ||||
| %doc README | ||||
| %{_mandir}/man7/%{?scl_name}.* | ||||
| 
 | ||||
| %files runtime | ||||
| %attr(0755,-,-) %{rrcdir}/gts-annobin-plugin-select.sh | ||||
| %scl_files | ||||
| %{_root_sysconfdir}/rpm/macros.%{scl}-enable | ||||
| %attr(0644,root,root) %verify(not md5 size mtime) %ghost %config(missingok,noreplace) %{_sysconfdir}/selinux-equiv.created | ||||
| @ -173,6 +196,9 @@ if [ $1 = 0 ]; then | ||||
| fi | ||||
| 
 | ||||
| %changelog | ||||
| * Mon Dec 05 2022 Nick Clifton  <nickc@redhat.com> - 12.0-6 | ||||
| - Use triggers to select which version of the annobin plugin should be used.  (#211175) | ||||
| 
 | ||||
| * Wed Jun 29 2022 Marek Polacek <polacek@redhat.com> - 12.0-5 | ||||
| - require -annobin-plugin-gcc (#2102356) | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user