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