mirror of
git://git.code.sf.net/p/cdesktopenv/code
synced 2025-03-09 15:50:02 +00:00
Windows/Cygwin requires onerous special handling and the definition of additional _imp__* symbols to import/export symbols between dynamically linked binaries. Its support in AST used a lot of macros and code obfuscation. In the features/common test for this, AT&T called this the "Microsoft import/export nonsense". They're right, it's nonsense. Somehow, Microsoft's POSIX layer, SFU/Interix, always managed without it. No one has time to maintain this (especially considering how incredibly sluggish Cygwin is). And in fact, it had already fallen victim to bit rot; I confirmed this in my early experiments with reintroducing dynamic library support. No one has time to fix it, either. So, my apologies to any Cygwin fans; ksh 93u+m will never support dynamically loadable built-ins on Cygwin, even when I do manage to reintroduce dynamic linking properly.
111 lines
3.1 KiB
Bash
111 lines
3.1 KiB
Bash
########################################################################
|
|
# #
|
|
# This software is part of the ast package #
|
|
# Copyright (c) 1985-2011 AT&T Intellectual Property #
|
|
# Copyright (c) 2020-2022 Contributors to ksh 93u+m #
|
|
# 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 ;;
|
|
*) (command 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 "#define sig_info _sig_info_
|
|
|
|
#define kill ______kill
|
|
#define killpg ______killpg
|
|
#include <signal.h>
|
|
#undef kill
|
|
#undef killpg
|
|
#ifndef sigmask
|
|
#define sigmask(s) (1<<((s)-1))
|
|
#endif"
|
|
echo "#include <signal.h>
|
|
#ifdef TYPE
|
|
typedef TYPE (*Sig_handler_t)(ARG);
|
|
#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);
|
|
|
|
extern Sig_info_t sig_info;
|
|
|
|
#if _lib_sigflag && _npt_sigflag
|
|
extern int sigflag(int, int, int);
|
|
#endif
|
|
|
|
#if !_lib_sigflag
|
|
extern int sigflag(int, int, int);
|
|
#endif
|
|
extern int sigcritical(int);
|
|
extern int sigunblock(int);'
|