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

INIT: remove proto, ratz (re: 46593a89, 6137b99a); major cleanup

This takes another step towards cleaning up the build system. We
now do not even pretend to be theoretically compatible with
pre-1989 K&R C compilers or with C++ compilers. In practice, this
had already been broken for many years due to bit rot.

Commit 46593a89 already removed the license handling enormity that
depended on proto, so now we can cleanly remove it altogether. But
we do need to leave some backwards compatibility stubs to keep the
build system compatible with older AST code; it should remain
possible to build older ksh versions with the current build system
(the bin/ and src/cmd/INIT/ directories) for testing purposes.

So as of now there is no more __MANGLE__d rubbish in your generated
header files. This is only about a quarter of a century overdue...

This commit also includes a huge amount of code cleanup to remove
thousands of unused K&R C fallbacks and other cruft, particularly
in libast. This code base should now be a little easier to
understand for people who are familiar with a modern(ish) C
standard.

ratz is now also removed; this was a standalone and simplified 2005
version of gunzip. As of 6137b99a, none of our code uses it, even
theoretically. And the real g(un)zip is now everywhere.

src/cmd/INIT/proto.c, src/cmd/INIT/ratz.c:
- Removed.

COPYRIGHT:
- Remove zlib license; this only applied to ratz.

bin/package, src/cmd/INIT/package.sh:
- Related cleanups.
- Unset LC_ALL before invoking a new shell, respecting the user's
  locale again and avoiding multibyte character corruption on the
  command line.

src/cmd/INIT/proto.sh:
- Add stub for backwards compatibility with Mamfiles that depend on
  proto. It does nothing but pass input without modification and is
  now installed as the new arch/*/bin/proto by src/cmd/INIT/Mamfile.

src/cmd/INIT/iffe.sh:
- Ignore the proto-related -e (--package) and -p (--prototyped)
  options; keep parsing them for backwards compatibility.
- Trim the macros passed to every test to their standard C
  versions, removing K&R C and C++ versions. These are now
  considered to be for backwards compatibility only.

src/cmd/INIT/iffe.tst:
- Remove proto(1) mangling code.
  By the way, iffe can be regression-tested as follows:
        $ bin/package use   # set up environment in a child shell
        $ regress src/cmd/INIT/iffe.tst
        $ exit              # leave package environment

src/cmd/INIT/make.probe, src/cmd/INIT/probe.win32:
- Remove code to handle C++.

src/lib/libast/features/common:
- As in iffe.sh above, trim macros designed for compatibility with
  C++ and ancient C compilers to their standard C versions and
  comment that they are for backwards compatibility with AST code.
  This is needed to keep all the old ast and ksh code compiling.

src/cmd/ksh93/sh/init.c,
src/cmd/ksh93/sh/name.c:
- Clarify libshell ABI compatibility function versions of macros.
  A "proto workaround" comment in the original code mislead me into
  thinking this had something to do with the removed proto(1), but
  it's unrelated. Call the workaround macro BYPASS_MACRO instead.

src/cmd/ksh93/include/defs.h:
- sh_sigcheck() macro: allow &sh as an argument: parenthesise shp.

src/cmd/ksh93/sh/nvtype.c:
- Remove unused nv_mkstruct() function. (re: d0a5cab1)

**/features/*:
- Remove obsolete iffe 'set prototyped' option.

**/Mamfile:
- Remove all references to the ast/prototyped.h header.
- Remove all use of the proto command. Simply copy instead.

*** 850-ish source files: ***
- Remove all '#pragma prototyped' directives.
- Remove all C++ compat code conditional upon defined(__cplusplus).
- Remove all use of the _ARG_ macro, which on standard C expands to
  its argument:
        #define _ARG_(x)        x
  (on K&R C, it expanded to nothing)
- Remove all use of _BEGIN_EXTERNS_ and _END_EXTERNS_ macros (empty
  on standard C; this was for C++ compatibility)
- Reduce all #if __STD_C (standard code) #else (K&R code) #endif
  blocks to the standard code only, without use of the macro.
- Same for _STD_ macro which seems to have had the same function.
- Change all instances of 'Void_t' to standard 'void'.
This commit is contained in:
Martijn Dekker 2021-12-23 03:14:20 +00:00
parent 3785a0685c
commit a1f5c99204
869 changed files with 1853 additions and 14292 deletions

View file

@ -408,41 +408,6 @@ make install
done mamake.o generated
exec - ${CC} ${CCLDFLAGS} ${mam_cc_FLAGS} ${KSH_RELFLAGS} ${CCFLAGS} ${LDFLAGS} -o mamake mamake.o
done mamake generated
make proto
make proto.o
make proto.c
done proto.c
meta proto.o %.c>%.o proto.c proto
prev proto.c
exec - ${CC} ${mam_cc_FLAGS} ${KSH_RELFLAGS} ${CCFLAGS} -c proto.c
done proto.o generated
exec - ${CC} ${CCLDFLAGS} ${mam_cc_FLAGS} ${KSH_RELFLAGS} ${CCFLAGS} ${LDFLAGS} -o proto proto.o
done proto generated
make ratz
make ratz.o
make ratz.c
make unix.h implicit
done unix.h dontcare virtual
make alloc.h implicit
done alloc.h dontcare virtual
make unixio.h implicit
done unixio.h dontcare virtual
make ast_std.h implicit
done ast_std.h dontcare virtual
make windows.h implicit
done windows.h dontcare virtual
make io.h implicit
done io.h dontcare virtual
make direct.h implicit
done direct.h dontcare virtual
prev ast.h implicit
done ratz.c
meta ratz.o %.c>%.o ratz.c ratz
prev ratz.c
exec - ${CC} ${mam_cc_FLAGS} ${KSH_RELFLAGS} ${CCFLAGS} -c ratz.c
done ratz.o generated
exec - ${CC} ${CCLDFLAGS} ${mam_cc_FLAGS} ${KSH_RELFLAGS} ${CCFLAGS} ${LDFLAGS} -o ratz ratz.o
done ratz generated
make mprobe
make mprobe.sh
done mprobe.sh
@ -634,14 +599,16 @@ make install
prev mamake
exec - test '' = 'mamake' || ${STDCMP} 2>/dev/null -s mamake ${INSTALLROOT}/bin/mamake || { ${STDMV} ${INSTALLROOT}/bin/mamake ${INSTALLROOT}/bin/mamake.old 2>/dev/null || true; ${STDCP} mamake ${INSTALLROOT}/bin/mamake ;}
done ${INSTALLROOT}/bin/mamake generated
make ${INSTALLROOT}/bin/proto
prev proto
exec - test '' = 'proto' || ${STDCMP} 2>/dev/null -s proto ${INSTALLROOT}/bin/proto || { ${STDMV} ${INSTALLROOT}/bin/proto ${INSTALLROOT}/bin/proto.old 2>/dev/null || true; ${STDCP} proto ${INSTALLROOT}/bin/proto ;}
done ${INSTALLROOT}/bin/proto generated
make ${INSTALLROOT}/bin/ratz
prev ratz
exec - test '' = 'ratz' || ${STDCMP} 2>/dev/null -s ratz ${INSTALLROOT}/bin/ratz || { ${STDMV} ${INSTALLROOT}/bin/ratz ${INSTALLROOT}/bin/ratz.old 2>/dev/null || true; ${STDCP} ratz ${INSTALLROOT}/bin/ratz ;}
done ${INSTALLROOT}/bin/ratz generated
make __proto_stub
note *
note * proto(1) has been removed, but install a backwards compatibility stub
note * that allows old Mamfiles containing proto commands to keep working.
note *
exec - src=${PACKAGEROOT}/src/cmd/INIT/proto.sh
exec - dst=${INSTALLROOT}/bin/proto
exec - ${STDCMP} 2>/dev/null -s $src $dst || { ${STDMV} $dst $dst.old 2>/dev/null || true; ${STDCP} $src $dst ;}
exec - test -w $dst && test -x $dst || chmod u+w,+x $dst
done __proto_stub dontcare virtual
make ${INSTALLROOT}/bin/mkdir
make mkdir.sh
done mkdir.sh
@ -876,18 +843,6 @@ make install
exec - then mkdir -p ${INSTALLROOT}/include/ast
exec - fi
done ${INSTALLROOT}/include/ast generated
make ${INSTALLROOT}/include/ast/prototyped.h
prev ${INSTALLROOT}/include/ast
make prototyped.h
prev ${INSTALLROOT}/bin/proto
exec - proto -f /dev/null > h.${COTEMP}.h
exec - if cmp 2>/dev/null -s h.${COTEMP}.h prototyped.h
exec - then rm -f h.${COTEMP}.h
exec - else mv h.${COTEMP}.h prototyped.h
exec - fi
done prototyped.h generated
exec - test '' = 'prototyped.h' || ${STDCMP} 2>/dev/null -s prototyped.h ${INSTALLROOT}/include/ast/prototyped.h || { ${STDMV} ${INSTALLROOT}/include/ast/prototyped.h ${INSTALLROOT}/include/ast/prototyped.h.old 2>/dev/null || true; ${STDCP} prototyped.h ${INSTALLROOT}/include/ast/prototyped.h ;}
done ${INSTALLROOT}/include/ast/prototyped.h generated
make ${INSTALLROOT}/lib/lib
exec - if test ! -d ${INSTALLROOT}/lib/lib
exec - then mkdir -p ${INSTALLROOT}/lib/lib

View file

@ -32,7 +32,7 @@ AIX) unset LIBPATH ;;
esac
command=iffe
version=2021-12-06
version=2021-12-22
compile() # $cc ...
{
@ -682,7 +682,6 @@ case `(set -f && set x * && echo $# && set +f) 2>/dev/null` in
esac
;;
esac
protoflags=
puthdr=
putlib=
pragma=
@ -811,9 +810,8 @@ case `(getopts '[-][123:xyz]' opt --xyz; echo 0$opt) 2>/dev/null` in
[N!:optimize?\b--nooptimize\b disables compiler optimization options.]
[o:output?Sets the output file name to \afile\a.]:[file]
[O:stdio?Sets the standard io header to \ahdr\a.]:[hdr:=stdio.h]
[e:package?Sets the \bproto\b(1) package name to \aname\a.]:[name]
[p:prototyped?Emits \b#pragma prototyped\b at the top of the
output file. See \bproto\b(1).]
[e:package?Obsolete; ignored.]
[p:prototyped?Obsolete; ignored.]
[P:pragma?Emits \b#pragma\b \atext\a at the top of the output file.]:[text]
[r:regress?Massage output for regression testing.]
[s:shell?Sets the internal shell name to \aname\a. Used for debugging
@ -880,30 +878,17 @@ case `(getopts '[-][123:xyz]' opt --xyz; echo 0$opt) 2>/dev/null` in
\bNOTE("...")\b to emit short text in \b--verbose\b output; only one
\bNOTE()\b should be called per test for readability. In addition to
all macro definitions generated by previous tests, all generated
code contains the following at the top to hide dialect differences:]{
[+ ?#if defined(__STDC__) || defined(__cplusplus) || defined(c_plusplus)]
code contains the following at the top:]{
[+ ?/* AST backwards compatibility macros */]
[+ ?#define _NIL_(x) ((x)0)]
[+ ?#define _STD_ 1]
[+ ?#define _ARG_(x) x]
[+ ?#define _VOID_ void]
[+ ?#else]
[+ ?#define _STD_ 0]
[+ ?#define _ARG_(x) ()]
[+ ?#define _VOID_ char]
[+ ?#endif]
[+ ?#if defined(__cplusplus)]
[+ ?#define _BEGIN_EXTERNS_ extern "C" {]
[+ ?#define _END_EXTERNS_ }]
[+ ?#else]
[+ ?#define _BEGIN_EXTERNS_]
[+ ?#define _END_EXTERNS_]
[+ ?#endif]
[+ ?#define _NIL_(x) ((x)0)]
[+ ?#include <stdio.h> /* unless changed using the "stdio" option */]
[+ ?/* if/when available, "$INSTALLROOT/src/lib/libast/FEATURE/standards" is included here */]
[+ ?/* then <stdio.h> is included, unless this was disabled using the "stdio" option */]
}
[+?In addition, if and when available, standards macros set as a result of the
\bsrc/lib/libast/features/standards\b feature test are incorporated
here, ensuring the compilation environment is consistent between the
tests and the code that uses the test results.]
[+?= \adefault\a may be specified for the \bkey\b, \blib\b, \bmac\b, \bmth\b
and \btyp\b tests. If the test fails for \aarg\a then
\b#define\b \aarg\a \adefault\a is emitted. \bkey\b accepts multiple
@ -1111,7 +1096,7 @@ case `(getopts '[-][123:xyz]' opt --xyz; echo 0$opt) 2>/dev/null` in
\bendif\b } with unnamed \b{\b ... \b}\b blocks.]
}
[+SEE ALSO?\bautoconf\b(1), \bconfig\b(1), \bgetconf\b(1), \bcrossexec\b(1),
\bnmake\b(1), \bpackage\b(1), \bproto\b(1), \bsh\b(1)]
\bnmake\b(1), \bpackage\b(1), \bsh\b(1)]
'
while getopts -a "$command" "$USAGE" OPT
do case $OPT in
@ -1128,8 +1113,8 @@ case `(getopts '[-][123:xyz]' opt --xyz; echo 0$opt) 2>/dev/null` in
n) set="$set set namval $OPTARG :" ;;
N) set="$set set nooptimize $OPTARG :" ;;
o) set="$set set output $OPTARG :" ;;
e) set="$set set package $OPTARG :" ;;
p) set="$set set prototyped :" ;;
e) ;; # obsolete
p) ;; # obsolete
P) set="$set set pragma $OPTARG :" ;;
r) set="$set set regress :" ;;
s) set="$set set shell $OPTARG :" ;;
@ -1195,10 +1180,10 @@ case `(getopts '[-][123:xyz]' opt --xyz; echo 0$opt) 2>/dev/null` in
REM=o`echo X$1 | sed 's,[^=]*=,,'`
;;
--pa=*|--pac=*|--pack=*|--packa=*|--packag=*|--package=*)
REM=e`echo X$1 | sed 's,[^=]*=,,'`
# obsolete
;;
--pro|--prot|--proto|--protot|--prototy|--prototyp|--prototype|--prototyped)
REM=p
# obsolete
;;
--pra=*|--prag=*|--pragma=*)
REM=P`echo X$1 | sed 's,[^=]*=,,'`
@ -1265,8 +1250,8 @@ case `(getopts '[-][123:xyz]' opt --xyz; echo 0$opt) 2>/dev/null` in
n) set="$set set namval $OPTARG :" ;;
N) set="$set set nooptimize $OPTARG :" ;;
o) set="$set set output $OPTARG :" ;;
e) set="$set set package $OPTARG :" ;;
p) set="$set set prototyped :" ;;
e) ;; # obsolete
p) ;; # obsolete
P) set="$set set pragma $OPTARG :" ;;
r) set="$set set regress :" ;;
s) set="$set set shell $OPTARG :" ;;
@ -1352,23 +1337,13 @@ status=2
# standard header for c source
std='#if defined(__STDC__) || defined(__cplusplus) || defined(c_plusplus)
std='/* AST backwards compatibility macros */
#define _NIL_(x) ((x)0)
#define _STD_ 1
#define _ARG_(x) x
#define _VOID_ void
#else
#define _STD_ 0
#define _ARG_(x) ()
#define _VOID_ char
#endif
#if defined(__cplusplus)
#define _BEGIN_EXTERNS_ extern "C" {
#define _END_EXTERNS_ }
#else
#define _BEGIN_EXTERNS_
#define _END_EXTERNS_
#endif
#define _NIL_(x) ((x)0)'
#define _END_EXTERNS_'
# To ensure the environment tested is the same as that used, add standards
# compliance macros as probed by libast as soon as they are available.
if test -f "${INSTALLROOT}/src/lib/libast/FEATURE/standards"
@ -1392,7 +1367,6 @@ ini=
init=1
line=0
nan=
prototyped=
while :
do case $in in
"") case $argx:$* in
@ -1616,8 +1590,8 @@ do case $in in
n) op=namval ;;
N) op=nooptimize ;;
o) op=output ;;
e) op=package ;;
p) op=prototyped ;;
e) ;; # obsolete
p) ;; # obsolete
P) op=pragma ;;
r) op=regress ;;
s) op=shell ;;
@ -1818,15 +1792,11 @@ do case $in in
def=
test=
;;
package)protoflags="$protoflags -e $arg"
package)# obsolete
continue
;;
prototyped|noprototyped)
pragma="$pragma $op"
case $op in
prototyped) prototyped=1 ;;
*) prototyped= ;;
esac
# obsolete
continue
;;
pragma) pragma="$pragma $arg"
@ -2406,10 +2376,8 @@ int x;
$std
#include <sys/types.h>
$usr
_BEGIN_EXTERNS_
struct _iffe_struct { int _iffe_member; };
extern struct _iffe_struct* $x _ARG_((struct _iffe_struct*));
_END_EXTERNS_
extern struct _iffe_struct* $x (struct _iffe_struct*);
"
# some compilers with -O only warn for invalid intrinsic prototypes
case " $cc " in
@ -2445,13 +2413,7 @@ _END_EXTERNS_
;;
esac
copy - "extern $t $x$v;"
# NOTE: technically if prototyped is on all tests should
# be run through proto(1), but we'd like iffe to
# work sans proto -- so we drop the extern's in
# the test headers
case $prototyped in
'') usr="$usr${nl}extern $t $x$v;" ;;
esac
usr="$usr${nl}extern $t $x$v;"
else failure -
case $in in
"") while :
@ -3142,8 +3104,7 @@ int x;
n) sed '/^#/d' $tmp.h > $tmp.c
sed '/^#/d' $x > $tmp.t
;;
*) (proto -r $protoflags $tmp.h) >/dev/null 2>&1
sed 's,/\*[^/]*\*/, ,g' $tmp.h > $tmp.c
*) sed 's,/\*[^/]*\*/, ,g' $tmp.h > $tmp.c
sed 's,/\*[^/]*\*/, ,g' $x > $tmp.t
;;
esac
@ -3596,9 +3557,7 @@ $tst
$ext
$std
$usr
_BEGIN_EXTERNS_
extern int $statictest;
_END_EXTERNS_
int main(){char* i = (char*)&$statictest; return ((unsigned int)i)^0xaaaa;}
"
rm -f $tmp.exe
@ -3707,9 +3666,7 @@ $pre
case $inc in
?*) echo "$inc"
;;
*) echo "_BEGIN_EXTERNS_
extern int $v;
_END_EXTERNS_"
*) echo "extern int $v;"
;;
esac
echo "
@ -4081,9 +4038,7 @@ $v i;
#else
typedef int (*_IFFE_fun)();
#ifdef _IFFE_extern
_BEGIN_EXTERNS_
extern int $v();
_END_EXTERNS_
#endif
static _IFFE_fun i=(_IFFE_fun)$v;int main(){return ((unsigned int)i)^0xaaaa;}
#endif
@ -4124,9 +4079,7 @@ $std
$usr
$pre
$inc
_BEGIN_EXTERNS_
extern int foo();
_END_EXTERNS_
static int ((*i)())=foo;int main(){return(i==0);}
"
compile $cc -c $tmp.c <&$nullin >&$nullout
@ -4248,14 +4201,8 @@ $std
$usr
$pre
$inc
_BEGIN_EXTERNS_
struct _iffe_struct { int _iffe_member; };
#if _STD_
extern struct _iffe_struct* $v(struct _iffe_struct*);
#else
extern struct _iffe_struct* $v();
#endif
_END_EXTERNS_
"
# some compilers with -O only warn for invalid intrinsic prototypes
case " $cc " in
@ -4273,9 +4220,7 @@ $std
$usr
$pre
$inc
_BEGIN_EXTERNS_
int _iffe_int = $v / 2;
_END_EXTERNS_
"
compile $cc -c $tmp.c <&$nullin >&$nullout
report $? 1 "$v is a numeric constant" "$v is not a numeric constant"

View file

@ -1778,71 +1778,9 @@ iffe: test: is Tab_lE a symbol that needs a prototype ... yes'
TEST 17 'features/* => FEATURE/*'
EXEC -r -v run features/stdio
INPUT features/stdio $'set prototyped
header stdio.h'
OUTPUT FEATURE/stdio $'
/* : : generated by proto : : */
/* : : generated from features/stdio by iffe version 1995-03-19 : : */
INPUT features/stdio $'header stdio.h'
OUTPUT FEATURE/stdio $'/* : : generated from features/stdio by iffe version 1995-03-19 : : */
#ifndef _REGRESS
#if !defined(__PROTO__)
# if defined(__STDC__) || defined(__cplusplus) || defined(_proto) || defined(c_plusplus)
# if defined(__cplusplus)
# define __LINKAGE__ "C"
# else
# define __LINKAGE__
# endif
# define __STDARG__
# define __PROTO__(x) x
# define __OTORP__(x)
# define __PARAM__(n,o) n
# if !defined(__STDC__) && !defined(__cplusplus)
# if !defined(c_plusplus)
# define const
# endif
# define signed
# define void int
# define volatile
# define __V_ char
# else
# define __V_ void
# endif
# else
# define __PROTO__(x) ()
# define __OTORP__(x) x
# define __PARAM__(n,o) o
# define __LINKAGE__
# define __V_ char
# define const
# define signed
# define void int
# define volatile
# endif
# define __MANGLE__ __LINKAGE__
# if defined(__cplusplus) || defined(c_plusplus)
# define __VARARG__ ...
# else
# define __VARARG__
# endif
# if defined(__STDARG__)
# define __VA_START__(p,a) va_start(p,a)
# else
# define __VA_START__(p,a) va_start(p)
# endif
# if !defined(__INLINE__)
# if defined(__cplusplus)
# define __INLINE__ extern __MANGLE__ inline
# else
# if defined(_WIN32) && !defined(__GNUC__)
# define __INLINE__ __inline
# endif
# endif
# endif
#endif
#if !defined(__LINKAGE__)
#define __LINKAGE__ /* 2004-08-11 transition */
#endif
#define _REGRESS 1
#define _sys_types 1 /* #include <sys/types.h> ok */
#include <stdio.h>

View file

@ -72,7 +72,6 @@ extern int i;
int i = 1;
extern int f(){return(!i);}
int main(){FILE* fp=stdin;return(f());}' > pic.$src
echo 'class x {int n;} m;' > plusplus.$src
echo 'int prefix(){return 0;}' > prefix.$src
echo 'template<class T> int gt(T a, T b);
template<class T> int gt(T a, T b) { return a > b; }
@ -102,9 +101,7 @@ int i;
int main(){int j;j = i * 10;return j;}' > strip.$src
echo 'template <class T> void f(T){}
int main(){f(1);return 0;}' > toucho.$src
echo '#if defined(__STDC__) || defined(__cplusplus)
extern type call(int);
#endif
echo 'extern type call(int);
int main() {call(0);return(0);}' > tstlib.$src
echo 'int main(){return 0;}' > warn.$src
echo 'int f(){return 0;}' > warn1.$src
@ -154,7 +151,6 @@ nmedit=
nmflags=
no_protect=
optimize=
plusplus=
prefix_archive=lib
prefix_dynamic=
prefix_shared=lib
@ -433,7 +429,6 @@ int main() { f(); return 0; }' > picok.$src
esac
fi
$cc -c plusplus.$src && plusplus=1
$cc -E -dD dDflag.$src > t
case `grep '#define[ ][ ]*dDflag[ ][ ]*on' t` in
?*) dDflag=1 ;;
@ -441,90 +436,7 @@ esac
case `grep '#define.*_GNUC_' t` in
?*) gnu=1 ;;
esac
case $plusplus in
"") $cc -c stdc.$src && stdc=1 ;;
*) mkdir ptr
cd ptr
$cc -c ../ptr.$src &
NFS_locks_are_botched=$!
cd ..
if $cc -c require.$src && $cc require.$obj
then set x `$cc require.$obj 2>&1`
d=
while :
do shift
case $# in
0) break ;;
esac
case $1 in
-l*) d="$d $1" ;;
esac
done
for f in ++
do if $cc require.$obj -l$f
then set x `$cc require.$obj -l$f 2>&1`
r=
while :
do shift
case $# in
0) break ;;
esac
case $1 in
-l*) case " $d $r " in
*" "$1" "*) ;;
*) r="$r $1" ;;
esac
esac
done
case $r in
?*) require="$require $f"
echo '' $r > req.$f
;;
esac
fi
done
fi
cd ptr
for i in *
do if test -d $i
then repository=$i
break
fi
done
cd ..
kill -9 $NFS_locks_are_botched
rm -rf ptr
case $repository in
*?) mkdir ptr
cd ptr
i=PTR
case $repository in
$i) i=$i$i ;;
esac
$cc -ptr$i -c ../ptr.$src &
NFS_locks_are_botched=$!
cd ..
sleep 5
if test -d ptr/$i/$repository
then ptrimplicit=1
fi
kill -9 $NFS_locks_are_botched
rm -rf ptr
;;
esac
$cc -o implc implc.$src && $executable implc && implicitc=1
if $cc -c toucho.$src && test -f toucho.$obj
then o=`ls -l toucho.$obj`
if $cc -o toucho toucho.$obj && $executable toucho
then n=`ls -l touch.$obj`
case $n in
"$o") ;;
*) toucho=1 ;;
esac
fi
fi
;;
esac
$cc -c stdc.$src && stdc=1
if $cc -c pic.$src
then eval set x $probe_nmflags
@ -713,37 +625,34 @@ case $cc_dll:$cc_pic:$so:$dynamic:$static in
esac
dld=$xx
shared=$1
# does -nostartfiles make sense for C?
case $plusplus in
'') z=`wc -c < xxx$dll`
eval set x $probe_shared_nostart
while :
do shift
case $# in
0) break ;;
esac
rm -f xxx$dll
if $dld $shared $1 -o xxx$dll shared.$obj 2>e && test -r xxx$dll
then case `wc -c < xxx$dll` in
$z) ;;
*) if test -s e
then case `cat e` in
*[Ee][Rr][Rr][Oo][Rr]*|*[Ww][Aa][Rr][Nn][Ii][Nn][Gg]*|*[Oo][Pp][Tt][Ii][Oo][Nn]*)
continue
;;
esac
fi
case $shared in
'') shared=$1 ;;
*) shared="$shared $1" ;;
# does -nostartfiles make sense?
z=`wc -c < xxx$dll`
eval set x $probe_shared_nostart
while :
do shift
case $# in
0) break ;;
esac
rm -f xxx$dll
if $dld $shared $1 -o xxx$dll shared.$obj 2>e && test -r xxx$dll
then case `wc -c < xxx$dll` in
$z) ;;
*) if test -s e
then case `cat e` in
*[Ee][Rr][Rr][Oo][Rr]*|*[Ww][Aa][Rr][Nn][Ii][Nn][Gg]*|*[Oo][Pp][Tt][Ii][Oo][Nn]*)
continue
;;
esac
break
;;
fi
case $shared in
'') shared=$1 ;;
*) shared="$shared $1" ;;
esac
fi
done
;;
esac
break
;;
esac
fi
done
case $cc_dll in
"") cc_dll=$cc_dll_def ;;
esac
@ -1319,9 +1228,7 @@ case $stdlib in
fi
tstlib="$tstlib $implib"
if $cc -Dtype=void -Dcall=exit -c tstlib.$src && mv tstlib.$obj tst.$obj
then case $plusplus in
'') probe_lxx= ;;
esac
then probe_lxx=
l=
for sym in $probe_l $probe_lxx
do case $l in
@ -1666,9 +1573,6 @@ done
case $stdc in
?*) dialect="$dialect ANSI" ;;
esac
case $plusplus in
?*) dialect="$dialect C++" ;;
esac
case $hosted in
"") dialect="$dialect CROSS" ;;
esac

View file

@ -18,7 +18,6 @@
* Glenn Fowler <gsf@research.att.com> *
* *
***********************************************************************/
#pragma prototyped
#pragma clang diagnostic ignored "-Wdeprecated-register"
#pragma clang diagnostic ignored "-Wparentheses"

View file

@ -108,7 +108,7 @@ command=${0##*/}
case $(getopts '[-][123:xyz]' opt --xyz 2>/dev/null; echo 0$opt) in
0123) USAGE=$'
[-?
@(#)$Id: '$command$' (ksh 93u+m) 2021-12-15 $
@(#)$Id: '$command$' (ksh 93u+m) 2021-12-22 $
]
[-author?Glenn Fowler <gsf@research.att.com>]
[-author?Contributors to https://github.com/ksh93/ksh]
@ -252,13 +252,6 @@ case $(getopts '[-][123:xyz]' opt --xyz 2>/dev/null; echo 0$opt) in
file (\bMamfile\b). A Mamfile contains a portable makefile description
written in a simple dependency tree language using indented
\bmake\b...\bdone\b blocks.]
[+?Most component C source is prototyped. If \b$CC\b (default value
\bcc\b) is not a prototyping C compiler then \b'$command$' make\b runs
\bproto\b(1) on portions of the \b$PACKAGEROOT/src\b tree and places
the converted output files in the \b$PACKAGEROOT/proto/src\b tree.
Converted files are then viewpathed over the original source.
\bproto\b(1) converts an ANSI C subset to code that is compatible with
K&R, ANSI, and C++ dialects.]
[+?All scripts and commands under \b$PACKAGEROOT\b use \b$PATH\b
relative pathnames (via the \bAST\b \bpathpath\b(3) function); there
are no embedded absolute pathnames. This means that binaries generated
@ -271,7 +264,7 @@ case $(getopts '[-][123:xyz]' opt --xyz 2>/dev/null; echo 0$opt) in
[+SEE ALSO?\bautoconfig\b(1), \bcksum\b(1), \bexecrate\b(1), \bexpmake\b(1),
\bgzip\b(1), \bmake\b(1), \bmamake\b(1), \bpax\b(1),
\bpkgadd\b(1), \bpkgmk\b(1), \bproto\b(1), \bratz\b(1), \brpm\b(1),
\bpkgadd\b(1), \bpkgmk\b(1), \brpm\b(1),
\bsh\b(1), \btar\b(1), \boptget\b(3)]
'
case $* in
@ -321,7 +314,6 @@ tab=" "
verbose=0
AUTHORIZE=
DEBUG=
PROTOROOT=-
SHELLMAGIC=-
unset FIGNORE BINDIR DLLDIR ETCDIR FUNDIR INCLUDEDIR LIBDIR LOCALEDIR MANDIR SHAREDIR 2>/dev/null || true
@ -507,13 +499,6 @@ DETAILS
Mamfile contains a portable makefile description written in a simple
dependency tree language using indented make...done blocks.
Most component C source is prototyped. If $CC (default value cc) is not a
prototyping C compiler then package make runs proto(1) on portions of the
$PACKAGEROOT/src tree and places the converted output files in the
$PACKAGEROOT/proto/src tree. Converted files are then viewpathed over the
original source. proto(1) converts an ANSI C subset to code that is
compatible with K&R, ANSI, and C++ dialects.
All scripts and commands under $PACKAGEROOT use $PATH relative pathnames (via
the AST pathpath(3) function); there are no embedded absolute pathnames. This
means that binaries generated under $PACKAGEROOT may be copied to a different
@ -523,11 +508,10 @@ DETAILS
SEE ALSO
autoconfig(1), cksum(1), execrate(1), expmake(1), gzip(1), make(1),
mamake(1), pax(1), pkgadd(1), pkgmk(1), proto(1), ratz(1), rpm(1), sh(1),
tar(1), optget(3)
mamake(1), pax(1), pkgadd(1), pkgmk(1), rpm(1), sh(1), tar(1), optget(3)
IMPLEMENTATION
version package (ksh 93u+m) 2021-12-15
version package (ksh 93u+m) 2021-12-22
author Glenn Fowler <gsf@research.att.com>
author Contributors to https://github.com/ksh93/ksh
copyright (c) 1994-2012 AT&T Intellectual Property
@ -2257,7 +2241,7 @@ cat $INITROOT/$i.sh
$show export PATH
export PATH
;;
*) for i in package proto
*) for i in package
do if onpath $i
then EXECROOT=$(echo $_onpath_ | sed -e 's,//*[^/]*//*[^/]*$,,')
EXECTYPE=$(echo $EXECROOT | sed -e 's,.*/,,')
@ -2375,9 +2359,6 @@ cat $INITROOT/$i.sh
?*) USER_VPATH=$USER_VPATH:$i
USER_VPATH_CHAIN="$USER_VPATH_CHAIN $p $i"
p=$i
case $PROTOROOT in
-) executable $i/bin/mamake && PROTOROOT= ;;
esac
;;
esac
done
@ -2533,87 +2514,18 @@ esac
checkaout() # cmd ...
{
case $PROTOROOT in
-) PROTOROOT=
case $* in
ratz) if test -f $INITROOT/ratz.c -a -w $PACKAGEROOT
then test -f $INITROOT/hello.c || {
cat > $INITROOT/hello.c <<'!'
#ifndef printf
#include <stdio.h>
#endif
int main() { int new = 0; printf("hello world\n"); return new;}
!
}
test -f $INITROOT/p.c || {
cat > $INITROOT/p.c <<'!'
/*
* small test for prototyping cc
*/
int main(int argc, char** argv) { return argc || argv; }
!
}
fi
;;
esac
test -f $INITROOT/hello.c -a -f $INITROOT/p.c -a -w $PACKAGEROOT || {
for i
do onpath $i || {
note "$i: command not found"
return 1
}
done
return 0
case $cc in
'') _PACKAGE_cc=0
;;
*) _PACKAGE_cc=1
test -f $INITROOT/hello.c -a -f $INITROOT/p.c || {
note "$INITROOT: INIT package source not found"
return 1
}
case $cc in
'') _PACKAGE_cc=0
;;
*) _PACKAGE_cc=1
test -f $INITROOT/hello.c -a -f $INITROOT/p.c || {
note "$INITROOT: INIT package source not found"
return 1
}
# check for prototyping cc
# NOTE: proto.c must be K&R compatible
$CC -c $INITROOT/p.c >/dev/null 2>&1
c=$?
rm -f p.*
test 0 != "$c" && {
checkaout proto || return
PROTOROOT=$PACKAGEROOT/proto
$show PROTOROOT=$PACKAGEROOT/proto
export PROTOROOT
INITPROTO=$PROTOROOT/src/cmd/INIT
note "proto convert $PACKAGEROOT/src into $PROTOROOT/src"
dirs="src"
(
if test -f $PROTOROOT/UPDATE
then newer="-newer $PROTOROOT/UPDATE"
else newer=""
fi
case $exec in
'') cd $PACKAGEROOT
find $dirs -name '*.[CcHh]' $newer -print | proto -v -L - -C proto
;;
*) $exec cd $PACKAGEROOT
$exec "find $dirs -name '*.[CcHh]' $newer -print | proto -L - -C proto"
;;
esac
$exec touch $PROTOROOT/UPDATE
)
VPATH=$INSTALLROOT:$PROTOROOT:$PACKAGEROOT$USER_VPATH
$show VPATH=$VPATH
export VPATH
}
for i in arch arch/$HOSTTYPE arch/$HOSTTYPE/bin
do test -d $PACKAGEROOT/$i || $exec mkdir $PACKAGEROOT/$i || return
done
;;
esac
for i in arch arch/$HOSTTYPE arch/$HOSTTYPE/bin
do test -d $PACKAGEROOT/$i || $exec mkdir $PACKAGEROOT/$i || return
done
;;
esac
case $_PACKAGE_cc in
@ -2672,30 +2584,12 @@ int main(int argc, char** argv) { return argc || argv; }
case $(ls -t $INITROOT/$i.c $INSTALLROOT/bin/$i 2>/dev/null) in
"$INITROOT/$i.c"*)
note "update $INSTALLROOT/bin/$i"
if test proto != "$i" && executable $INSTALLROOT/bin/proto
then case $exec in
'') $INSTALLROOT/bin/proto -p $INITROOT/$i.c > $i.c || return ;;
*) $exec "$INSTALLROOT/bin/proto -p $INITROOT/$i.c > $i.c" ;;
esac
$exec $CC $CCFLAGS -o $INSTALLROOT/bin/$i $i.c || return
$exec rm -f $i.c
else if test ! -d $INSTALLROOT/bin
then for j in arch arch/$HOSTTYPE arch/$HOSTTYPE/bin
do test -d $PACKAGEROOT/$j || $exec mkdir $PACKAGEROOT/$j || return
done
fi
if test '' != "$PROTOROOT" -a -f $INITPROTO/$i.c
then $exec $CC $CCFLAGS -o $INSTALLROOT/bin/$i $INITPROTO/$i.c || return
else $exec $CC $CCFLAGS -o $INSTALLROOT/bin/$i $INITROOT/$i.c || return
fi
case $i:$exec in
proto:) test -d $INSTALLROOT/include || mkdir $INSTALLROOT/include
$INSTALLROOT/bin/proto -f /dev/null > $i.c
cmp -s $i.c $INSTALLROOT/include/prototyped.h 2>/dev/null || cp $i.c $INSTALLROOT/include/prototyped.h
rm $i.c
;;
esac
if test ! -d $INSTALLROOT/bin
then for j in arch arch/$HOSTTYPE arch/$HOSTTYPE/bin
do test -d $PACKAGEROOT/$j || $exec mkdir $PACKAGEROOT/$j || return
done
fi
$exec $CC $CCFLAGS -o $INSTALLROOT/bin/$i $INITROOT/$i.c || return
test -f $i.o && $exec rm -f $i.o
i=$PATH
PATH=/bin
@ -3172,9 +3066,9 @@ cat $j $k
esac
fi
# initialize a few mamake related commands
# initialize mamake
checkaout mamake proto ratz || exit
checkaout mamake || exit
# execrate if necessary
@ -3529,7 +3423,7 @@ results)set '' $target
case $filter in
errors) $exeg egrep '^pax:|\*\*\*' $j
;;
*) $exec egrep -iv '^($||[\+\[]|cc[^-:]|kill |make.*(file system time|has been replaced)|so|[0123456789]+ error|uncrate |[0123456789]+ block|ar: creat|iffe: test: |conf: (check|generate|test)|[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_][abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789]*=|gsf@research|ar:.*warning|cpio:|ld:.*(duplicate symbol|to obtain more information)|[0123456789]*$|(checking|creating|touch) [/abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789])| obsolete predefined symbol | is (almost always misused|dangerous|deprecated|not implemented)| trigraph| assigned to | cast .* different size| integer overflow .*<<| optimization may be attained | passed as |::__builtin|pragma.*prototyped|^creating.*\.a$|warning.*not optimized|exceeds size thresh|ld:.*preempts|is unchanged|with value >=|(-l|lib)\*|/(ast|sys)/(dir|limits|param|stropts)\.h.*redefined|usage|base registers|`\.\.\.` obsolete'"$i" $j |
*) $exec egrep -iv '^($||[\+\[]|cc[^-:]|kill |make.*(file system time|has been replaced)|so|[0123456789]+ error|uncrate |[0123456789]+ block|ar: creat|iffe: test: |conf: (check|generate|test)|[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_][abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789]*=|gsf@research|ar:.*warning|cpio:|ld:.*(duplicate symbol|to obtain more information)|[0123456789]*$|(checking|creating|touch) [/abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789])| obsolete predefined symbol | is (almost always misused|dangerous|deprecated|not implemented)| trigraph| assigned to | cast .* different size| integer overflow .*<<| optimization may be attained | passed as |::__builtin|^creating.*\.a$|warning.*not optimized|exceeds size thresh|ld:.*preempts|is unchanged|with value >=|(-l|lib)\*|/(ast|sys)/(dir|limits|param|stropts)\.h.*redefined|usage|base registers|`\.\.\.` obsolete'"$i" $j |
$exec grep :
;;
esac
@ -3564,6 +3458,7 @@ use) # finalize the environment
esac
eval PACKAGE_USE=$package_use
export PACKAGE_USE
unset LC_ALL # respect the user's locale again; avoids multibyte corruption
# run the command

View file

@ -37,9 +37,6 @@ done
for i in $probe_header
do echo "#include <$i>"
done
echo '#ifdef __cplusplus'
echo "int _Pr0b3_cplus=__cplusplus;"
echo '#endif'
echo '#ifdef _UWIN'
echo "int _Pr0b3_uwin=_UWIN;"
echo '#endif'
@ -71,7 +68,6 @@ echo '#endif'
include=
uwin=
cplus=
$cc -E easy.c 2>&1 |
egrep -i '^(#(line)? 1 .*\.[hH]| *int +_Pr0b3_[a-zA-Z_]* *= *[0-9])' |
@ -133,11 +129,6 @@ then : the payoff
set -- $(whence $cmd) "$@"
typ=$(package)
dialect="ANSI CLOSURE DYNAMIC EXPORT=DLL LIBPP -I-"
case ${cc##*/} in
*CC*) dialect="$dialect C++"
cplus=1
;;
esac
ld=${cc%cc}ld
if [[ ! -x $ld ]]
then ld=${cc%/*}/ld

File diff suppressed because it is too large Load diff

35
src/cmd/INIT/proto.sh Normal file
View file

@ -0,0 +1,35 @@
########################################################################
# #
# This file is part of the ksh 93u+m package #
# Copyright (c) 2021 Contributors to ksh 93u+m #
# <https://github.com/ksh93/ksh> #
# and is licensed under the #
# Eclipse Public License, Version 1.0 #
# #
# A copy of the License is available at #
# http://www.eclipse.org/org/documents/epl-v10.html #
# (with md5 checksum b35adb5213ca9657e911e9befb180842) #
# #
# Martijn Dekker <martijn@inlv.org> #
# #
########################################################################
# proto(1) has been removed. This is a backwards compatibility stub that allows
# compiling older AST code (with Mamfiles containing proto commands) using the
# current INIT system. This stub ignores all options, then invokes 'cat'.
while getopts ':dfhinprstvzPSC:e:l:o:L:' opt
do case $opt in
\?) case $OPTARG in
+) ;;
*) echo "proto: $OPTARG: unknown option"
echo 'Usage: proto [-dfhinprstvzP+S] [-C directory] [-e package] [-l file]'
echo ' [-o "name='\''value'\'' ..."] [-L file] file ...'
exit 2
;;
esac >&2
;;
esac
done
shift $((OPTIND - 1))
exec cat -- "$@"

File diff suppressed because it is too large Load diff