xref: /titanic_51/usr/src/lib/libshell/misc/buildksh93.sh (revision 3e14f97f673e8a630f076077de35afdd43dc1587)
17c2fbfb3SApril Chin#!/bin/ksh -p
27c2fbfb3SApril Chin# (note we use "/bin/ksh -p" for Linux/pdksh support in this script)
37c2fbfb3SApril Chin
47c2fbfb3SApril Chin#
57c2fbfb3SApril Chin# CDDL HEADER START
67c2fbfb3SApril Chin#
77c2fbfb3SApril Chin# The contents of this file are subject to the terms of the
87c2fbfb3SApril Chin# Common Development and Distribution License (the "License").
97c2fbfb3SApril Chin# You may not use this file except in compliance with the License.
107c2fbfb3SApril Chin#
117c2fbfb3SApril Chin# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
127c2fbfb3SApril Chin# or http://www.opensolaris.org/os/licensing.
137c2fbfb3SApril Chin# See the License for the specific language governing permissions
147c2fbfb3SApril Chin# and limitations under the License.
157c2fbfb3SApril Chin#
167c2fbfb3SApril Chin# When distributing Covered Code, include this CDDL HEADER in each
177c2fbfb3SApril Chin# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
187c2fbfb3SApril Chin# If applicable, add the following below this CDDL HEADER, with the
197c2fbfb3SApril Chin# fields enclosed by brackets "[]" replaced with your own identifying
207c2fbfb3SApril Chin# information: Portions Copyright [yyyy] [name of copyright owner]
217c2fbfb3SApril Chin#
227c2fbfb3SApril Chin# CDDL HEADER END
237c2fbfb3SApril Chin#
247c2fbfb3SApril Chin
257c2fbfb3SApril Chin#
26*3e14f97fSRoger A. Faulkner# Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved.
277c2fbfb3SApril Chin#
287c2fbfb3SApril Chin
297c2fbfb3SApril Chin#
3034f9b3eeSRoland Mainz# buildksh93.sh - ast-ksh standalone build script for the
317c2fbfb3SApril Chin# OpenSolaris ksh93-integration project
327c2fbfb3SApril Chin#
337c2fbfb3SApril Chin
347c2fbfb3SApril Chin# ksh93t sources can be downloaded like this from the AT&T site:
35*3e14f97fSRoger A. Faulkner# wget --http-user="I accept www.opensource.org/licenses/cpl" --http-passwd="." 'http://www.research.att.com/~gsf/download/tgz/INIT.2010-03-09.tgz'
36*3e14f97fSRoger A. Faulkner# wget --http-user="I accept www.opensource.org/licenses/cpl" --http-passwd="." 'http://www.research.att.com/~gsf/download/tgz/ast-ksh.2010-03-09.tgz'
377c2fbfb3SApril Chin
387c2fbfb3SApril Chinfunction fatal_error
397c2fbfb3SApril Chin{
407c2fbfb3SApril Chin    print -u2 "${progname}: $*"
417c2fbfb3SApril Chin    exit 1
427c2fbfb3SApril Chin}
437c2fbfb3SApril Chin
447c2fbfb3SApril Chinset -o errexit
457c2fbfb3SApril Chinset -o xtrace
467c2fbfb3SApril Chin
477c2fbfb3SApril Chintypeset progname="$(basename "${0}")"
487c2fbfb3SApril Chintypeset buildmode="$1"
497c2fbfb3SApril Chin
507c2fbfb3SApril Chinif [[ "${buildmode}" == "" ]] ; then
517c2fbfb3SApril Chin    fatal_error "buildmode required."
527c2fbfb3SApril Chinfi
537c2fbfb3SApril Chin
547c2fbfb3SApril Chin# Make sure we use the C locale during building to avoid any unintended
557c2fbfb3SApril Chin# side-effects
567c2fbfb3SApril Chinexport LANG=C
577c2fbfb3SApril Chinexport LC_ALL=$LANG LC_MONETARY=$LANG LC_NUMERIC=$LANG LC_MESSAGES=$LANG LC_COLLATE=$LANG LC_CTYPE=$LANG
587c2fbfb3SApril Chin# Make sure the POSIX/XPG6 tools are in front of /usr/bin (/bin is needed for Linux after /usr/bin)
597c2fbfb3SApril Chinexport PATH=/usr/xpg6/bin:/usr/xpg4/bin:/usr/ccs/bin:/usr/bin:/bin:/opt/SUNWspro/bin
607c2fbfb3SApril Chin
617c2fbfb3SApril Chin# Make sure the POSIX/XPG6 packages are installed (mandatory for building
627c2fbfb3SApril Chin# our version of ksh93 correctly).
637c2fbfb3SApril Chinif [[ "$(uname -s)" == "SunOS" ]] ; then
647c2fbfb3SApril Chin    if [[ ! -x "/usr/xpg6/bin/tr" ]] ; then
657c2fbfb3SApril Chin        fatal_error "XPG6/4 packages (SUNWxcu6,SUNWxcu4) not installed."
667c2fbfb3SApril Chin    fi
677c2fbfb3SApril Chinfi
687c2fbfb3SApril Chin
697c2fbfb3SApril Chinfunction print_solaris_builtin_header
707c2fbfb3SApril Chin{
717c2fbfb3SApril Chin# Make sure to use \\ instead of \ for continuations
727c2fbfb3SApril Chincat <<ENDOFTEXT
737c2fbfb3SApril Chin/*
747c2fbfb3SApril Chin * CDDL HEADER START
757c2fbfb3SApril Chin *
767c2fbfb3SApril Chin * The contents of this file are subject to the terms of the
777c2fbfb3SApril Chin * Common Development and Distribution License (the "License").
787c2fbfb3SApril Chin * You may not use this file except in compliance with the License.
797c2fbfb3SApril Chin *
807c2fbfb3SApril Chin * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
817c2fbfb3SApril Chin * or http://www.opensolaris.org/os/licensing.
827c2fbfb3SApril Chin * See the License for the specific language governing permissions
837c2fbfb3SApril Chin * and limitations under the License.
847c2fbfb3SApril Chin *
857c2fbfb3SApril Chin * When distributing Covered Code, include this CDDL HEADER in each
867c2fbfb3SApril Chin * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
877c2fbfb3SApril Chin * If applicable, add the following below this CDDL HEADER, with the
887c2fbfb3SApril Chin * fields enclosed by brackets "[]" replaced with your own identifying
897c2fbfb3SApril Chin * information: Portions Copyright [yyyy] [name of copyright owner]
907c2fbfb3SApril Chin *
917c2fbfb3SApril Chin * CDDL HEADER END
927c2fbfb3SApril Chin */
937c2fbfb3SApril Chin
947c2fbfb3SApril Chin/*
95*3e14f97fSRoger A. Faulkner * Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved.
967c2fbfb3SApril Chin */
977c2fbfb3SApril Chin
987c2fbfb3SApril Chin#ifndef _SOLARIS_KSH_CMDLIST_H
997c2fbfb3SApril Chin#define	_SOLARIS_KSH_CMDLIST_H
1007c2fbfb3SApril Chin
1017c2fbfb3SApril Chin#ifdef	__cplusplus
1027c2fbfb3SApril Chinextern "C" {
1037c2fbfb3SApril Chin#endif
1047c2fbfb3SApril Chin
1057c2fbfb3SApril Chin/*
1067c2fbfb3SApril Chin * List builtins for Solaris.
1077c2fbfb3SApril Chin * The list here is partially autogenerated and partially hand-picked
1087c2fbfb3SApril Chin * based on compatibility with the native Solaris versions of these
1097c2fbfb3SApril Chin * tools
1107c2fbfb3SApril Chin */
1117c2fbfb3SApril Chin
1127c2fbfb3SApril Chin/*
1137c2fbfb3SApril Chin * Commands which are 100% compatible with native Solaris versions (/bin is
1147c2fbfb3SApril Chin * a softlink to ./usr/bin, ksh93 takes care about the lookup)
1157c2fbfb3SApril Chin */
1167c2fbfb3SApril Chin#define	BINCMDLIST(f)	\\
1177c2fbfb3SApril Chin	{ "/bin/"	#f, NV_BLTIN|NV_BLTINOPT|NV_NOFREE, bltin(f) },
1187c2fbfb3SApril Chin#define	USRBINCMDLIST(f)	\\
1197c2fbfb3SApril Chin	{ "/usr/bin/"	#f, NV_BLTIN|NV_BLTINOPT|NV_NOFREE, bltin(f) },
1207c2fbfb3SApril Chin#define	SBINCMDLIST(f)	\\
1217c2fbfb3SApril Chin	{ "/sbin/"	#f, NV_BLTIN|NV_BLTINOPT|NV_NOFREE, bltin(f) },
1227c2fbfb3SApril Chin#define	SUSRBINCMDLIST(f)	\\
1237c2fbfb3SApril Chin	{ "/usr/sbin/"	#f, NV_BLTIN|NV_BLTINOPT|NV_NOFREE, bltin(f) },
124*3e14f97fSRoger A. Faulkner/* POSIX compatible commands */
125*3e14f97fSRoger A. Faulkner#define	XPG6CMDLIST(f)	\\
126*3e14f97fSRoger A. Faulkner	{ "/usr/xpg6/bin/" #f, NV_BLTIN|NV_BLTINOPT|NV_NOFREE, bltin(f) },
127*3e14f97fSRoger A. Faulkner#define	XPG4CMDLIST(f)	\\
128*3e14f97fSRoger A. Faulkner	{ "/usr/xpg4/bin/" #f, NV_BLTIN|NV_BLTINOPT|NV_NOFREE, bltin(f) },
129*3e14f97fSRoger A. Faulkner#ifdef SHOPT_USR_GNU_BIN_BUILTINS
130*3e14f97fSRoger A. Faulkner/* GNU coreutils compatible commands */
131*3e14f97fSRoger A. Faulkner#define	GNUCMDLIST(f)	\\
132*3e14f97fSRoger A. Faulkner	{ "/usr/gnu/bin/" #f, NV_BLTIN|NV_BLTINOPT|NV_NOFREE, bltin(f) },
133*3e14f97fSRoger A. Faulkner#else
134*3e14f97fSRoger A. Faulkner#define	GNUCMDLIST(f)
135*3e14f97fSRoger A. Faulkner#endif
1367c2fbfb3SApril Chin/*
1377c2fbfb3SApril Chin * Make all ksh93 builtins accessible when /usr/ast/bin was added to
1387c2fbfb3SApril Chin * /usr/xpg6/bin:/usr/xpg4/bin:/usr/ccs/bin:/usr/bin:/bin:/opt/SUNWspro/bin
1397c2fbfb3SApril Chin */
1407c2fbfb3SApril Chin#define	ASTCMDLIST(f)	\\
1417c2fbfb3SApril Chin	{ "/usr/ast/bin/" #f, NV_BLTIN|NV_BLTINOPT|NV_NOFREE, bltin(f) },
1427c2fbfb3SApril Chin
1437c2fbfb3SApril Chin/* undo ast_map.h #defines to avoid collision */
1447c2fbfb3SApril Chin#undef basename
1457c2fbfb3SApril Chin#undef dirname
14634f9b3eeSRoland Mainz#undef mktemp
1477c2fbfb3SApril Chin
1487c2fbfb3SApril Chin/* Generated data, do not edit. */
1497c2fbfb3SApril ChinASTCMDLIST(basename)
150*3e14f97fSRoger A. FaulknerGNUCMDLIST(basename)
151*3e14f97fSRoger A. FaulknerXPG4CMDLIST(basename)
1527c2fbfb3SApril ChinASTCMDLIST(cat)
153*3e14f97fSRoger A. FaulknerBINCMDLIST(cat)
1547c2fbfb3SApril ChinASTCMDLIST(chgrp)
155*3e14f97fSRoger A. Faulkner// XPG4CMDLIST(chgrp)
1567c2fbfb3SApril ChinASTCMDLIST(chmod)
1577c2fbfb3SApril ChinASTCMDLIST(chown)
158*3e14f97fSRoger A. Faulkner// XPG4CMDLIST(chown)
159*3e14f97fSRoger A. FaulknerBINCMDLIST(chown)
1607c2fbfb3SApril ChinASTCMDLIST(cksum)
161*3e14f97fSRoger A. FaulknerBINCMDLIST(cksum)
162*3e14f97fSRoger A. FaulknerGNUCMDLIST(cksum)
1637c2fbfb3SApril ChinASTCMDLIST(cmp)
164*3e14f97fSRoger A. FaulknerBINCMDLIST(cmp)
1657c2fbfb3SApril ChinASTCMDLIST(comm)
166*3e14f97fSRoger A. FaulknerBINCMDLIST(comm)
167*3e14f97fSRoger A. FaulknerGNUCMDLIST(comm)
1687c2fbfb3SApril ChinASTCMDLIST(cp)
169*3e14f97fSRoger A. Faulkner// XPG4CMDLIST(cp)
1707c2fbfb3SApril ChinASTCMDLIST(cut)
171*3e14f97fSRoger A. FaulknerBINCMDLIST(cut)
172*3e14f97fSRoger A. FaulknerGNUCMDLIST(cut)
1737c2fbfb3SApril ChinASTCMDLIST(date)
174*3e14f97fSRoger A. Faulkner// XPG4CMDLIST(date)
1757c2fbfb3SApril ChinASTCMDLIST(dirname)
176*3e14f97fSRoger A. FaulknerBINCMDLIST(dirname)
177*3e14f97fSRoger A. FaulknerGNUCMDLIST(dirname)
178*3e14f97fSRoger A. Faulkner// ASTCMDLIST(egrep)
179*3e14f97fSRoger A. Faulkner// XPG4CMDLIST(egrep)
1807c2fbfb3SApril ChinASTCMDLIST(expr)
181*3e14f97fSRoger A. FaulknerGNUCMDLIST(expr)
182*3e14f97fSRoger A. FaulknerXPG6CMDLIST(expr)
1837c2fbfb3SApril ChinASTCMDLIST(fds)
184*3e14f97fSRoger A. Faulkner// ASTCMDLIST(fgrep)
185*3e14f97fSRoger A. Faulkner// XPG4CMDLIST(fgrep)
1867c2fbfb3SApril ChinASTCMDLIST(fmt)
1877c2fbfb3SApril ChinASTCMDLIST(fold)
188*3e14f97fSRoger A. FaulknerBINCMDLIST(fold)
189*3e14f97fSRoger A. FaulknerGNUCMDLIST(fold)
190*3e14f97fSRoger A. Faulkner// ASTCMDLIST(grep)
191*3e14f97fSRoger A. Faulkner// XPG4CMDLIST(grep)
1927c2fbfb3SApril ChinASTCMDLIST(head)
193*3e14f97fSRoger A. FaulknerBINCMDLIST(head)
1947c2fbfb3SApril ChinASTCMDLIST(id)
195*3e14f97fSRoger A. FaulknerXPG4CMDLIST(id)
1967c2fbfb3SApril ChinASTCMDLIST(join)
197*3e14f97fSRoger A. FaulknerBINCMDLIST(join)
198*3e14f97fSRoger A. FaulknerGNUCMDLIST(join)
1997c2fbfb3SApril ChinASTCMDLIST(ln)
200*3e14f97fSRoger A. Faulkner// XPG4CMDLIST(ln)
2017c2fbfb3SApril ChinASTCMDLIST(logname)
202*3e14f97fSRoger A. FaulknerBINCMDLIST(logname)
203*3e14f97fSRoger A. FaulknerGNUCMDLIST(logname)
204*3e14f97fSRoger A. FaulknerASTCMDLIST(md5sum)
2057c2fbfb3SApril ChinASTCMDLIST(mkdir)
206*3e14f97fSRoger A. FaulknerBINCMDLIST(mkdir)
207*3e14f97fSRoger A. FaulknerGNUCMDLIST(mkdir)
2087c2fbfb3SApril ChinASTCMDLIST(mkfifo)
209*3e14f97fSRoger A. FaulknerBINCMDLIST(mkfifo)
210*3e14f97fSRoger A. FaulknerGNUCMDLIST(mkfifo)
21134f9b3eeSRoland MainzASTCMDLIST(mktemp)
212*3e14f97fSRoger A. FaulknerBINCMDLIST(mktemp)
213*3e14f97fSRoger A. FaulknerGNUCMDLIST(mktemp)
2147c2fbfb3SApril ChinASTCMDLIST(mv)
215*3e14f97fSRoger A. Faulkner// XPG4CMDLIST(mv)
2167c2fbfb3SApril ChinASTCMDLIST(paste)
217*3e14f97fSRoger A. FaulknerBINCMDLIST(paste)
218*3e14f97fSRoger A. FaulknerGNUCMDLIST(paste)
2197c2fbfb3SApril ChinASTCMDLIST(pathchk)
220*3e14f97fSRoger A. FaulknerBINCMDLIST(pathchk)
221*3e14f97fSRoger A. FaulknerGNUCMDLIST(pathchk)
222*3e14f97fSRoger A. Faulkner// ASTCMDLIST(readlink)
2237c2fbfb3SApril ChinASTCMDLIST(rev)
224*3e14f97fSRoger A. FaulknerBINCMDLIST(rev)
2257c2fbfb3SApril ChinASTCMDLIST(rm)
226*3e14f97fSRoger A. FaulknerXPG4CMDLIST(rm)
2277c2fbfb3SApril ChinASTCMDLIST(rmdir)
228*3e14f97fSRoger A. FaulknerBINCMDLIST(rmdir)
229*3e14f97fSRoger A. FaulknerGNUCMDLIST(rmdir)
230*3e14f97fSRoger A. FaulknerGNUCMDLIST(sleep)
2317c2fbfb3SApril ChinASTCMDLIST(stty)
232*3e14f97fSRoger A. Faulkner// XPG4CMDLIST(stty)
2337c2fbfb3SApril ChinASTCMDLIST(sum)
234*3e14f97fSRoger A. FaulknerBINCMDLIST(sum)
2357c2fbfb3SApril ChinASTCMDLIST(sync)
236*3e14f97fSRoger A. FaulknerBINCMDLIST(sync)
237*3e14f97fSRoger A. FaulknerGNUCMDLIST(sync)
238*3e14f97fSRoger A. FaulknerSBINCMDLIST(sync)
239*3e14f97fSRoger A. FaulknerSUSRBINCMDLIST(sync)
240*3e14f97fSRoger A. FaulknerASTCMDLIST(tail)
24134f9b3eeSRoland MainzBINCMDLIST(tail)
2427c2fbfb3SApril ChinXPG4CMDLIST(tail)
2437c2fbfb3SApril ChinASTCMDLIST(tee)
244*3e14f97fSRoger A. FaulknerBINCMDLIST(tee)
245*3e14f97fSRoger A. FaulknerGNUCMDLIST(tee)
2467c2fbfb3SApril ChinASTCMDLIST(tty)
247*3e14f97fSRoger A. FaulknerBINCMDLIST(tty)
248*3e14f97fSRoger A. FaulknerGNUCMDLIST(tty)
2497c2fbfb3SApril ChinASTCMDLIST(uname)
2507c2fbfb3SApril ChinASTCMDLIST(uniq)
251*3e14f97fSRoger A. FaulknerBINCMDLIST(uniq)
252*3e14f97fSRoger A. FaulknerGNUCMDLIST(uniq)
2537c2fbfb3SApril ChinASTCMDLIST(wc)
254*3e14f97fSRoger A. FaulknerBINCMDLIST(wc)
255*3e14f97fSRoger A. FaulknerGNUCMDLIST(wc)
256*3e14f97fSRoger A. Faulkner// ASTCMDLIST(xgrep)
257*3e14f97fSRoger A. Faulkner// BINCMDLIST(xgrep)
2587c2fbfb3SApril Chin
2597c2fbfb3SApril Chin/* Mandatory for ksh93 test suite and AST scripts */
2607c2fbfb3SApril ChinBINCMDLIST(getconf)
2617c2fbfb3SApril Chin
2627c2fbfb3SApril Chin#ifdef	__cplusplus
2637c2fbfb3SApril Chin}
2647c2fbfb3SApril Chin#endif
2657c2fbfb3SApril Chin#endif /* !_SOLARIS_KSH_CMDLIST_H */
266*3e14f97fSRoger A. Faulkner
2677c2fbfb3SApril ChinENDOFTEXT
2687c2fbfb3SApril Chin}
2697c2fbfb3SApril Chin
2707c2fbfb3SApril Chinfunction build_shell
2717c2fbfb3SApril Chin{
2727c2fbfb3SApril Chin    set -o errexit
2737c2fbfb3SApril Chin    set -o xtrace
2747c2fbfb3SApril Chin
2757c2fbfb3SApril Chin    # OS.cputype.XXbit.compiler
2767c2fbfb3SApril Chin    case "${buildmode}" in
2777c2fbfb3SApril Chin        *.linux.*)
2787c2fbfb3SApril Chin            # ksh93+AST config flags
2797c2fbfb3SApril Chin            bast_flags="-DSHOPT_CMDLIB_BLTIN=0 -DSH_CMDLIB_DIR=\\\"/usr/ast/bin\\\" -DSHOPT_SYSRC -D_map_libc=1"
2807c2fbfb3SApril Chin
2817c2fbfb3SApril Chin            # gcc flags
2827c2fbfb3SApril Chin            bgcc99="gcc -std=gnu99 "
2837c2fbfb3SApril Chin            bgcc_ccflags="${bon_flags} ${bast_flags} -g"
2847c2fbfb3SApril Chin
2857c2fbfb3SApril Chin            case "${buildmode}" in
2867c2fbfb3SApril Chin                # Linux i386
2877c2fbfb3SApril Chin                *.i386.32bit.gcc*)  HOSTTYPE="linux.i386" CC="${bgcc99} -fPIC" cc_sharedlib="-shared" CCFLAGS="${bgcc_ccflags}"
2887c2fbfb3SApril Chin                    ;;
2897c2fbfb3SApril Chin                *)
2907c2fbfb3SApril Chin                    fatal_error "build_shell: Illegal Linux type/compiler build mode \"${buildmode}\"."
2917c2fbfb3SApril Chin                    ;;
2927c2fbfb3SApril Chin            esac
2937c2fbfb3SApril Chin            ;;
2947c2fbfb3SApril Chin        *.solaris.*)
2957c2fbfb3SApril Chin            # Notes:
2967c2fbfb3SApril Chin            # 1. Do not remove/modify these flags or their order before either
2977c2fbfb3SApril Chin            # asking the project leads at
2987c2fbfb3SApril Chin            # http://www.opensolaris.org/os/project/ksh93-integration/
2997c2fbfb3SApril Chin            # These flags all have a purpose, even if they look
3007c2fbfb3SApril Chin            # weird/redundant/etc. at the first look.
3017c2fbfb3SApril Chin            #
3027c2fbfb3SApril Chin            # 2. We use -KPIC here since -Kpic is too small on 64bit sparc and
3037c2fbfb3SApril Chin            # on 32bit it's close to the barrier so we use it for both 32bit and
3047c2fbfb3SApril Chin            # 64bit to avoid later suprises when people update libast in the
3057c2fbfb3SApril Chin            # future
3067c2fbfb3SApril Chin            #
3077c2fbfb3SApril Chin            # 3. "-D_map_libc=1" is needed to force map.c to add a "_ast_" prefix to all
3087c2fbfb3SApril Chin            # AST symbol names which may otherwise collide with Solaris/Linux libc
3097c2fbfb3SApril Chin            #
3107c2fbfb3SApril Chin            # 4. "-DSHOPT_SYSRC" enables /etc/ksh.kshrc support (AST default is currently
3117c2fbfb3SApril Chin            # to enable it if /etc/ksh.kshrc or /etc/bash.bashrc are available on the
3127c2fbfb3SApril Chin            # build machine).
3137c2fbfb3SApril Chin            #
3147c2fbfb3SApril Chin            # 5. -D_lib_socket=1 -lsocket -lnsl" was added to make sure ksh93 is compiled
3157c2fbfb3SApril Chin            # with networking support enabled, the current AST build infratructure has
3167c2fbfb3SApril Chin            # problems with detecting networking support in Solaris.
3177c2fbfb3SApril Chin            #
3187c2fbfb3SApril Chin            # 6. "-xc99=%all -D_XOPEN_SOURCE=600 -D__EXTENSIONS__=1" is used to force
3197c2fbfb3SApril Chin            # the compiler into C99 mode. Otherwise ksh93 will be much slower and lacks
3207c2fbfb3SApril Chin            # lots of arithmethic functions.
3217c2fbfb3SApril Chin            #
3227c2fbfb3SApril Chin            # 7. "-D_TS_ERRNO -D_REENTRANT" are flags taken from the default OS/Net
3237c2fbfb3SApril Chin            # build system.
3247c2fbfb3SApril Chin            #
3257c2fbfb3SApril Chin            # 8. "-xpagesize_stack=64K is used on SPARC to enhance the performace
3267c2fbfb3SApril Chin            #
3277c2fbfb3SApril Chin            # 9. -DSHOPT_CMDLIB_BLTIN=0 -DSH_CMDLIB_DIR=\\\"/usr/ast/bin\\\" -DSHOPT_CMDLIB_HDR=\\\"/home/test001/ksh93/ast_ksh_20070322/solaris_cmdlist.h\\\"
3287c2fbfb3SApril Chin            # is used to bind all ksh93 builtins to a "virtual" directory
3297c2fbfb3SApril Chin            # called "/usr/ast/bin/" and to adjust the list of builtins
3307c2fbfb3SApril Chin            # enabled by default to those defined by PSARC 2006/550
3317c2fbfb3SApril Chin
3327c2fbfb3SApril Chin            solaris_builtin_header="${PWD}/tmp_solaris_builtin_header.h"
3337c2fbfb3SApril Chin            print_solaris_builtin_header >"${solaris_builtin_header}"
3347c2fbfb3SApril Chin
3357c2fbfb3SApril Chin            # OS/Net build flags
3367c2fbfb3SApril Chin            bon_flags="-D_TS_ERRNO -D_REENTRANT"
3377c2fbfb3SApril Chin
3387c2fbfb3SApril Chin            # ksh93+AST config flags
3397c2fbfb3SApril Chin            bast_flags="-DSHOPT_CMDLIB_BLTIN=0 -DSH_CMDLIB_DIR=\\\"/usr/ast/bin\\\" -DSHOPT_CMDLIB_HDR=\\\"${solaris_builtin_header}\\\" -DSHOPT_SYSRC -D_map_libc=1"
3407c2fbfb3SApril Chin
3417c2fbfb3SApril Chin            # Sun Studio flags
3427c2fbfb3SApril Chin            bsunc99="/opt/SUNWspro/bin/cc -xc99=%all -D_XOPEN_SOURCE=600 -D__EXTENSIONS__=1"
3437c2fbfb3SApril Chin            bsuncc_app_ccflags_sparc="-xpagesize_stack=64K" # use bsuncc_app_ccflags_sparc only for final executables
3447c2fbfb3SApril Chin            bsuncc_ccflags="${bon_flags} -KPIC -g -xs -xspace -Xa -xstrconst -z combreloc -xildoff -xcsi -errtags=yes ${bast_flags} -D_lib_socket=1 -lsocket -lnsl"
3457c2fbfb3SApril Chin
3467c2fbfb3SApril Chin            # gcc flags
3477c2fbfb3SApril Chin            bgcc99="/usr/sfw/bin/gcc -std=gnu99 -D_XOPEN_SOURCE=600 -D__EXTENSIONS__=1"
34834f9b3eeSRoland Mainz            bgcc_warnflags="-Wall -Wextra -Wno-unknown-pragmas -Wno-missing-braces -Wno-sign-compare -Wno-parentheses -Wno-uninitialized -Wno-implicit-function-declaration -Wno-unused -Wno-trigraphs -Wno-char-subscripts -Wno-switch"
34934f9b3eeSRoland Mainz            bgcc_ccflags="${bon_flags} ${bgcc_warnflags} ${bast_flags} -D_lib_socket=1 -lsocket -lnsl"
3507c2fbfb3SApril Chin
3517c2fbfb3SApril Chin            case "${buildmode}" in
35234f9b3eeSRoland Mainz	        # for -m32/-m64 flags see usr/src/Makefile.master, makefile symbols *_XARCH/co.
35334f9b3eeSRoland Mainz                *.i386.32bit.suncc*)  HOSTTYPE="sol11.i386" CC="${bsunc99} -m32"                  cc_sharedlib="-G" CCFLAGS="${bsuncc_ccflags}"  ;;
35434f9b3eeSRoland Mainz                *.i386.64bit.suncc*)  HOSTTYPE="sol11.i386" CC="${bsunc99} -m64 -KPIC"            cc_sharedlib="-G" CCFLAGS="${bsuncc_ccflags}"  ;;
35534f9b3eeSRoland Mainz                *.sparc.32bit.suncc*) HOSTTYPE="sol11.sun4" CC="${bsunc99} -m32"                  cc_sharedlib="-G" CCFLAGS="${bsuncc_ccflags}" bsuncc_app_ccflags="${bsuncc_app_ccflags_sparc}" ;;
35634f9b3eeSRoland Mainz                *.sparc.64bit.suncc*) HOSTTYPE="sol11.sun4" CC="${bsunc99} -m64 -dalign -KPIC"    cc_sharedlib="-G" CCFLAGS="${bsuncc_ccflags}" bsuncc_app_ccflags="${bsuncc_app_ccflags_sparc}" ;;
3577c2fbfb3SApril Chin
3587c2fbfb3SApril Chin                *.i386.32bit.gcc*)  HOSTTYPE="sol11.i386" CC="${bgcc99} -fPIC"                                            cc_sharedlib="-shared" CCFLAGS="${bgcc_ccflags}"  ;;
3597c2fbfb3SApril Chin                *.i386.64bit.gcc*)  HOSTTYPE="sol11.i386" CC="${bgcc99} -m64 -mtune=opteron -Ui386 -U__i386 -fPIC"        cc_sharedlib="-shared" CCFLAGS="${bgcc_ccflags}"  ;;
3607c2fbfb3SApril Chin                *.sparc.32bit.gcc*) HOSTTYPE="sol11.sun4" CC="${bgcc99} -m32 -mcpu=v8 -fPIC"                              cc_sharedlib="-shared" CCFLAGS="${bgcc_ccflags}"  ;;
3617c2fbfb3SApril Chin                *.sparc.64bit.gcc*) HOSTTYPE="sol11.sun4" CC="${bgcc99} -m64 -mcpu=v9 -fPIC"                              cc_sharedlib="-shared" CCFLAGS="${bgcc_ccflags}"  ;;
3627c2fbfb3SApril Chin                *.s390.32bit.gcc*)  HOSTTYPE="sol11.s390" CC="${bgcc99} -m32          -fPIC"				  cc_sharedlib="-shared" CCFLAGS="${bgcc_ccflags}"  ;;
3637c2fbfb3SApril Chin                *.s390.64bit.gcc*)  HOSTTYPE="sol11.s390" CC="${bgcc99} -m64          -fPIC"				  cc_sharedlib="-shared" CCFLAGS="${bgcc_ccflags}"  ;;
3647c2fbfb3SApril Chin
3657c2fbfb3SApril Chin                *)
3667c2fbfb3SApril Chin                    fatal_error "build_shell: Illegal Solaris type/compiler build mode \"${buildmode}\"."
3677c2fbfb3SApril Chin                    ;;
3687c2fbfb3SApril Chin            esac
3697c2fbfb3SApril Chin            ;;
3707c2fbfb3SApril Chin        *)
3717c2fbfb3SApril Chin            fatal_error "Illegal OS build mode \"${buildmode}\"."
3727c2fbfb3SApril Chin            ;;
3737c2fbfb3SApril Chin    esac
3747c2fbfb3SApril Chin
3757c2fbfb3SApril Chin    # some prechecks
3767c2fbfb3SApril Chin    [[ -z "${CCFLAGS}"  ]] && fatal_error "build_shell: CCFLAGS is empty."
3777c2fbfb3SApril Chin    [[ -z "${CC}"       ]] && fatal_error "build_shell: CC is empty."
3787c2fbfb3SApril Chin    [[ -z "${HOSTTYPE}" ]] && fatal_error "build_shell: HOSTTYPE is empty."
3797c2fbfb3SApril Chin    [[ ! -f "bin/package" ]] && fatal_error "build_shell: bin/package missing."
3807c2fbfb3SApril Chin    [[ ! -x "bin/package" ]] && fatal_error "build_shell: bin/package not executable."
3817c2fbfb3SApril Chin
3827c2fbfb3SApril Chin    export CCFLAGS CC HOSTTYPE
3837c2fbfb3SApril Chin
3847c2fbfb3SApril Chin    # build ksh93
3857c2fbfb3SApril Chin    bin/package make CCFLAGS="${CCFLAGS}" CC="${CC}" HOSTTYPE="${HOSTTYPE}"
3867c2fbfb3SApril Chin
3877c2fbfb3SApril Chin    root="${PWD}/arch/${HOSTTYPE}"
3887c2fbfb3SApril Chin    [[ -d "$root" ]] || fatal_error "build_shell: directory ${root} not found."
3897c2fbfb3SApril Chin    log="${root}/lib/package/gen/make.out"
3907c2fbfb3SApril Chin
3917c2fbfb3SApril Chin    [[ -s $log ]] || fatal_error "build_shell: no make.out log found."
3927c2fbfb3SApril Chin
39334f9b3eeSRoland Mainz    if [[ -f ${root}/lib/libast-g.a   ]] then link_libast="ast-g"     ; else link_libast="ast"     ; fi
39434f9b3eeSRoland Mainz    if [[ -f ${root}/lib/libdll-g.a   ]] then link_libdll="dll-g"     ; else link_libdll="dll"     ; fi
39534f9b3eeSRoland Mainz    if [[ -f ${root}/lib/libsum-g.a   ]] then link_libsum="sum-g"     ; else link_libsum="sum"     ; fi
39634f9b3eeSRoland Mainz    if [[ -f ${root}/lib/libcmd-g.a   ]] then link_libcmd="cmd-g"     ; else link_libcmd="cmd"     ; fi
39734f9b3eeSRoland Mainz    if [[ -f ${root}/lib/libshell-g.a ]] then link_libshell="shell-g" ; else link_libshell="shell" ; fi
39834f9b3eeSRoland Mainz
3997c2fbfb3SApril Chin    if [[ "${buildmode}" != *.staticshell* ]] ; then
4007c2fbfb3SApril Chin        # libcmd causes some trouble since there is a squatter in solaris
4017c2fbfb3SApril Chin        # This has been fixed in Solaris 11/B48 but may require adjustments
4027c2fbfb3SApril Chin        # for older Solaris releases
4037c2fbfb3SApril Chin        for lib in libast libdll libsum libcmd libshell ; do
4047c2fbfb3SApril Chin            case "$lib" in
4057c2fbfb3SApril Chin            libshell)
40634f9b3eeSRoland Mainz                base="src/cmd/ksh93/"
4077c2fbfb3SApril Chin                vers=1
40834f9b3eeSRoland Mainz                link="-L${root}/lib/ -l${link_libcmd} -l${link_libsum} -l${link_libdll} -l${link_libast} -lm"
4097c2fbfb3SApril Chin                ;;
4107c2fbfb3SApril Chin            libdll)
4117c2fbfb3SApril Chin                base="src/lib/${lib}"
4127c2fbfb3SApril Chin                vers=1
4137c2fbfb3SApril Chin                link="-ldl"
4147c2fbfb3SApril Chin                ;;
4157c2fbfb3SApril Chin            libast)
4167c2fbfb3SApril Chin                base="src/lib/${lib}"
4177c2fbfb3SApril Chin                vers=1
4187c2fbfb3SApril Chin                link="-lm"
4197c2fbfb3SApril Chin                ;;
4207c2fbfb3SApril Chin            *)
4217c2fbfb3SApril Chin                base="src/lib/${lib}"
4227c2fbfb3SApril Chin                vers=1
42334f9b3eeSRoland Mainz                link="-L${root}/lib/ -l${link_libast} -lm"
4247c2fbfb3SApril Chin                ;;
4257c2fbfb3SApril Chin            esac
4267c2fbfb3SApril Chin
4277c2fbfb3SApril Chin            (
4287c2fbfb3SApril Chin            cd "${root}/${base}"
42934f9b3eeSRoland Mainz
43034f9b3eeSRoland Mainz	    if [[ -f ${lib}-g.a ]] ; then lib_a="${lib}-g.a" ; else lib_a="${lib}.a" ; fi
43134f9b3eeSRoland Mainz
4327c2fbfb3SApril Chin            if [[ "${buildmode}" == *solaris* ]] ; then
43334f9b3eeSRoland Mainz                ${CC} ${cc_sharedlib} ${CCFLAGS} -Bdirect -Wl,-zallextract -Wl,-zmuldefs -o "${root}/lib/${lib}.so.${vers}" "${lib_a}"  $link
4347c2fbfb3SApril Chin            else
43534f9b3eeSRoland Mainz                ${CC} ${cc_sharedlib} ${CCFLAGS} -Wl,--whole-archive -Wl,-zmuldefs "${lib_a}" -Wl,--no-whole-archive -o "${root}/lib/${lib}.so.${vers}" $link
4367c2fbfb3SApril Chin            fi
4377c2fbfb3SApril Chin
4387c2fbfb3SApril Chin            #rm ${lib}.a
43934f9b3eeSRoland Mainz            mv "${lib_a}" "disabled_${lib_a}_"
4407c2fbfb3SApril Chin
4417c2fbfb3SApril Chin            cd "${root}/lib"
4427c2fbfb3SApril Chin            ln -sf "${lib}.so.${vers}" "${lib}.so"
4437c2fbfb3SApril Chin            )
4447c2fbfb3SApril Chin        done
4457c2fbfb3SApril Chin
4467c2fbfb3SApril Chin        (
4477c2fbfb3SApril Chin          base=src/cmd/ksh93
4487c2fbfb3SApril Chin          cd "${root}/${base}"
4497c2fbfb3SApril Chin          rm -f \
45034f9b3eeSRoland Mainz	      "${root}/lib/libshell.a" "${root}/lib/libshell-g.a" \
45134f9b3eeSRoland Mainz              "${root}/lib/libsum.a" "${root}/lib/libsum-g.a" \
45234f9b3eeSRoland Mainz              "${root}/lib/libdll.a" "${root}/lib/libdll-g.a" \
45334f9b3eeSRoland Mainz              "${root}/lib/libast.a" "${root}/lib/libast-g.a"
4547c2fbfb3SApril Chin
4557c2fbfb3SApril Chin          if [[ "${buildmode}" == *solaris* ]] ; then
45634f9b3eeSRoland Mainz              ${CC} ${CCFLAGS} ${bsuncc_app_ccflags} -L${root}/lib/ -Bdirect -o ksh pmain.o -lshell -Bstatic -l${link_libcmd} -Bdynamic -lsum -ldll -last -lm -lmd -lsecdb
4577c2fbfb3SApril Chin          else
4587c2fbfb3SApril Chin              ${CC} ${CCFLAGS} ${bsuncc_app_ccflags} -L${root}/lib/ -o ksh pmain.o -lshell -lcmd -lsum -ldll -last -lm
4597c2fbfb3SApril Chin          fi
4607c2fbfb3SApril Chin
4617c2fbfb3SApril Chin	  file ksh
4627c2fbfb3SApril Chin	  file shcomp
4637c2fbfb3SApril Chin
4647c2fbfb3SApril Chin	  export LD_LIBRARY_PATH="${root}/lib:${LD_LIBRARY_PATH}"
4657c2fbfb3SApril Chin	  export LD_LIBRARY_PATH_32="${root}/lib:${LD_LIBRARY_PATH_32}"
4667c2fbfb3SApril Chin	  export LD_LIBRARY_PATH_64="${root}/lib:${LD_LIBRARY_PATH_64}"
4677c2fbfb3SApril Chin	  ldd ksh
4687c2fbfb3SApril Chin        )
4697c2fbfb3SApril Chin    fi
4707c2fbfb3SApril Chin}
4717c2fbfb3SApril Chin
4727c2fbfb3SApril Chinfunction test_builtin_getconf
4737c2fbfb3SApril Chin{
4747c2fbfb3SApril Chin(
4757c2fbfb3SApril Chin    print "# testing getconf builtin..."
4767c2fbfb3SApril Chin    set +o errexit
4777c2fbfb3SApril Chin    export PATH=/bin:/usr/bin
4787c2fbfb3SApril Chin    for lang in ${TEST_LANG} ; do
4797c2fbfb3SApril Chin        (
4807c2fbfb3SApril Chin	    printf "## testing LANG=%s\n" "${lang}"
4817c2fbfb3SApril Chin            export LC_ALL="${lang}" LANG="${lang}"
4827c2fbfb3SApril Chin            ${SHELL} -c '/usr/bin/getconf -a |
4837c2fbfb3SApril Chin                         while read i ; do
4847c2fbfb3SApril Chin                         t="${i%:*}" ; a="$(getconf "$t" 2>/dev/null)" ;
4857c2fbfb3SApril Chin                         b="$(/usr/bin/getconf "$t" 2>/dev/null)" ; [ "$a" != "$b" ] && print "# |$t|:|$a| != |$b|" ;
4867c2fbfb3SApril Chin                         done'
4877c2fbfb3SApril Chin        )
4887c2fbfb3SApril Chin    done
4897c2fbfb3SApril Chin    print "# testing getconf done."
4907c2fbfb3SApril Chin)
4917c2fbfb3SApril Chin}
4927c2fbfb3SApril Chin
4937c2fbfb3SApril Chinfunction test_shell
4947c2fbfb3SApril Chin{
4957c2fbfb3SApril Chin    set -o errexit
4967c2fbfb3SApril Chin    set -o xtrace
4977c2fbfb3SApril Chin
49834f9b3eeSRoland Mainz    ulimit -s 65536 # need larger stack on 64bit SPARC to pass all tests
49934f9b3eeSRoland Mainz
5007c2fbfb3SApril Chin    export SHELL="$(ls -1 $PWD/arch/*/src/cmd/ksh93/ksh)"
5017c2fbfb3SApril Chin    export LD_LIBRARY_PATH="$(ls -1ad $PWD/arch/*/lib):${LD_LIBRARY_PATH}"
5027c2fbfb3SApril Chin    export LD_LIBRARY_PATH_32="$(ls -1ad $PWD/arch/*/lib):${LD_LIBRARY_PATH_32}"
5037c2fbfb3SApril Chin    export LD_LIBRARY_PATH_64="$(ls -1ad $PWD/arch/*/lib):${LD_LIBRARY_PATH_64}"
5047c2fbfb3SApril Chin    printf "## SHELL is |%s|\n" "${SHELL}"
5057c2fbfb3SApril Chin    printf "## LD_LIBRARY_PATH is |%s|\n" "${LD_LIBRARY_PATH}"
5067c2fbfb3SApril Chin
5077c2fbfb3SApril Chin    [[ ! -f "${SHELL}" ]] && fatal_error "test_shell: |${SHELL}| is not a file."
5087c2fbfb3SApril Chin    [[ ! -x "${SHELL}" ]] && fatal_error "test_shell: |${SHELL}| is not executable."
5097c2fbfb3SApril Chin
510*3e14f97fSRoger A. Faulkner    [[ "${TEST_LANG}" == "" ]] && TEST_LANG="C zh_CN.GB18030 en_US.UTF-8"
5117c2fbfb3SApril Chin
5127c2fbfb3SApril Chin    case "${buildmode}" in
5137c2fbfb3SApril Chin            testshell.bcheck*)
5147c2fbfb3SApril Chin                for lang in ${TEST_LANG} ; do
5157c2fbfb3SApril Chin                    (
5167c2fbfb3SApril Chin                        export LC_ALL="${lang}" LANG="${lang}"
5177c2fbfb3SApril Chin                        for i in ./src/cmd/ksh93/tests/*.sh ; do
5187c2fbfb3SApril Chin                            bc_logfile="$(basename "$i").$$.bcheck"
5197c2fbfb3SApril Chin                            rm -f "${bc_logfile}"
5207c2fbfb3SApril Chin                            /opt/SUNWspro/bin/bcheck -q -access -o "${bc_logfile}" ${SHELL} ./src/cmd/ksh93/tests/shtests \
5217c2fbfb3SApril Chin                                LD_LIBRARY_PATH_64="$LD_LIBRARY_PATH_64" \
5227c2fbfb3SApril Chin                                LD_LIBRARY_PATH="$LD_LIBRARY_PATH" \
5237c2fbfb3SApril Chin                                LD_LIBRARY_PATH_32="$LD_LIBRARY_PATH_32"\
5247c2fbfb3SApril Chin                                LC_ALL="${lang}" LANG="${lang}" \
525*3e14f97fSRoger A. Faulkner                                VMALLOC_OPTIONS=abort \
5267c2fbfb3SApril Chin                                "$i"
5277c2fbfb3SApril Chin                            cat "${bc_logfile}"
5287c2fbfb3SApril Chin                        done
5297c2fbfb3SApril Chin                    )
5307c2fbfb3SApril Chin                done
5317c2fbfb3SApril Chin                ;;
5327c2fbfb3SApril Chin            testshell.builtin.getconf)
5337c2fbfb3SApril Chin                test_builtin_getconf
5347c2fbfb3SApril Chin                ;;
5357c2fbfb3SApril Chin            testshell)
5367c2fbfb3SApril Chin                for lang in ${TEST_LANG} ; do
5377c2fbfb3SApril Chin                    (
5387c2fbfb3SApril Chin                        export LC_ALL="${lang}" LANG="${lang}"
5397c2fbfb3SApril Chin                        for i in ./src/cmd/ksh93/tests/*.sh ; do
5407c2fbfb3SApril Chin                            ${SHELL} ./src/cmd/ksh93/tests/shtests -a \
5417c2fbfb3SApril Chin                                LD_LIBRARY_PATH_64="$LD_LIBRARY_PATH_64" \
5427c2fbfb3SApril Chin                                LD_LIBRARY_PATH="$LD_LIBRARY_PATH" \
5437c2fbfb3SApril Chin                                LD_LIBRARY_PATH_32="$LD_LIBRARY_PATH_32" \
5447c2fbfb3SApril Chin                                LC_ALL="${lang}" LANG="${lang}" \
545*3e14f97fSRoger A. Faulkner                                VMALLOC_OPTIONS=abort \
5467c2fbfb3SApril Chin				SHCOMP=$PWD/arch/*/bin/shcomp \
5477c2fbfb3SApril Chin                                "$i"
5487c2fbfb3SApril Chin                        done
5497c2fbfb3SApril Chin                    )
5507c2fbfb3SApril Chin                done
5517c2fbfb3SApril Chin                test_builtin_getconf
5527c2fbfb3SApril Chin                ;;
5537c2fbfb3SApril Chin    esac
5547c2fbfb3SApril Chin}
5557c2fbfb3SApril Chin
5567c2fbfb3SApril Chin# main
5577c2fbfb3SApril Chincase "${buildmode}" in
5587c2fbfb3SApril Chin        build.*) build_shell ;;
5597c2fbfb3SApril Chin        testshell*)  test_shell  ;;
5607c2fbfb3SApril Chin        *) fatal_error "Illegal build mode \"${buildmode}\"." ;;
5617c2fbfb3SApril Chinesac
5627c2fbfb3SApril Chin# EOF.
563