mirror of
git://git.code.sf.net/p/cdesktopenv/code
synced 2025-03-09 15:50:02 +00:00
Following a community discussion, it became clear that 'r' is particularly problematic as a regular builtin, as the name can and does conflict with at least one legit external command by that name. There was a consensus against removing it altogether and letting users set the alias in their login scripts. However, aliases are easier to bypass, remove or rename than builtins are. My compromise is to reinstate 'r' as a preset alias on interactive shells only, along with 'history', as was done in17f81ebebefore they were converted to builtins in03224ae3. So this reintroduces the notion of predefined aliases to ksh 93u+m, but only for interactive shells that are not initialised in POSIX mode. src/cmd/ksh93/Makefile, src/cmd/ksh93/Mamfile, src/cmd/ksh93/include/shtable.h, src/cmd/ksh93/data/aliases.c: - Restore aliases.c containing shtab_aliases[], a table specifying the preset aliases. src/cmd/ksh93/include/shtable.h, src/cmd/ksh93/sh/init.c: - Rename inittree() to sh_inittree() and make it extern, because we need to use it in main.c (sh_main()). src/cmd/ksh93/sh/main.c: sh_main(): - Init preset aliases from shtab_aliases[] only if the shell is interactive and not in POSIX mode. src/cmd/ksh93/bltins/typeset.c, src/cmd/ksh93/tests/alias.sh: - unall(): When unsetting an alias, pass on the NV_NOFREE attribute to nv_delete() to avoid an erroneous attempt to free a preset alias from read-only memory. See:5d50f825src/cmd/ksh93/data/builtins.c: - Remove "history" and "r" entries from shtab_builtins[]. - Revert changes to inline fc/hist docs in sh_opthist[]. src/cmd/ksh93/bltins/hist.c: b_hist(): - Remove handling for 'history' and 'r' as builtins. src/cmd/ksh93/sh.1: - Update accordingly. Resolves: https://github.com/ksh93/ksh/issues/125
228 lines
7 KiB
Makefile
228 lines
7 KiB
Makefile
/*
|
|
* ksh makefile
|
|
*/
|
|
|
|
SH := $(PWD:B:/[0-9]*$//:N=ksh*:-ksh) /* name of the shell program */
|
|
VERSION = 1.1
|
|
LICENSE = since=1982,author=dgk
|
|
CATALOG = libshell
|
|
ERROR_CONTEXT_T == Error_context_t /* workaround until switch from errorpush()/errorpop() => errorctx() */
|
|
RELEASE := $(SH:/.*sh//)
|
|
SHCOMP := shcomp$(RELEASE)
|
|
|
|
/*
|
|
* set these variables to 1 to enable, 0 to disable, null to probe
|
|
* override SHOPT_foo=1 can be placed one per line in the build dir Makeargs
|
|
*/
|
|
|
|
SHOPT_2DMATCH == 1 /* two dimensional .sh.match for ${var//pat/str} */
|
|
SHOPT_ACCT == /* accounting */
|
|
SHOPT_ACCTFILE == /* per user accounting info */
|
|
SHOPT_AUDIT == 1 /* enable auditing per SHOPT_AUDITFILE */
|
|
SHOPT_AUDITFILE == "/etc/ksh_audit" /* auditing file */
|
|
SHOPT_BGX == 1 /* one SIGCHLD trap per completed job */
|
|
SHOPT_BRACEPAT == 1 /* C-shell {...,...} expansions (, required) */
|
|
SHOPT_CMDLIB_HDR == /* -lcmd builtin list (<cmdlist.h>) */
|
|
SHOPT_CMDLIB_DIR == /* SHOPT_CMDLIB_HDR directory prefix (default "/opt/ast/bin") */
|
|
SHOPT_CRNL == /* accept <cr><nl> for <nl> */
|
|
SHOPT_DYNAMIC == 1 /* dynamic loading for builtins */
|
|
SHOPT_ECHOPRINT == /* make echo equivalent to print */
|
|
SHOPT_EDPREDICT == 1 /* predictive editing */
|
|
SHOPT_ESH == 1 /* emacs/gmacs edit mode */
|
|
SHOPT_FILESCAN == 1 /* fast file scan */
|
|
SHOPT_FIXEDARRAY == 1 /* fixed dimension indexed array */
|
|
SHOPT_HISTEXPAND == 1 /* csh-style history file expansions */
|
|
SHOPT_KIA == 1 /* shell information database generation */
|
|
SHOPT_MULTIBYTE == 1 /* multibyte character handling */
|
|
SHOPT_NAMESPACE == 1 /* allow namespaces */
|
|
SHOPT_OLDTERMIO == /* support both TCGETA and TCGETS */
|
|
SHOPT_OPTIMIZE == 1 /* optimize loop invariants */
|
|
SHOPT_PFSH == 1 /* solaris exec_attr(4) profile execution */
|
|
SHOPT_P_SUID == /* real uid's that require -p for set[ug]id */
|
|
SHOPT_RAWONLY == 1 /* make viraw the only vi mode */
|
|
SHOPT_REGRESS == /* enable __regress__ builtin and instrumented intercepts for testing */
|
|
SHOPT_REMOTE == /* enable --rc if running as a remote shell */
|
|
SHOPT_SEVENBIT == /* strip the eighth bit from characters */
|
|
SHOPT_SPAWN == /* use spawnveg for fork/exec */
|
|
SHOPT_STATS == 1 /* add .sh.stats variable */
|
|
SHOPT_SUID_EXEC == 1 /* allow (safe) suid/sgid shell scripts */
|
|
SHOPT_SYSRC == /* attempt . /etc/ksh.kshrc if interactive */
|
|
SHOPT_TIMEOUT == /* number of seconds for shell timeout */
|
|
SHOPT_TYPEDEF == 1 /* enable typeset type definitions */
|
|
SHOPT_VSH == 1 /* vi edit mode */
|
|
|
|
if CC.HOSTTYPE == "linux.alpha"
|
|
/* workaround for "BUG IN DYNAMIC LINKER ld.so" */
|
|
:PACKAGE: - m:static:noinclude /*noCC.EXPORT.DYNAMIC*/
|
|
end
|
|
|
|
if CC.HOSTTYPE == "*.s390-64"
|
|
CC.DLL = $(CC.DLLBIG)
|
|
end
|
|
|
|
if SHOPT_DYNAMIC && ( "$(CC.DIALECT:N=EXPORT=DLL)" || "$(PACKAGE_OPTIONS:N=optimize-space)" )
|
|
if "$(PACKAGE_OPTIONS:N=optimize-space)" && ! SHOPT_CMDLIB_HDR
|
|
SHOPT_CMDLIB_HDR == <cmdlist.h>
|
|
end
|
|
CCFLAGS += $$(CC.DLL) $$(CC.SUFFIX.DEBUG:+$$(CC.DEBUG))
|
|
LIBS_req = -lshell$(RELEASE)
|
|
else
|
|
if VARIANT
|
|
SHOPT_DYNAMIC = 1
|
|
else
|
|
libtype = :static
|
|
end
|
|
if SHOPT_DYNAMIC
|
|
CCLDFLAGS += $$(CC.EXPORT.DYNAMIC)
|
|
end
|
|
LIBS_req = +lshell$(RELEASE)
|
|
end
|
|
|
|
:PACKAGE: ast$(libtype):20100309 --clobber=!($(SH))
|
|
|
|
.SOURCE : edit sh bltins data tests fun
|
|
.SOURCE.h : include
|
|
|
|
/* documentation files */
|
|
DOCFILES = sh.memo builtins.mm README RELEASE TYPES PROMO.mm COMPATIBILITY \
|
|
DESIGN OBSOLETE RELEASE93 RELEASE88
|
|
|
|
KSHELL == 1 /* this is ksh */
|
|
|
|
SH_CMDLIB_DIR == /* SHOPT_CMDLIB_DIR dir prefix */
|
|
SH_DICT == /* message catalog */
|
|
DEBUG == /* debugging purposes only */
|
|
|
|
if CC.HOSTTYPE == "win32*"
|
|
SHOPT_CRNL == 1 /* <cr><nl> is equivalent to <nl> */
|
|
end
|
|
|
|
/* use the following libraries only if they exist */
|
|
LIBS_opt := +ljobs +li
|
|
|
|
if CC.HOSTTYPE == "sol([89]|[1-9][0-9]).*"
|
|
LDFLAGS += $(CC.LD.LAZY) $(CC.LD.NORECORD)
|
|
end
|
|
|
|
if "$(-mam:N=static*)"
|
|
LIBS_opt += -lsocket -lnsl
|
|
elif CC.HOSTTYPE == "sol?([789]|[1-9][0-9]).*"
|
|
LIBS_opt += +lsocket -lnsl
|
|
elif CC.HOSTTYPE != "sgi.mips*"
|
|
LIBS_opt += +lsocket +lnsl
|
|
end
|
|
if CC.HOSTTYPE == "linux.sparc*"
|
|
/* the linux.sparc linker still has some problems */
|
|
LIBS_opt += -ldll
|
|
end
|
|
LIBS_opt += -lsecdb
|
|
if CC.HOSTTYPE == "sol.*"
|
|
LIBS_opt += -lw
|
|
end
|
|
$(LIBS_opt) : .DONTCARE
|
|
|
|
LDLIBRARIES = $(LIBS_opt)
|
|
|
|
FILES_opt = /* optional file list enabled by vars above */
|
|
if SHOPT_ESH
|
|
FILES_opt += emacs.c
|
|
end
|
|
if SHOPT_VSH
|
|
FILES_opt += vi.c
|
|
end
|
|
if SHOPT_HISTEXPAND
|
|
FILES_opt += hexpand.c
|
|
end
|
|
if SHOPT_DYNAMIC
|
|
FILES_opt += -ldll
|
|
end
|
|
if SHOPT_X
|
|
LDFLAGS += -u _XtAppInitialize -L/usr/add-on/X11/lib
|
|
end
|
|
|
|
:ALL: $(SH) $(SHCOMP) $(SHOPT_SUID_EXEC:+suid_exec)
|
|
|
|
$(SH) :: sh.1 pmain.c $(LIBS_req)
|
|
|
|
DATAFILES = limits.c msg.c strdata.c testops.c keywords.c options.c \
|
|
signals.c aliases.c builtins.c variables.c lexstates.c
|
|
|
|
shell$(RELEASE) $(VERSION) id=shell :LIBRARY: shell.3 nval.3 alarm.c cd_pwd.c cflow.c deparse.c \
|
|
enum.c getopts.c hist.c misc.c print.c read.c sleep.c trap.c test.c \
|
|
typeset.c ulimit.c umask.c whence.c main.c nvdisc.c nvtype.c \
|
|
arith.c args.c array.c completion.c defs.c edit.c expand.c regress.c \
|
|
fault.c fcin.c history.c init.c io.c jobs.c lex.c macro.c name.c \
|
|
nvtree.c parse.c path.c string.c streval.c subshell.c tdump.c timers.c \
|
|
trestore.c waitevent.c xec.c $(DATAFILES) $(FILES_opt) \
|
|
-lcmd -last -lm
|
|
|
|
"sol*.i386*" :NOOPTIMIZE: main.c
|
|
"win32*" :NOOPTIMIZE: strdata.c trestore.c
|
|
|
|
if CC.HOSTTYPE == "win32*"
|
|
:DLL: $(CC.DEBUG)
|
|
else
|
|
:DLL: $(CC.OPTIMIZE)
|
|
end
|
|
|
|
:READONLY: $(DATAFILES)
|
|
|
|
$(INCLUDEDIR) :INSTALLPROTO: nval.h shell.h history.h
|
|
|
|
LIBCMD = $(.LIB.NAME. cmd:T=F)
|
|
|
|
if SHOPT_SUID_EXEC && ! "$(RELEASE)"
|
|
suid_exec :: CC.DLL= suid_exec.c +last
|
|
end
|
|
|
|
$(SHCOMP) :: CC.DLL= SH_DICT='"libshell"' shcomp.c $(LIBS_req)
|
|
|
|
$(FUNDIR) :INSTALLDIR: mode=+x dirs popd pushd
|
|
|
|
shcomp.o : _BLD_DLL= $(CC.HOSTTYPE:N=cygwin.*:??_BLD_shell=?)
|
|
|
|
:: math.tab syscall.s mamexec mamstate.c $(DOCFILES) \
|
|
hexpand.c mkservice.c \
|
|
shopen.mk shopen.c
|
|
|
|
:: shtests \
|
|
alias.sh append.sh arith.sh arrays.sh arrays2.sh \
|
|
attributes.sh basic.sh bracket.sh builtins.sh case.sh \
|
|
comvar.sh comvario.sh coprocess.sh cubetype.sh enum.sh exit.sh \
|
|
expand.sh functions.sh glob.sh grep.sh heredoc.sh io.sh \
|
|
leaks.sh locale.sh math.sh nameref.sh namespace.sh options.sh \
|
|
path.sh pointtype.sh pty.sh quoting.sh quoting2.sh readcsv.sh \
|
|
recttype.sh restricted.sh return.sh select.sh shtests \
|
|
sigchld.sh signal.sh statics.sh subshell.sh substring.sh \
|
|
tilde.sh timetype.sh treemove.sh types.sh variables.sh \
|
|
vartree1.sh vartree2.sh
|
|
|
|
:: ksh-regress.rt ksh-regress.tst
|
|
|
|
if "$(PWD:B:N=cc-*)"
|
|
|
|
test : .NULL
|
|
|
|
else
|
|
|
|
test : test.ksh
|
|
|
|
test.ksh : $(BINDIR)/$(SH) $(SH) shtests
|
|
$(SILENT) $(CMP) $(CMPFLAGS) $(*:O=1) $(*:O=2) 2>/dev/null ||
|
|
echo "make install to run the tests on the latest $(SH)" >&2
|
|
cd $(*:O=3:P=L!:D)
|
|
SHELL=$(*:O=1:P=A) $(*:O=1:P=A) $(*:O=3:B) $(SHTESTSFLAGS)
|
|
|
|
test.% : %.sh $(BINDIR)/$(SH) $(SH) shtests
|
|
$(SILENT) $(CMP) $(CMPFLAGS) $(*:O=2) $(*:O=3) 2>/dev/null ||
|
|
echo "make install to run the tests on the latest $(SH)" >&2
|
|
cd $(*:O=4:P=L!:D)
|
|
SHELL=$(*:O=2:P=A) $(*:O=2:P=A) $(*:O=4:B) $(SHTESTSFLAGS) $(*:O=1:P=A)
|
|
|
|
if RELEASE
|
|
|
|
.INSTALL : .CLEAR $(*.INSTALL:N=*$(RELEASE)*([!/]))
|
|
|
|
end
|
|
|
|
end
|