1
0
Fork 0
mirror of git://git.code.sf.net/p/cdesktopenv/code synced 2025-02-15 04:32:24 +00:00
cde/src/lib/libast/features/sig.sh
Martijn Dekker 9b45f2ccbe build system: modernise shell compatibility checks
All changed files:
- Put the shell in POSIX mode if it has an '-o posix' option.
- Remove nonsense disabling 'set -x' on bash. It's not broken.

bin/package, src/cmd/INIT/package.sh:
- Add check blocking native zsh mode (e.g., "$path" conflicts).
  Using a 'sh -> zsh' symlink works, so recommend that.
- Remove old ksh93 version check for a supposed conflict with
  libcmd. It was broken; it would revert to /bin/sh, but on illumos
  distributions, /bin/sh is a ksh93 of a version that is supposedly
  affected. It builds fine anyway.
- Rewrite checksh() to incorporate the shell compatibility checks
  that were previously in two different places in 'package'.

bin/ignore, src/cmd/INIT/ignore.sh,
bin/silent, src/cmd/INIT/silent.sh:
- Change bad check for a full POSIX 'export' command (no, $RANDOM
  has nothing to do with that) with a proper feature test.
2020-08-23 23:41:31 +01:00

138 lines
3.7 KiB
Bash

########################################################################
# #
# This software is part of the ast package #
# Copyright (c) 1985-2011 AT&T Intellectual Property #
# and is licensed under the #
# Eclipse Public License, Version 1.0 #
# by AT&T Intellectual Property #
# #
# A copy of the License is available at #
# http://www.eclipse.org/org/documents/epl-v10.html #
# (with md5 checksum b35adb5213ca9657e911e9befb180842) #
# #
# Information and Software Systems Research #
# AT&T Research #
# Florham Park NJ #
# #
# Glenn Fowler <gsf@research.att.com> #
# David Korn <dgk@research.att.com> #
# Phong Vo <kpv@research.att.com> #
# #
########################################################################
: generate sig features
case $ZSH_VERSION in
?*) emulate ksh ;;
*) (set -o posix) 2>/dev/null && set -o posix ;;
esac
case $# in
0) ;;
*) eval $1
shift
;;
esac
echo "#include <signal.h>
int xxx;" > $tmp.c
$cc -c $tmp.c >/dev/null 2>$tmp.e
echo "#pragma prototyped
#define sig_info _sig_info_
#if defined(__STDPP__directive) && defined(__STDPP__hide)
__STDPP__directive pragma pp:hide kill killpg
#else
#define kill ______kill
#define killpg ______killpg
#endif
#include <signal.h>
#if defined(__STDPP__directive) && defined(__STDPP__hide)
__STDPP__directive pragma pp:nohide kill killpg
#else
#undef kill
#undef killpg
#endif
#ifndef sigmask
#define sigmask(s) (1<<((s)-1))
#endif"
echo "#include <signal.h>
#ifdef TYPE
#if defined(__STDC__) || defined(__cplusplus) || defined(c_plusplus)
typedef TYPE (*Sig_handler_t)(ARG);
#else
typedef TYPE (*Sig_handler_t)();
#endif
#endif
Sig_handler_t f()
{
Sig_handler_t handler;
handler = signal(1, SIG_IGN);
return(handler);
}" > $tmp.c
if $cc -c $tmp.c >/dev/null
then :
else e=`wc -l $tmp.e`
i1= j1=
for i in void int
do for j in int,... ... int
do $cc -c -DTYPE=$i -DARG=$j $tmp.c >/dev/null 2>$tmp.e || continue
case `wc -l $tmp.e` in
$e) i1= j1=; break 2 ;;
esac
case $i1 in
"") i1=$i j1=$j ;;
esac
done
done
case $i1 in
?*) i=$i1 j=$j1 ;;
esac
echo "typedef $i (*Sig_handler_t)($j);"
fi
echo '
#define Handler_t Sig_handler_t
#define SIG_REG_PENDING (-1)
#define SIG_REG_POP 0
#define SIG_REG_EXEC 00001
#define SIG_REG_PROC 00002
#define SIG_REG_TERM 00004
#define SIG_REG_ALL 00777
#define SIG_REG_SET 01000
typedef struct
{
char** name;
char** text;
int sigmax;
} Sig_info_t;
extern int kill(pid_t, int);
extern int killpg(pid_t, int);
#if _BLD_ast && defined(__EXPORT__)
#define extern extern __EXPORT__
#endif
#if !_BLD_ast && defined(__IMPORT__)
#define extern extern __IMPORT__
#endif
extern Sig_info_t sig_info;
#undef extern
#if _lib_sigflag && _npt_sigflag
extern int sigflag(int, int, int);
#endif
#if _BLD_ast && defined(__EXPORT__)
#define extern __EXPORT__
#endif
#if !_lib_sigflag
extern int sigflag(int, int, int);
#endif
extern int sigcritical(int);
extern int sigunblock(int);
#undef extern'