1
0
Fork 0
mirror of git://git.code.sf.net/p/cdesktopenv/code synced 2025-03-09 15:50:02 +00:00

Build system: make SHOPT_* editable again; allow indenting Mamfiles

The build system is adapted to make SHOPT_* compile-time options
editable without nmake. We can now easily change ksh's compile-time
options by editing src/cmd/ksh93/SHOPT.sh. The bin/package script
is adapted to turn these into compile flags. This resolves the most
important drawback of not using nmake.

Also, mamake now has support for indented Mam (Make Abstract
Machine) code. Only one type of block (make...done) is supported in
Mamfiles, so they are easy to indent automatically. A script to
(re)do this is included.

Since nmake is not going to be restored (it has too many problems
that no one is interested in fixing), this at least makes mamake
significantly easier to work with.

The Makefiles are deleted. They may still be handy for reference to
understand the Mamfiles, but they haven't actually matched the
Mamfiles for a while -- and you can still look in the git history.

Deleting them requires some adaptations to bin/package and mamake.c
because, even though they do not use those files, they still looked
for them to decide whether to build code in a directory.

Finally, this commit incorporates some #pragmas for clang to
suppress annoying warnings about the coding style used in this
historic code base. (gcc does not complain so much.)

src/cmd/ksh93/SHOPT.sh:
- Added.

bin/package, src/cmd/INIT/package.sh:
- cd into our own directory in case we were run from another dir.
- $makefiles: only look for Mamfiles.
- Add ksh compile-options via KSH_SHOPTFLAGS. Include SHOPT.sh.
- make_recurse(): Do not write a missing Makefile.
- finalize environment: Look for Mamfiles instead of Makefiles.

src/cmd/INIT/mamake.c:
- Tell clang to suppress annoying warnings about coding style.
- Update version string and self-documentation.
- input(): Add support for indented Mam code by skipping initial
  whitespace on each input line.
- files[]: Instead of looking for various of Makefiles to decide
  where to build, only look for Mamfiles.

src/Makefile, src/cmd/INIT/Makefile, src/cmd/Makefile,
src/cmd/builtin/Makefile, src/cmd/ksh93/Makefile, src/lib/Makefile,
src/lib/libast/Makefile, src/lib/libcmd/Makefile,
src/lib/libdll/Makefile, src/lib/libsum/Makefile:
- Removed.

src/Mamfile, src/cmd/INIT/Mamfile, src/cmd/Mamfile,
src/cmd/builtin/Mamfile, src/cmd/ksh93/Mamfile, src/lib/Mamfile,
src/lib/libast/Mamfile, src/lib/libcmd/Mamfile,
src/lib/libdll/Mamfile, src/lib/libsum/Mamfile:
- Indent the code with tabs.
- In ksh93/Mamfile, add ${KSH_SHOPT_FLAGS} to every $CC command.
- In ksh93/Mamfile, add "prev SHOPT.sh" for every *.o file
  so they are rebuilt whenever SHOPT.sh changes.

bin/Mamfile_indent:
- Added, in case someone wants to re-indent a Mamfile.

src/cmd/INIT/proto.c, src/cmd/INIT/ratz.c, src/cmd/INIT/release.c,
src/lib/libast/features/common, src/lib/libast/include/ast.h:
- Tell clang to suppress annoying warnings about coding style that
  it disapproves of (mainly concerning the use of parentheses).

src/cmd/INIT/cc.darwin, src/cmd/INIT/cc.freebsd,
src/cmd/INIT/cc.openbsd:
- Remove now-redundant clang warning suppression flags.

Resolves: https://github.com/ksh93/ksh/issues/60
This commit is contained in:
Martijn Dekker 2021-01-22 23:23:14 +00:00
parent 47468f56c2
commit 6cc2f6a0af
35 changed files with 11768 additions and 12763 deletions

View file

@ -1,232 +0,0 @@
/*
* ksh makefile
*
* NOTE: since ksh 93u+m does not use/include nmake for various reasons,
* any changes here are ineffective and this is for reference only. Edit
* Mamfile instead (though it might still be good to update this too).
*/
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 == 0 /* 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

File diff suppressed because it is too large Load diff

40
src/cmd/ksh93/SHOPT.sh Normal file
View file

@ -0,0 +1,40 @@
#
# Compile-time SHOPT_* options for ksh93.
# 1 to enable, 0 to disable, empty value to probe.
#
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= # '<cmdlist.h>' # custom -lcmd list for path-bound builtins
SHOPT CMDLIB_DIR= # '\"/opt/ast/bin\"' # virtual directory prefix for path-bound builtins
SHOPT CRNL= # accept MS Windows newlines (<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=0 # solaris exec_attr(4) profile execution (obsolete)
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