mirror of
				git://git.code.sf.net/p/cdesktopenv/code
				synced 2025-03-09 15:50:02 +00:00 
			
		
		
		
	Fix build on Solaris 11.4 (re: d3cd4cf)
				
					
				
			It was working on Solaris 11.3, but there were still problems building on Solaris 11.4 with GCC (as on the evaluation VM downloaded directly from Oracle): 1. ksh immediately segfaulted. Experimenting with the compiler flags Oracle uses revealed that we need to define _XPG6 for ksh not to segfault. Why is a mystery. 2. The default path logic used by 'command -p' and the 'getconf PATH' builtin command was still broken: the result did not include any of the /usr/xpg?/bin directories where the standard POSIX utilities actually live. Testing shows that the result of the C language probe 'confstr(_CS_PATH,name,length)' is broken on Solaris (it only yields the paths to the historic non-standard utilities, defeating the purpose) unless _XPG7 is defined; but the latter makes ksh segfault again. So another solution is needed. src/cmd/INIT/package.sh, bin/package: - Add another hack to add the -D_XPG6 flag to CCFLAGS if we're running SunOS aka Solaris. (I've tried to add a 'cc.sol11' script to src/cmd/INIT/ instead, but for some reason that I just don't have time to figure out, the INIT system ignores that on Solaris with gcc, so this is the only way I could come up with. Any patches for less hacky alternatives would be welcome.) src/lib/libast/comp/conf.sh: - Sanitise the code for finding the best 'getconf' utility. src/lib/libast/comp/conf.tab: PATH: - Since the C-languge getconf(_CS_PATH,...) is broken on Solaris 11.4, replace the C language probe with a shell script probe that uses the external 'getconf' utility. - To avoid ksh overriding the result of this probe with the result of its own getconf(_CS_PATH,...) call, which would make Solaris use the wrong value again, specify this as an AST configuration entry instead of a POSIX entry. This should be good enough for all systems; the OS 'getconf' utility should be reliable and the default path value is constant for each OS, so can be hardcoded. src/cmd/ksh93/tests/builtins.sh: - Add another 'sleep .1' to the 'sleep -s 31' test as it was still intermittently failing on Solaris and possibly other systems.
This commit is contained in:
		
							parent
							
								
									d3cd4cf906
								
							
						
					
					
						commit
						aa4669ad17
					
				
					 5 changed files with 44 additions and 23 deletions
				
			
		| 
						 | 
				
			
			@ -344,17 +344,21 @@ for d in \
 | 
			
		|||
	/usr/sbin \
 | 
			
		||||
	/sbin \
 | 
			
		||||
	$PATH
 | 
			
		||||
do	if	test -x $d/getconf
 | 
			
		||||
	then	case `$d/getconf --?-version 2>&1` in
 | 
			
		||||
do	case $d in
 | 
			
		||||
	/*)	;;
 | 
			
		||||
	*)	continue ;;
 | 
			
		||||
	esac
 | 
			
		||||
	if	test -x "$d/getconf"
 | 
			
		||||
	then	case `"$d/getconf" --?-version 2>&1` in
 | 
			
		||||
		*"AT&T"*"Research"*)
 | 
			
		||||
			: presumably an implementation also configured from conf.tab
 | 
			
		||||
			;;
 | 
			
		||||
		*)	CONF_getconf=$d/getconf
 | 
			
		||||
			if	$CONF_getconf -a >/dev/null 2>&1
 | 
			
		||||
			then	CONF_getconf_a=-a
 | 
			
		||||
			fi
 | 
			
		||||
			continue
 | 
			
		||||
			;;
 | 
			
		||||
		esac
 | 
			
		||||
		CONF_getconf=$d/getconf
 | 
			
		||||
		if	"$CONF_getconf" -a >/dev/null 2>&1
 | 
			
		||||
		then	CONF_getconf_a=-a
 | 
			
		||||
		fi
 | 
			
		||||
		break
 | 
			
		||||
	fi
 | 
			
		||||
done
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -368,22 +368,16 @@ PAGESIZE			POSIX	SC 1 MU		PAGESIZE PAGE_SIZE 4096	cc{
 | 
			
		|||
}
 | 
			
		||||
PAGE_SIZE			POSIX	SC 1 MU		_AST_PAGESIZE
 | 
			
		||||
PASS_MAX			SVID	SC 1 CDLMU	8
 | 
			
		||||
PATH				POSIX	CS 1 MU		cc{
 | 
			
		||||
	#include <stdio.h>
 | 
			
		||||
	#include <unistd.h>
 | 
			
		||||
	int main()
 | 
			
		||||
	{
 | 
			
		||||
		size_t length = confstr(_CS_PATH, 0, 0);
 | 
			
		||||
		if(!length)
 | 
			
		||||
			printf("\\"/bin:/usr/bin\\"");
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			char path[length];
 | 
			
		||||
			confstr(_CS_PATH, path, length);
 | 
			
		||||
			printf("\\"%s\\"", path);
 | 
			
		||||
		}
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
PATH				AST	CS 1 MU		sh{
 | 
			
		||||
	CONF_path=
 | 
			
		||||
	case $CONF_getconf in
 | 
			
		||||
	'')	;;
 | 
			
		||||
	*)	CONF_path=`"$CONF_getconf" PATH` ;;
 | 
			
		||||
	esac
 | 
			
		||||
	case $CONF_path in
 | 
			
		||||
	'')	echo '"/bin:/usr/bin"' ;;
 | 
			
		||||
	*)	echo "\\"$CONF_path\\"" ;;
 | 
			
		||||
	esac
 | 
			
		||||
}
 | 
			
		||||
PATH_MAX			POSIX	PC 1 CDLMUX	MAXPATHLEN 1024
 | 
			
		||||
PBS				POSIX	SC 2 FUW
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue