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,346 +0,0 @@
/*
* initialization for all packages
*/
ID = ast
SILENT = /* this component builds silent -- this prevents us from using it while building it */
:PACKAGE: license=$(ID)
LICENSE = since=1994,author=gsf
PACKAGEROOT = $(INSTALLROOT:T=F:P=L*:O=n)
hurl :: hurl.sh LICENSE=since=2003,author=gsf
iffe :: iffe.sh LICENSE=since=1994,author=gsf+kpv
mktest :: mktest.sh LICENSE=since=2005,author=gsf
package :: package.sh
regress :: regress.sh LICENSE=since=1995,author=gsf
rt :: rt.sh LICENSE=since=2005,author=gsf
$(PACKAGEROOT)/bin :INSTALLDIR: execrate ignore mamprobe package silent
crossexec :: crossexec.sh
ditto :: ditto.sh LICENSE=since=2001,author=gsf+ek
execrate :: execrate.sh LICENSE=since=2002,author=gsf
filter :: filter.sh
ignore :: ignore.sh
silent :: silent.sh
$(PACKAGEROOT)/lib/package :INSTALLDIR: package.mk CONVERT.mk
$(LIBDIR)/make :INSTALLDIR: package.mk PROBE.mk TEST.mk WWW.mk \
MSGFUN.mk MSGKEY.mk MAPLIB.mk
:TEST: iffe mamake
cc ld ldd :PACKAGE_INIT: mamake.c proto.c ratz.c release.c
:: RELEASE hosttype.tst p.c hello.c \
ar.ibm.risc \
cc.specialize cc.pentium4 \
ldd.cygwin.i386 \
cc.darwin.i386 cc.darwin.i386-64 cc.darwin ldd.darwin \
cc.hp.ia64 cc.hp.pa cc.hp.pa64 ld.hp.pa ldd.hp.pa \
cc.ibm.risc cc.ibm.risc.gcc ldd.ibm.risc \
cc.linux.ia64-icc cc.linux.i386-icc cc.linux.i386-64-icc \
cc.lynxos.i386 cc.lynxos.ppc ldd.lynxos \
cc.mvs.390 cc.next.i386 cc.next.m68k ldd.mvs.390 \
cc.osf.alpha \
cc.sco.i386 \
cc.sgi.mips2 cc.sgi.mips3 cc.sgi.mips3-o32 cc.sgi.mips4 \
cc.sgi.mips4-n32 ldd.sgi \
cc.unix.mc68k cc.unixware.i386
LICENSE : .DONTCARE
if ! CC.HOSTTYPE
CC.HOSTTYPE := $(_hosttype_|HOSTTYPE)
end
$(BINDIR)/mkdir :INSTALL: mkdir.sh
if test ! -x $(<) -a -x /bin/mkdir
then mkdir -p 2>/dev/null || :
if test -d ./-p
then rmdir ./-p
cp $(*) $(<)
chmod +x $(<)
fi
fi
/*
* ksh93 function search on PATH
* ksh93 builtin command library -lcmd
* ksh93 ld library path search on PATH
*/
$(BINDIR)/.paths :INSTALL: (CC.DIALECT)
if test ! -f $(<) -o -w $(<)
then N='$("\n")'
H=$(CC.HOSTTYPE)
P="$(-mam:??$(.GETCONF LIBPATH:/:/ /G:/,/ : /G:Q)?)"
b= f= h= l= n= p= u= B= L=
set : $P
while :
do while :
do case $1 in
'') break 2 ;;
:) shift; break ;;
esac
shift
done
case $# in
0|1) break ;;
esac
case $L in
?*) L="$L|" ;;
esac
L="$L$2=*"
B=$1
done
if test -f $(<)
then while read x
do case $x in
*\$\(\"*) break # to fix 2012-06-18 edit botch #
;;
'#'?*) case $h in
'') h=$x ;;
esac
;;
$L) l=$x
;;
*BUILTIN_LIB=*) b=$x
;;
*FPATH=*) f=$x
;;
*PLUGIN_LIB=*) p=$x
;;
*) case $u in
?*) u=$u$N ;;
esac
u=$u$x
;;
esac
done < $(<)
fi
ifs=$IFS
m=
case $p in
?*) b=
;;
esac
case $b in
?*) IFS='='
set $b
IFS=$ifs
shift
p="PLUGIN_LIB=$*"
case $b in
[Nn][Oo]*) p=no$p ;;
esac
m=1
;;
esac
case $f in
'') f="FPATH=../fun"
m=1
;;
esac
case $h in
'') h='# use { no NO } prefix to permanently disable #' ;;
esac
case $l in
'') set x x : $P
l=
while :
do while :
do case $# in
0) break ;;
esac
x=$1
shift
case $x in
:) break ;;
esac
done
case $# in
0|1) break
;;
2) l=$2
;;
*) case "$H" in
$3) l=$2; break ;;
esac
;;
esac
done
case $l in
'') if test -x /lib/dld.sl
then l=SHLIB_PATH
elif test -x /usr/lib/dyld
then l=DYLD_LIBRARY_PATH
else case "$H" in
ibm.*|mvs.*)
l=LIBPATH
;;
sgi.mips3)
l=LD_LIBRARYN32_PATH
;;
sgi.mips4)
l=LD_LIBRARYN64_PATH
;;
*) l=LD_LIBRARY_PATH
;;
esac
fi
;;
esac
case $l in
?*) case $B in
'') B=lib ;;
esac
l="$l=../$B"
m=1
;;
esac
;;
esac
case $p in
'') p="PLUGIN_LIB=cmd"
case '$(CC.DIALECT:N=*EXPORT=[AD]LL*)' in
'') p=no$p ;;
esac
m=1
;;
esac
case $m in
1) case $u in
?*) u=$N$u ;;
esac
echo "$h$N$p$N$f$N$l$u" > $(<)
;;
esac
fi
/*
* probe initialization
*/
for T C+probe C+make+probe.lcl C+pp+probe.lcl
if T == "*.lcl"
$(T) : .DONTCARE
end
$(LIBDIR)/probe/$(T:C,+,/,G) :INSTALL: $(T)
end
$(LIBDIR)/probe/C/mam/probe :INSTALL: mprobe
mprobe :: mprobe.sh
$(LIBDIR)/probe/C/make :INSTALLDIR: probe probe.ini
probe.sh : C+probe make.probe
cat $(*) > $(<)
probe :: probe.sh
probe.ini : (CC.HOSTTYPE) probe.win32
t=$(CC.HOSTTYPE)
ifs=$IFS
IFS=.
set x $t
IFS=$ifs
t=$2
set x $(*)
while :
do shift
case $# in
0) break ;;
esac
case $1 in
*probe.$t)
break
esac
done
case $1 in
?*) cmp -s $1 $(<) || cp $1 $(<) ;;
*) : > $(<)
esac
/*
* proto initialization
*/
$(INCLUDEDIR)/$(ID) :INSTALLDIR: prototyped.h
prototyped.h : $(BINDIR)/proto
proto -f /dev/null > h.$(tmp).h
if $(CMP) -s h.$(tmp).h $(<)
then $(RM) -f h.$(tmp).h
else $(MV) h.$(tmp).h $(<)
fi
/*
* check if -ldl is required
* this allows makefiles to use -ldl on all systems
*
* NOTE: this works around the sgi botch:
* (1) irix 5.* made -ldl optional but warned
* (2) irix 6.* has no -ldl
* (3) dynamic progs built on irix 5.* and using -ldl fail
* at runtime on irix 6.* because -ldl is not there
*/
dl :MAPLIB: dl.c
/*
* requiring these is a botch
*/
iconv :MAPLIB: iconv.c
w :MAPLIB: w.c w2.c
/*
* miscellaneous -l* checks
*/
intl :MAPLIB: intl.c
m :MAPLIB: m.c m2.c m3.c m4.c m5.c m6.c
nsl :MAPLIB: nsl.c
/*
* what was sco smoking
* almost all of gethost* are in -lnsl except gethostbyname which
* is in -lsocket which isn't needed to resolve socket() but seems
* to do the -lnsl job
*/
socket :MAPLIB: socket.c nsl.c
/*
* more substance abuse
* gdbm's ndbm "compatibility" doesn't supply <ndbm.h>, instead supplies
* <gdbm/ndbm.h> which provides K&R prototypes *and* it requires -lgdbm
* some <ndbm.h> implementations use -lndbm, others -ldbm, still others -lc
* this is why unix is starting to look like windows
* this map allows makefiles to use -ldbm on all systems
*
* and this just in: sometimes it's <gdbm-ndbm.h> and possibly -lgdbm_compat
*
* at least the -l* buck stops here
*/
dbm db - gdbm_compat - gdbm - ndbm - dbm :MAPLIB: db.c gdbm.c gdbm1.c gdbm2.c

File diff suppressed because it is too large Load diff

View file

@ -43,8 +43,7 @@ init) echo "cc: arguments expected" >&2
;;
cpp) $CC -E "$@"
;;
cc) $CC -D_ast_int8_t=int64_t -D_lib_memccpy \
-Wno-unused-value -Wno-parentheses -Wno-macro-redefined "$@"
cc) $CC -D_ast_int8_t=int64_t -D_lib_memccpy "$@"
;;
dll) $CC -Wl,-flat_namespace -dynamiclib -undefined dynamic_lookup "$@"
;;

View file

@ -6,7 +6,4 @@ case " $* " in
*" -dumpmachine "*) echo $HOSTTYPE; exit ;;
esac
exec /usr/bin/cc -P \
-Wno-unused-value \
-Wno-parentheses \
"$@"
exec /usr/bin/cc -P "$@"

View file

@ -6,7 +6,4 @@ case " $* " in
*" -dumpmachine "*) echo $HOSTTYPE; exit ;;
esac
exec /usr/bin/cc -P \
-Wno-unused-value \
-Wno-parentheses \
"$@"
exec /usr/bin/cc -P "$@"

View file

@ -18,6 +18,8 @@
* *
***********************************************************************/
#pragma prototyped
#pragma clang diagnostic ignored "-Wparentheses"
#pragma clang diagnostic ignored "-Wunused-value"
/*
* mamake -- MAM make
@ -25,7 +27,8 @@
* coded for portability
*/
static char id[] = "\n@(#)$Id: mamake (AT&T Research) 2011-08-31 $\0\n";
#define RELEASE_DATE "2021-01-21"
static char id[] = "\n@(#)$Id: mamake (AT&T Research/ksh93) " RELEASE_DATE " $\0\n";
#if _PACKAGE_ast
@ -33,17 +36,15 @@ static char id[] = "\n@(#)$Id: mamake (AT&T Research) 2011-08-31 $\0\n";
#include <error.h>
static const char usage[] =
"[-?\n@(#)$Id: mamake (AT&T Research) 2011-08-31 $\n]"
"[-?\n@(#)$Id: mamake (AT&T Research/ksh93) " RELEASE_DATE " $\n]"
USAGE_LICENSE
"[+NAME?mamake - make abstract machine make]"
"[+DESCRIPTION?\bmamake\b reads \amake abstract machine\a target and"
" prerequisite file descriptions from a mamfile (see \b-f\b) and executes"
" actions to update targets that are older than their prerequisites."
" Mamfiles are generated by the \b--mam\b option of \bnmake\b(1) and"
" \bgmake\b(1) and are portable to environments that only have"
" Mamfiles are portable to environments that only have"
" \bsh\b(1) and \bcc\b(1).]"
"[+?In practice \bmamake\b is used to bootstrap build \bnmake\b(1) and"
" \bksh\b(1) in new environments. Mamfiles are used rather than"
"[+?Mamfiles are used rather than"
" old-\bmake\b makefiles because some features are not reliably supported"
" across all \bmake\b variants:]{"
" [+action execution?Multi-line actions are executed as a"
@ -1127,7 +1128,10 @@ input(void)
else if (*state.input && *(e = state.input + strlen(state.input) - 1) == '\n')
*e = 0;
state.sp->line++;
return state.input;
e = state.input;
while (isspace(*e))
e++; /* allow indentation */
return e;
}
/*
@ -1795,10 +1799,13 @@ scan(Dict_item_t* item, void* handle)
static char* files[] =
{
"Nmakefile",
"nmakefile",
"Makefile",
"makefile"
"Mamfile"
/* ksh 93u+m no longer uses these:
* "Nmakefile",
* "nmakefile",
* "Makefile",
* "makefile"
*/
};
/*

View file

@ -30,6 +30,29 @@ Bad*) echo "Cannot be run by zsh in native mode; use a sh symlink to zsh" >&2
exit 1 ;;
esac
unset CDPATH
case $0 in
-*)
echo "dodgy \$0: $0" >&2
exit 1 ;;
*/package)
mydir=`echo "$0" | sed 's,/package$,,'`
cd "$mydir" || exit
case $PWD in
*/bin) ;;
*) echo "this script must live in bin/" >&2
exit 1 ;;
esac
cd .. || exit
unset mydir ;;
package)
echo "this script must be invoked with a direct path, e.g. bin/package" >&2
exit 1 ;;
*)
echo "this script must be named 'package'" >&2
exit 1 ;;
esac
# shell checks
checksh()
{
@ -63,7 +86,7 @@ usr="/home"
lib="" # nee /usr/local/lib /usr/local/shlib
ccs="/usr/kvm /usr/ccs/bin"
org="gnu GNU"
makefiles="Mamfile Nmakefile nmakefile Makefile makefile"
makefiles="Mamfile" # ksh 93u+m no longer uses these: Nmakefile nmakefile Makefile makefile
env="HOSTTYPE NPROC PACKAGEROOT INSTALLROOT PATH"
checksum=md5sum
checksum_commands="$checksum md5"
@ -1404,6 +1427,20 @@ case $ksh_relflags in
assign="${assign:+$assign }KSH_RELFLAGS=\"\$ksh_relflags\"" ;;
esac
# Add ksh compile-options via KSH_SHOPTFLAGS.
SHOPT()
{
case $1 in
*=?*) ksh_shoptflags="${ksh_shoptflags:+$ksh_shoptflags }-DSHOPT_$1" ;;
esac
}
ksh_shoptflags=
. src/cmd/ksh93/SHOPT.sh # this script calls SHOPT() to set options
case $ksh_shoptflags in
?*) # add the extra flags as an argument to mamake
assign="${assign:+$assign }KSH_SHOPTFLAGS=\"\$ksh_shoptflags\"" ;;
esac
# grab action specific args
case $action in
@ -4036,12 +4073,6 @@ make_recurse() # dir
then return
fi
done
if test -d $1
then case $exec in
'') echo :MAKE: > $1/Makefile || exit ;;
*) $exec "echo :MAKE: > $1/Makefile" ;;
esac
fi
}
get() # host path [ file size ]
@ -7217,7 +7248,7 @@ update) # download the latest release.version for selected packages
use) # finalize the environment
x=:..
for d in `( cd $PACKAGEROOT; ls src/*/Makefile src/*/Nmakefile 2>/dev/null | sed 's,/[^/]*$,,' | sort -u )`
for d in `( cd $PACKAGEROOT; ls src/*/Mamfile 2>/dev/null | sed 's,/[^/]*$,,' | sort -u )`
do x=$x:$INSTALLROOT/$d
done
x=$x:$INSTALLROOT

View file

@ -17,6 +17,9 @@
* Glenn Fowler <gsf@research.att.com> *
* *
***********************************************************************/
#pragma clang diagnostic ignored "-Wparentheses"
#pragma clang diagnostic ignored "-Wunused-value"
#pragma clang diagnostic ignored "-Wstring-plus-int"
/* : : generated by proto : : */

View file

@ -4,6 +4,7 @@
* coded for portability
* _SEAR_* macros for win32 self extracting archives -- see sear(1).
*/
#pragma clang diagnostic ignored "-Wparentheses"
static char id[] = "\n@(#)$Id: ratz (Jean-loup Gailly, Mark Adler, Glenn Fowler) 1.2.3 2010-10-10 $\0\n";

View file

@ -18,6 +18,7 @@
* *
***********************************************************************/
#pragma prototyped
#pragma clang diagnostic ignored "-Wparentheses"
/*
* release -- list recent release changes