mirror of
git://git.code.sf.net/p/cdesktopenv/code
synced 2025-03-09 15:50:02 +00:00
The coshell(1) command, which is required for libcoshell to be
useful, is not known to be shipped by any distribution. It was
removed by the ksh-community fork and hence also by 93u+m (in
2940b3f5). The coshell facility as a whole is obsolete and
insecure. For a long time now, the statically linked libcoshell
library has been 40+ kilobytes of dead weight in the ksh binary.
Prior discussion (ksh2020): https://github.com/att/ast/issues/619
src/lib/libcoshell/*:
- Removed.
src/cmd/ksh93/*:
- Remove the SHOPT_COSHELL compiler option (which was enabled) and
a lot of code that was conditional upon #ifdef SHOPT_COSHELL.
- init.c: e_version[]: Removing SHOPT_COSHELL changed the "J"
feature identifier in ${.sh.version} to a lowercase "j", which
was conditional upon SHOPT_BGX (background job extensions).
But src/cmd/ksh93/RELEASE documents (at 08-12-04, on line 1188):
| +SHOPT_BGX enables background job extensions. Noted by "J" in
| the version string when enabled. [...]
That is the only available documentation. So change that "j" back
to a "J", leaving the version string unchanged after this commit.
- jobs.c: job_walk(): We need to keep one 'job_waitsafe(SIGCHLD);'
call that was conditional upon SHOPT_COSHELL; removing it caused
a regression test failure in tests/sigchld.sh, 'SIGCHLD blocked
for script at end of pipeline' (which means that until now, a ksh
compiled without libcoshell had broken SIGCHLD handling.)
bin/package, src/cmd/INIT/package.sh:
- Don't export COSHELL variable.
249 lines
7.5 KiB
Makefile
249 lines
7.5 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_BASH == /* bash compatibility code */
|
|
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
|
|
|
|
if SHOPT_BASH
|
|
BASH_HOSTTYPE == "$(CC.HOSTTYPE:S:/\.//)"
|
|
BASH_MACHTYPE == "$(BASH_HOSTTYPE)-unknown-$(CC.HOSTTYPE:B)"
|
|
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_BASH
|
|
FILES_opt += bash.c bash_pre_rc.c
|
|
SHOPT_HISTEXPAND == 1
|
|
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) $(SHOPT_BASH:+bash$(RELEASE))
|
|
|
|
$(SH) :: sh.1 pmain.c $(LIBS_req)
|
|
|
|
DATAFILES = limits.c msg.c strdata.c testops.c keywords.c options.c \
|
|
signals.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 env.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=?)
|
|
|
|
if SHOPT_BASH
|
|
|
|
bash$(RELEASE) :LINK: $(SH)
|
|
|
|
bash_pre_rc.c : bash_pre_rc.sh
|
|
echo "const char bash_pre_rc[] = " > $(<)
|
|
sed -e 's/\\/\\\\/g' -e 's/"/\\"/g' -e 's/'"'"'/\\'"'"'/g' -e 's/^[[:space:]]*\(.*\)$/\"\1\\n\"/' $(*) >> $(<)
|
|
echo ";" >> $(<)
|
|
|
|
end
|
|
|
|
:: math.tab syscall.s mamexec mamstate.c $(DOCFILES) \
|
|
bash.c bash_pre_rc.sh 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
|