1b30d1939SAndy Fiddaman/* 2b30d1939SAndy Fiddaman * ksh makefile 3b30d1939SAndy Fiddaman */ 4b30d1939SAndy Fiddaman 5b30d1939SAndy FiddamanSH := $(PWD:B:/[0-9]*$//:N=ksh*:-ksh) /* name of the shell program */ 6b30d1939SAndy FiddamanVERSION = 1.1 7b30d1939SAndy FiddamanLICENSE = since=1982,author=dgk 8b30d1939SAndy FiddamanCATALOG = libshell 9b30d1939SAndy FiddamanERROR_CONTEXT_T == Error_context_t /* workaround until switch from errorpush()/errorpop() => errorctx() */ 10b30d1939SAndy FiddamanRELEASE := $(SH:/.*sh//) 11b30d1939SAndy FiddamanSHCOMP := shcomp$(RELEASE) 12b30d1939SAndy Fiddaman 13b30d1939SAndy Fiddaman/* 14b30d1939SAndy Fiddaman * set these variables to 1 to enable, 0 to disable, null to probe 15b30d1939SAndy Fiddaman * override SHOPT_foo=1 can be placed one per line in the build dir Makeargs 16b30d1939SAndy Fiddaman */ 17b30d1939SAndy Fiddaman 18b30d1939SAndy FiddamanSHOPT_2DMATCH == 1 /* two dimensional .sh.match for ${var//pat/str} */ 19b30d1939SAndy FiddamanSHOPT_ACCT == /* accounting */ 20b30d1939SAndy FiddamanSHOPT_ACCTFILE == /* per user accounting info */ 21b30d1939SAndy FiddamanSHOPT_AUDIT == 1 /* enable auditing per SHOPT_AUDITFILE */ 22b30d1939SAndy FiddamanSHOPT_AUDITFILE == "/etc/ksh_audit" /* auditing file */ 23b30d1939SAndy FiddamanSHOPT_BASH == /* bash compatibility code */ 24b30d1939SAndy FiddamanSHOPT_BGX == 1 /* one SIGCHLD trap per completed job */ 25b30d1939SAndy FiddamanSHOPT_BRACEPAT == 1 /* C-shell {...,...} expansions (, required) */ 26b30d1939SAndy FiddamanSHOPT_CMDLIB_HDR == /* -lcmd builtin list (<cmdlist.h>) */ 27b30d1939SAndy FiddamanSHOPT_CMDLIB_DIR == /* SHOPT_CMDLIB_HDR directory prefix (default "/opt/ast/bin") */ 28b30d1939SAndy FiddamanSHOPT_COSHELL == 1 /* build with connection to coshell */ 29b30d1939SAndy FiddamanSHOPT_CRNL == /* accept <cr><nl> for <nl> */ 30b30d1939SAndy FiddamanSHOPT_DYNAMIC == 1 /* dynamic loading for builtins */ 31b30d1939SAndy FiddamanSHOPT_ECHOPRINT == /* make echo equivalent to print */ 32b30d1939SAndy FiddamanSHOPT_EDPREDICT == 1 /* predictive editing */ 33b30d1939SAndy FiddamanSHOPT_ESH == 1 /* emacs/gmacs edit mode */ 34b30d1939SAndy FiddamanSHOPT_FILESCAN == 1 /* fast file scan */ 35b30d1939SAndy FiddamanSHOPT_FIXEDARRAY == 1 /* fixed dimension indexed array */ 36b30d1939SAndy FiddamanSHOPT_FS_3D == /* 3d file system */ 37b30d1939SAndy FiddamanSHOPT_HISTEXPAND == 1 /* csh-style history file expansions */ 38b30d1939SAndy FiddamanSHOPT_KIA == 1 /* shell information database generation */ 39b30d1939SAndy FiddamanSHOPT_MULTIBYTE == 1 /* multibyte character handling */ 40b30d1939SAndy FiddamanSHOPT_NAMESPACE == 1 /* allow namespaces */ 41b30d1939SAndy FiddamanSHOPT_OLDTERMIO == /* support both TCGETA and TCGETS */ 42b30d1939SAndy FiddamanSHOPT_OPTIMIZE == 1 /* optimize loop invariants */ 43*bbf21555SRichard LoweSHOPT_PFSH == 1 /* solaris exec_attr(5) profile execution */ 44b30d1939SAndy FiddamanSHOPT_P_SUID == /* real uid's that require -p for set[ug]id */ 45b30d1939SAndy FiddamanSHOPT_RAWONLY == 1 /* make viraw the only vi mode */ 46b30d1939SAndy FiddamanSHOPT_REGRESS == /* enable __regress__ builtin and instrumented intercepts for testing */ 47b30d1939SAndy FiddamanSHOPT_REMOTE == /* enable --rc if running as a remote shell */ 48b30d1939SAndy FiddamanSHOPT_SEVENBIT == /* strip the eigth bit from characters */ 49b30d1939SAndy FiddamanSHOPT_SPAWN == /* use spawnveg for fork/exec */ 50b30d1939SAndy FiddamanSHOPT_STATS == 1 /* add .sh.stats variable */ 51b30d1939SAndy FiddamanSHOPT_SUID_EXEC == 1 /* allow (safe) suid/sgid shell scripts */ 52b30d1939SAndy FiddamanSHOPT_SYSRC == /* attempt . /etc/ksh.kshrc if interactive */ 53b30d1939SAndy FiddamanSHOPT_TIMEOUT == /* number of seconds for shell timeout */ 54b30d1939SAndy FiddamanSHOPT_TYPEDEF == 1 /* enable typeset type definitions */ 55b30d1939SAndy FiddamanSHOPT_VSH == 1 /* vi edit mode */ 56b30d1939SAndy Fiddaman 57b30d1939SAndy Fiddamanif CC.HOSTTYPE == "linux.alpha" 58b30d1939SAndy Fiddaman /* workaround for "BUG IN DYNAMIC LINKER ld.so" */ 59b30d1939SAndy Fiddaman :PACKAGE: - m:static:noinclude /*noCC.EXPORT.DYNAMIC*/ 60b30d1939SAndy Fiddamanend 61b30d1939SAndy Fiddaman 62b30d1939SAndy Fiddamanif CC.HOSTTYPE == "*.s390-64" 63b30d1939SAndy Fiddaman CC.DLL = $(CC.DLLBIG) 64b30d1939SAndy Fiddamanend 65b30d1939SAndy Fiddaman 66b30d1939SAndy Fiddamanif SHOPT_DYNAMIC && ( "$(CC.DIALECT:N=EXPORT=DLL)" || "$(PACKAGE_OPTIONS:N=optimize-space)" ) 67b30d1939SAndy Fiddaman if "$(PACKAGE_OPTIONS:N=optimize-space)" && ! SHOPT_CMDLIB_HDR 68b30d1939SAndy Fiddaman SHOPT_CMDLIB_HDR == <cmdlist.h> 69b30d1939SAndy Fiddaman end 70b30d1939SAndy Fiddaman CCFLAGS += $$(CC.DLL) $$(CC.SUFFIX.DEBUG:+$$(CC.DEBUG)) 71b30d1939SAndy Fiddaman LIBS_req = -lshell$(RELEASE) 72b30d1939SAndy Fiddamanelse 73b30d1939SAndy Fiddaman if VARIANT 74b30d1939SAndy Fiddaman SHOPT_DYNAMIC = 1 75b30d1939SAndy Fiddaman else 76b30d1939SAndy Fiddaman libtype = :static 77b30d1939SAndy Fiddaman end 78b30d1939SAndy Fiddaman if SHOPT_DYNAMIC 79b30d1939SAndy Fiddaman CCLDFLAGS += $$(CC.EXPORT.DYNAMIC) 80b30d1939SAndy Fiddaman end 81b30d1939SAndy Fiddaman LIBS_req = +lshell$(RELEASE) 82b30d1939SAndy Fiddamanend 83b30d1939SAndy Fiddaman 84b30d1939SAndy Fiddaman:PACKAGE: ast$(libtype):20100309 coshell:order --clobber=!($(SH)) 85b30d1939SAndy Fiddaman 86b30d1939SAndy Fiddaman.SOURCE : edit sh bltins data tests fun 87b30d1939SAndy Fiddaman.SOURCE.h : include 88b30d1939SAndy Fiddaman 89b30d1939SAndy Fiddaman/* documentation files */ 90b30d1939SAndy FiddamanDOCFILES = sh.memo builtins.mm README RELEASE TYPES PROMO.mm COMPATIBILITY \ 91b30d1939SAndy Fiddaman DESIGN OBSOLETE RELEASE93 RELEASE88 92b30d1939SAndy Fiddaman 93b30d1939SAndy FiddamanKSHELL == 1 /* this is ksh */ 94b30d1939SAndy Fiddaman 95b30d1939SAndy FiddamanSH_CMDLIB_DIR == /* SHOPT_CMDLIB_DIR dir prefix */ 96b30d1939SAndy FiddamanSH_DICT == /* message catalog */ 97b30d1939SAndy FiddamanDEBUG == /* debugging purposes only */ 98b30d1939SAndy Fiddaman 99b30d1939SAndy Fiddamanif CC.HOSTTYPE == "win32*" 100b30d1939SAndy Fiddaman SHOPT_CRNL == 1 /* <cr><nl> is eqivalent to <nl> */ 101b30d1939SAndy Fiddamanend 102b30d1939SAndy Fiddaman 103b30d1939SAndy Fiddamanif SHOPT_BASH 104b30d1939SAndy Fiddaman BASH_HOSTTYPE == "$(CC.HOSTTYPE:S:/\.//)" 105b30d1939SAndy Fiddaman BASH_MACHTYPE == "$(BASH_HOSTTYPE)-unknown-$(CC.HOSTTYPE:B)" 106b30d1939SAndy Fiddamanend 107b30d1939SAndy Fiddaman 108b30d1939SAndy Fiddaman/* use the following libraries only if they exist */ 109b30d1939SAndy FiddamanLIBS_opt := +ljobs +li 110b30d1939SAndy Fiddaman 111b30d1939SAndy Fiddamanif CC.HOSTTYPE == "sol([89]|[1-9][0-9]).*" 112b30d1939SAndy Fiddaman LDFLAGS += $(CC.LD.LAZY) $(CC.LD.NORECORD) 113b30d1939SAndy Fiddamanend 114b30d1939SAndy Fiddaman 115b30d1939SAndy Fiddamanif "$(-mam:N=static*)" 116b30d1939SAndy Fiddaman LIBS_opt += -lsocket -lnsl 117b30d1939SAndy Fiddamanelif CC.HOSTTYPE == "sol?([789]|[1-9][0-9]).*" 118b30d1939SAndy Fiddaman LIBS_opt += +lsocket -lnsl 119b30d1939SAndy Fiddamanelif CC.HOSTTYPE != "sgi.mips*" 120b30d1939SAndy Fiddaman LIBS_opt += +lsocket +lnsl 121b30d1939SAndy Fiddamanend 122b30d1939SAndy Fiddamanif CC.HOSTTYPE == "linux.sparc*" 123b30d1939SAndy Fiddaman /* the linux.sparc linker still has some problems */ 124b30d1939SAndy Fiddaman LIBS_opt += -ldll 125b30d1939SAndy Fiddamanend 126b30d1939SAndy FiddamanLIBS_opt += -lsecdb 127b30d1939SAndy Fiddamanif CC.HOSTTYPE == "sol.*" 128b30d1939SAndy Fiddaman LIBS_opt += -lw 129b30d1939SAndy Fiddamanend 130b30d1939SAndy Fiddaman$(LIBS_opt) : .DONTCARE 131b30d1939SAndy Fiddaman 132b30d1939SAndy FiddamanLDLIBRARIES = $(LIBS_opt) 133b30d1939SAndy Fiddaman 134b30d1939SAndy FiddamanFILES_opt = /* optional file list enabled by vars above */ 135b30d1939SAndy Fiddamanif SHOPT_ESH 136b30d1939SAndy Fiddaman FILES_opt += emacs.c 137b30d1939SAndy Fiddamanend 138b30d1939SAndy Fiddamanif SHOPT_VSH 139b30d1939SAndy Fiddaman FILES_opt += vi.c 140b30d1939SAndy Fiddamanend 141b30d1939SAndy Fiddamanif SHOPT_BASH 142b30d1939SAndy Fiddaman FILES_opt += bash.c bash_pre_rc.c 143b30d1939SAndy Fiddaman SHOPT_HISTEXPAND == 1 144b30d1939SAndy Fiddamanend 145b30d1939SAndy Fiddamanif SHOPT_HISTEXPAND 146b30d1939SAndy Fiddaman FILES_opt += hexpand.c 147b30d1939SAndy Fiddamanend 148b30d1939SAndy Fiddamanif SHOPT_DYNAMIC 149b30d1939SAndy Fiddaman FILES_opt += -ldll 150b30d1939SAndy Fiddamanend 151b30d1939SAndy Fiddamanif SHOPT_X 152b30d1939SAndy Fiddaman LDFLAGS += -u _XtAppInitialize -L/usr/add-on/X11/lib 153b30d1939SAndy Fiddamanend 154b30d1939SAndy Fiddaman 155b30d1939SAndy Fiddaman:ALL: $(SH) $(SHCOMP) $(SHOPT_SUID_EXEC:+suid_exec) $(SHOPT_BASH:+bash$(RELEASE)) 156b30d1939SAndy Fiddaman 157b30d1939SAndy Fiddaman$(SH) :: sh.1 pmain.c $(LIBS_req) 158b30d1939SAndy Fiddaman 159b30d1939SAndy FiddamanDATAFILES = limits.c msg.c strdata.c testops.c keywords.c options.c \ 160b30d1939SAndy Fiddaman signals.c aliases.c builtins.c variables.c lexstates.c 161b30d1939SAndy Fiddaman 162b30d1939SAndy Fiddamanshell$(RELEASE) $(VERSION) id=shell :LIBRARY: shell.3 nval.3 alarm.c cd_pwd.c cflow.c deparse.c \ 163b30d1939SAndy Fiddaman enum.c getopts.c hist.c misc.c print.c read.c sleep.c trap.c test.c \ 164b30d1939SAndy Fiddaman typeset.c ulimit.c umask.c whence.c main.c nvdisc.c nvtype.c \ 165b30d1939SAndy Fiddaman arith.c args.c array.c completion.c defs.c edit.c expand.c regress.c \ 166b30d1939SAndy Fiddaman fault.c fcin.c history.c init.c io.c jobs.c lex.c macro.c name.c \ 167b30d1939SAndy Fiddaman nvtree.c parse.c path.c string.c streval.c subshell.c tdump.c timers.c \ 168b30d1939SAndy Fiddaman trestore.c waitevent.c xec.c env.c $(DATAFILES) $(FILES_opt) \ 169b30d1939SAndy Fiddaman $(SHOPT_COSHELL:+-lcoshell) -lcmd -last -lm 170b30d1939SAndy Fiddaman 171b30d1939SAndy Fiddaman"sol*.i386*" :NOOPTIMIZE: main.c 172b30d1939SAndy Fiddaman"win32*" :NOOPTIMIZE: strdata.c trestore.c 173b30d1939SAndy Fiddaman 174b30d1939SAndy Fiddamanif CC.HOSTTYPE == "win32*" 175b30d1939SAndy Fiddaman:DLL: $(CC.DEBUG) 176b30d1939SAndy Fiddamanelse 177b30d1939SAndy Fiddaman:DLL: $(CC.OPTIMIZE) 178b30d1939SAndy Fiddamanend 179b30d1939SAndy Fiddaman 180b30d1939SAndy Fiddaman:READONLY: $(DATAFILES) 181b30d1939SAndy Fiddaman 182b30d1939SAndy Fiddaman$(INCLUDEDIR) :INSTALLPROTO: nval.h shell.h history.h 183b30d1939SAndy Fiddaman 184b30d1939SAndy FiddamanLIBCMD = $(.LIB.NAME. cmd:T=F) 185b30d1939SAndy Fiddaman 186b30d1939SAndy Fiddamanif SHOPT_SUID_EXEC && ! "$(RELEASE)" 187b30d1939SAndy Fiddamansuid_exec :: CC.DLL= suid_exec.c +last 188b30d1939SAndy Fiddamanend 189b30d1939SAndy Fiddaman 190b30d1939SAndy Fiddaman$(SHCOMP) :: CC.DLL= SH_DICT='"libshell"' shcomp.c $(LIBS_req) 191b30d1939SAndy Fiddaman 192b30d1939SAndy Fiddaman$(FUNDIR) :INSTALLDIR: mode=+x dirs popd pushd 193b30d1939SAndy Fiddaman 194b30d1939SAndy Fiddamanshcomp.o : _BLD_DLL= $(CC.HOSTTYPE:N=cygwin.*:??_BLD_shell=?) 195b30d1939SAndy Fiddaman 196b30d1939SAndy Fiddamanif SHOPT_BASH 197b30d1939SAndy Fiddaman 198b30d1939SAndy Fiddamanbash$(RELEASE) :LINK: $(SH) 199b30d1939SAndy Fiddaman 200b30d1939SAndy Fiddamanbash_pre_rc.c : bash_pre_rc.sh 201b30d1939SAndy Fiddaman echo "const char bash_pre_rc[] = " > $(<) 202b30d1939SAndy Fiddaman sed -e 's/\\/\\\\/g' -e 's/"/\\"/g' -e 's/'"'"'/\\'"'"'/g' -e 's/^[[:space:]]*\(.*\)$/\"\1\\n\"/' $(*) >> $(<) 203b30d1939SAndy Fiddaman echo ";" >> $(<) 204b30d1939SAndy Fiddaman 205b30d1939SAndy Fiddamanend 206b30d1939SAndy Fiddaman 207b30d1939SAndy Fiddaman:: math.tab syscall.s mamexec mamstate.c $(DOCFILES) \ 208b30d1939SAndy Fiddaman bash.c bash_pre_rc.sh hexpand.c mkservice.c \ 209b30d1939SAndy Fiddaman shopen.mk shopen.c 210b30d1939SAndy Fiddaman 211b30d1939SAndy Fiddaman:: shtests \ 212b30d1939SAndy Fiddaman alias.sh append.sh arith.sh arrays.sh arrays2.sh \ 213b30d1939SAndy Fiddaman attributes.sh basic.sh bracket.sh builtins.sh case.sh \ 214b30d1939SAndy Fiddaman comvar.sh comvario.sh coprocess.sh cubetype.sh enum.sh exit.sh \ 215b30d1939SAndy Fiddaman expand.sh functions.sh glob.sh grep.sh heredoc.sh io.sh \ 216b30d1939SAndy Fiddaman leaks.sh locale.sh math.sh nameref.sh namespace.sh options.sh \ 217b30d1939SAndy Fiddaman path.sh pointtype.sh pty.sh quoting.sh quoting2.sh readcsv.sh \ 218b30d1939SAndy Fiddaman recttype.sh restricted.sh return.sh select.sh shtests \ 219b30d1939SAndy Fiddaman sigchld.sh signal.sh statics.sh subshell.sh substring.sh \ 220b30d1939SAndy Fiddaman tilde.sh timetype.sh treemove.sh types.sh variables.sh \ 221b30d1939SAndy Fiddaman vartree1.sh vartree2.sh 222b30d1939SAndy Fiddaman 223b30d1939SAndy Fiddaman:: ksh-regress.rt ksh-regress.tst 224b30d1939SAndy Fiddaman 225b30d1939SAndy Fiddamanif "$(PWD:B:N=cc-*)" 226b30d1939SAndy Fiddaman 227b30d1939SAndy Fiddamantest : .NULL 228b30d1939SAndy Fiddaman 229b30d1939SAndy Fiddamanelse 230b30d1939SAndy Fiddaman 231b30d1939SAndy Fiddamantest : test.ksh 232b30d1939SAndy Fiddaman 233b30d1939SAndy Fiddamantest.ksh : $(BINDIR)/$(SH) $(SH) shtests 234b30d1939SAndy Fiddaman $(SILENT) $(CMP) $(CMPFLAGS) $(*:O=1) $(*:O=2) 2>/dev/null || 235b30d1939SAndy Fiddaman echo "make install to run the tests on the latest $(SH)" >&2 236b30d1939SAndy Fiddaman cd $(*:O=3:P=L!:D) 237b30d1939SAndy Fiddaman SHELL=$(*:O=1:P=A) $(*:O=1:P=A) $(*:O=3:B) $(SHTESTSFLAGS) 238b30d1939SAndy Fiddaman 239b30d1939SAndy Fiddamantest.% : %.sh COSHELL_OPTIONS=separate $(BINDIR)/$(SH) $(SH) shtests 240b30d1939SAndy Fiddaman $(SILENT) $(CMP) $(CMPFLAGS) $(*:O=2) $(*:O=3) 2>/dev/null || 241b30d1939SAndy Fiddaman echo "make install to run the tests on the latest $(SH)" >&2 242b30d1939SAndy Fiddaman cd $(*:O=4:P=L!:D) 243b30d1939SAndy Fiddaman SHELL=$(*:O=2:P=A) $(*:O=2:P=A) $(*:O=4:B) $(SHTESTSFLAGS) $(*:O=1:P=A) 244b30d1939SAndy Fiddaman 245b30d1939SAndy Fiddamanif RELEASE 246b30d1939SAndy Fiddaman 247b30d1939SAndy Fiddaman.INSTALL : .CLEAR $(*.INSTALL:N=*$(RELEASE)*([!/])) 248b30d1939SAndy Fiddaman 249b30d1939SAndy Fiddamanend 250b30d1939SAndy Fiddaman 251b30d1939SAndy Fiddamanend 252