mirror of
https://github.com/zsh-users/zsh
synced 2024-07-21 18:24:18 +00:00
Andrej: Dynamic loading on cygwin
This commit is contained in:
parent
de7b6730bc
commit
4f1aa826f5
|
@ -1,3 +1,10 @@
|
||||||
|
2000-08-02 Peter Stephenson <pws@csr.com>
|
||||||
|
|
||||||
|
* Andrej: 12487: configure.in, Etc/MACHINES, Src/Makefile.in,
|
||||||
|
Src/init.c, Src/main.c, Src/makepro.awk, Src/mkmakemod.sh,
|
||||||
|
Src/parse.c, Src/zsh.h, Src/Zle/zle_utils.c: Dynamic loading
|
||||||
|
on cygwin.
|
||||||
|
|
||||||
2000-08-02 Clint Adams <schizo@debian.org>
|
2000-08-02 Clint Adams <schizo@debian.org>
|
||||||
|
|
||||||
* 12489: Src/Modules/files.c, Src/Modules/parameter.c: check
|
* 12489: Src/Modules/files.c, Src/Modules/parameter.c: check
|
||||||
|
|
11
Etc/MACHINES
11
Etc/MACHINES
|
@ -30,14 +30,19 @@ Cygnus Solutions: Cygwin on Intel
|
||||||
be on a file system mounted as binary (the mount command shows
|
be on a file system mounted as binary (the mount command shows
|
||||||
`binmode').
|
`binmode').
|
||||||
|
|
||||||
Dynamic loading does not work (this is automatically detected),
|
Dynamic loading works as of cygwin-1.1.3 and binutils-20000722-1.
|
||||||
though libraries not compiled by default will work (see the file
|
It was not tested for earlier versions. This does not imply
|
||||||
INSTALL for how to add these to the base executable). In
|
that every module will work. New completion and in
|
||||||
particular zsh/zftp and zsh/mathfunc are known to work.
|
particular zsh/zftp and zsh/mathfunc are known to work.
|
||||||
|
|
||||||
Some of the tests in the Test subdirectory are known to fail:
|
Some of the tests in the Test subdirectory are known to fail:
|
||||||
this is because the UNIX environment is not completely implemented.
|
this is because the UNIX environment is not completely implemented.
|
||||||
|
|
||||||
|
Cygwin allows mount without existing mount point (e.g.
|
||||||
|
"mount //server/path /usr/src" where /usr/src does not exist).
|
||||||
|
Path completion will fail inside these mounts; make sure that
|
||||||
|
every mount point really exists.
|
||||||
|
|
||||||
Data General: DG/UX 5.4R3.10 MU01 (various AViiONs)
|
Data General: DG/UX 5.4R3.10 MU01 (various AViiONs)
|
||||||
Should build `out-of-the-box'.
|
Should build `out-of-the-box'.
|
||||||
|
|
||||||
|
|
|
@ -58,6 +58,8 @@ modules: headers
|
||||||
|
|
||||||
MAIN_OBJS = main.o
|
MAIN_OBJS = main.o
|
||||||
|
|
||||||
|
L = @L@
|
||||||
|
|
||||||
LSTMP =
|
LSTMP =
|
||||||
LLIST =
|
LLIST =
|
||||||
NSTMP = stamp-modobjs
|
NSTMP = stamp-modobjs
|
||||||
|
@ -65,6 +67,8 @@ NLIST = `cat stamp-modobjs`
|
||||||
|
|
||||||
LIBZSH = libzsh-$(VERSION).$(DL_EXT)
|
LIBZSH = libzsh-$(VERSION).$(DL_EXT)
|
||||||
NIBZSH =
|
NIBZSH =
|
||||||
|
INSTLIB = @INSTLIB@
|
||||||
|
UNINSTLIB = @UNINSTLIB@
|
||||||
|
|
||||||
ZSH_EXPORT = $(EXPOPT)zsh.export
|
ZSH_EXPORT = $(EXPOPT)zsh.export
|
||||||
ZSH_NXPORT =
|
ZSH_NXPORT =
|
||||||
|
@ -80,7 +84,7 @@ zsh$(EXEEXT): $(@L@IBZSH) $(@L@STMP) $(MAIN_OBJS) zsh.export
|
||||||
|
|
||||||
$(LIBZSH): $(LIBOBJS) $(NSTMP)
|
$(LIBZSH): $(LIBOBJS) $(NSTMP)
|
||||||
rm -f $@
|
rm -f $@
|
||||||
$(DLLINK) $(LIBOBJS) $(NLIST)
|
$(DLLINK) $(LIBOBJS) $(NLIST) $(LIBS)
|
||||||
|
|
||||||
stamp-modobjs: modobjs
|
stamp-modobjs: modobjs
|
||||||
@if cmp -s stamp-modobjs.tmp stamp-modobjs; then \
|
@if cmp -s stamp-modobjs.tmp stamp-modobjs; then \
|
||||||
|
@ -176,7 +180,7 @@ uninstall.bin: uninstall.bin-here
|
||||||
.PHONY: install.bin uninstall.bin
|
.PHONY: install.bin uninstall.bin
|
||||||
|
|
||||||
# install binary, creating install directory if necessary
|
# install binary, creating install directory if necessary
|
||||||
install.bin-here: zsh$(EXEEXT) install.bin-@L@
|
install.bin-here: zsh$(EXEEXT) $(INSTLIB)
|
||||||
$(sdir_top)/mkinstalldirs $(DESTDIR)$(bindir)
|
$(sdir_top)/mkinstalldirs $(DESTDIR)$(bindir)
|
||||||
$(INSTALL_PROGRAM) $(STRIPFLAGS) zsh$(EXEEXT) $(DESTDIR)$(bindir)/$(tzsh)-$(VERSION)$(EXEEXT)
|
$(INSTALL_PROGRAM) $(STRIPFLAGS) zsh$(EXEEXT) $(DESTDIR)$(bindir)/$(tzsh)-$(VERSION)$(EXEEXT)
|
||||||
if test -f $(DESTDIR)$(bindir)/$(tzsh)$(EXEEXT); then \
|
if test -f $(DESTDIR)$(bindir)/$(tzsh)$(EXEEXT); then \
|
||||||
|
@ -192,17 +196,21 @@ install.bin-N:
|
||||||
install.bin-L: $(LIBZSH)
|
install.bin-L: $(LIBZSH)
|
||||||
$(sdir_top)/mkinstalldirs $(DESTDIR)$(libdir)/$(tzsh)
|
$(sdir_top)/mkinstalldirs $(DESTDIR)$(libdir)/$(tzsh)
|
||||||
$(INSTALL_PROGRAM) $(LIBZSH) $(DESTDIR)$(libdir)/$(tzsh)/$(LIBZSH)
|
$(INSTALL_PROGRAM) $(LIBZSH) $(DESTDIR)$(libdir)/$(tzsh)/$(LIBZSH)
|
||||||
.PHONY: install.bin-N install.bin-L
|
install.cygwin-lib: $(LIBZSH)
|
||||||
|
$(INSTALL_PROGRAM) $(LIBZSH) $(DESTDIR)$(bindir)/$(LIBZSH)
|
||||||
|
.PHONY: install.bin-N install.bin-L install.cygwin-lib
|
||||||
|
|
||||||
# uninstall binary
|
# uninstall binary
|
||||||
uninstall.bin-here: uninstall.bin-@L@
|
uninstall.bin-here: $(UNINSTLIB)
|
||||||
rm -f $(DESTDIR)$(bindir)/$(tzsh)-$(VERSION) $(DESTDIR)$(bindir)/$(tzsh)$(EXEEXT)
|
rm -f $(DESTDIR)$(bindir)/$(tzsh)-$(VERSION) $(DESTDIR)$(bindir)/$(tzsh)$(EXEEXT)
|
||||||
.PHONY: uninstall.bin-here uninstall.bin-@L@
|
.PHONY: uninstall.bin-here uninstall.bin-@L@
|
||||||
|
|
||||||
uninstall.bin-N:
|
uninstall.bin-N:
|
||||||
uninstall.bin-L:
|
uninstall.bin-L:
|
||||||
rm -f $(DESTDIR)$(libdir)/$(tzsh)/$(LIBZSH)
|
rm -f $(DESTDIR)$(libdir)/$(tzsh)/$(LIBZSH)
|
||||||
.PHONY: uninstall.bin-N uninstall.bin-L
|
uninstall.cygwin-lib:
|
||||||
|
rm -f $(DESTDIR)$(bindir)/$(LIBZSH)
|
||||||
|
.PHONY: uninstall.bin-N uninstall.bin-L uninstall.cygwin-lib
|
||||||
|
|
||||||
# ========== DEPENDENCIES FOR CLEANUP ==========
|
# ========== DEPENDENCIES FOR CLEANUP ==========
|
||||||
|
|
||||||
|
|
|
@ -379,7 +379,7 @@ printbind(char *str, FILE *stream)
|
||||||
* The message must be metafied. */
|
* The message must be metafied. */
|
||||||
|
|
||||||
/**/
|
/**/
|
||||||
void
|
void mod_export
|
||||||
showmsg(char const *msg)
|
showmsg(char const *msg)
|
||||||
{
|
{
|
||||||
char const *p;
|
char const *p;
|
||||||
|
|
94
Src/init.c
94
Src/init.c
|
@ -1123,3 +1123,97 @@ fallback_compctlread(char *name, char **args, char *ops, char *reply)
|
||||||
NULL, 0);
|
NULL, 0);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This is real main entry point. This has to be mod_export'ed
|
||||||
|
* so zsh.exe can found it on Cygwin
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**/
|
||||||
|
mod_export int
|
||||||
|
zsh_main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
char **t;
|
||||||
|
int t0;
|
||||||
|
#ifdef USE_LOCALE
|
||||||
|
setlocale(LC_ALL, "");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
init_hackzero(argv, environ);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Provisionally set up the type table to allow metafication.
|
||||||
|
* This will be done properly when we have decided if we are
|
||||||
|
* interactive
|
||||||
|
*/
|
||||||
|
typtab['\0'] |= IMETA;
|
||||||
|
typtab[STOUC(Meta) ] |= IMETA;
|
||||||
|
typtab[STOUC(Marker)] |= IMETA;
|
||||||
|
for (t0 = (int)STOUC(Pound); t0 <= (int)STOUC(Nularg); t0++)
|
||||||
|
typtab[t0] |= ITOK | IMETA;
|
||||||
|
|
||||||
|
for (t = argv; *t; *t = metafy(*t, -1, META_ALLOC), t++);
|
||||||
|
|
||||||
|
zsh_name = argv[0];
|
||||||
|
do {
|
||||||
|
char *arg0 = zsh_name;
|
||||||
|
if (!(zsh_name = strrchr(arg0, '/')))
|
||||||
|
zsh_name = arg0;
|
||||||
|
else
|
||||||
|
zsh_name++;
|
||||||
|
if (*zsh_name == '-')
|
||||||
|
zsh_name++;
|
||||||
|
if (strcmp(zsh_name, "su") == 0) {
|
||||||
|
char *sh = zgetenv("SHELL");
|
||||||
|
if (sh && *sh && arg0 != sh)
|
||||||
|
zsh_name = sh;
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
} else
|
||||||
|
break;
|
||||||
|
} while (zsh_name);
|
||||||
|
|
||||||
|
fdtable_size = OPEN_MAX;
|
||||||
|
fdtable = zcalloc(fdtable_size);
|
||||||
|
|
||||||
|
createoptiontable();
|
||||||
|
emulate(zsh_name, 1); /* initialises most options */
|
||||||
|
opts[LOGINSHELL] = (**argv == '-');
|
||||||
|
opts[MONITOR] = 1; /* may be unset in init_io() */
|
||||||
|
opts[PRIVILEGED] = (getuid() != geteuid() || getgid() != getegid());
|
||||||
|
opts[USEZLE] = 1; /* may be unset in init_io() */
|
||||||
|
parseargs(argv); /* sets INTERACTIVE, SHINSTDIN and SINGLECOMMAND */
|
||||||
|
|
||||||
|
SHTTY = -1;
|
||||||
|
init_io();
|
||||||
|
setupvals();
|
||||||
|
init_signals();
|
||||||
|
init_bltinmods();
|
||||||
|
run_init_scripts();
|
||||||
|
init_misc();
|
||||||
|
|
||||||
|
for (;;) {
|
||||||
|
do
|
||||||
|
loop(1,0);
|
||||||
|
while (tok != ENDINPUT && (tok != LEXERR || isset(SHINSTDIN)));
|
||||||
|
if (tok == LEXERR) {
|
||||||
|
stopmsg = 1;
|
||||||
|
zexit(lastval, 0);
|
||||||
|
}
|
||||||
|
if (!(isset(IGNOREEOF) && interact)) {
|
||||||
|
#if 0
|
||||||
|
if (interact)
|
||||||
|
fputs(islogin ? "logout\n" : "exit\n", shout);
|
||||||
|
#endif
|
||||||
|
zexit(lastval, 0);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
noexitct++;
|
||||||
|
if (noexitct >= 10) {
|
||||||
|
stopmsg = 1;
|
||||||
|
zexit(lastval, 0);
|
||||||
|
}
|
||||||
|
zerrnam("zsh", (!islogin) ? "use 'exit' to exit."
|
||||||
|
: "use 'logout' to logout.", NULL, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
84
Src/main.c
84
Src/main.c
|
@ -34,87 +34,5 @@
|
||||||
int
|
int
|
||||||
main(int argc, char **argv)
|
main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
char **t;
|
return (zsh_main(argc, argv));
|
||||||
int t0;
|
|
||||||
#ifdef USE_LOCALE
|
|
||||||
setlocale(LC_ALL, "");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
init_hackzero(argv, environ);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Provisionally set up the type table to allow metafication.
|
|
||||||
* This will be done properly when we have decided if we are
|
|
||||||
* interactive
|
|
||||||
*/
|
|
||||||
typtab['\0'] |= IMETA;
|
|
||||||
typtab[STOUC(Meta) ] |= IMETA;
|
|
||||||
typtab[STOUC(Marker)] |= IMETA;
|
|
||||||
for (t0 = (int)STOUC(Pound); t0 <= (int)STOUC(Nularg); t0++)
|
|
||||||
typtab[t0] |= ITOK | IMETA;
|
|
||||||
|
|
||||||
for (t = argv; *t; *t = metafy(*t, -1, META_ALLOC), t++);
|
|
||||||
|
|
||||||
zsh_name = argv[0];
|
|
||||||
do {
|
|
||||||
char *arg0 = zsh_name;
|
|
||||||
if (!(zsh_name = strrchr(arg0, '/')))
|
|
||||||
zsh_name = arg0;
|
|
||||||
else
|
|
||||||
zsh_name++;
|
|
||||||
if (*zsh_name == '-')
|
|
||||||
zsh_name++;
|
|
||||||
if (strcmp(zsh_name, "su") == 0) {
|
|
||||||
char *sh = zgetenv("SHELL");
|
|
||||||
if (sh && *sh && arg0 != sh)
|
|
||||||
zsh_name = sh;
|
|
||||||
else
|
|
||||||
break;
|
|
||||||
} else
|
|
||||||
break;
|
|
||||||
} while (zsh_name);
|
|
||||||
|
|
||||||
fdtable_size = OPEN_MAX;
|
|
||||||
fdtable = zcalloc(fdtable_size);
|
|
||||||
|
|
||||||
createoptiontable();
|
|
||||||
emulate(zsh_name, 1); /* initialises most options */
|
|
||||||
opts[LOGINSHELL] = (**argv == '-');
|
|
||||||
opts[MONITOR] = 1; /* may be unset in init_io() */
|
|
||||||
opts[PRIVILEGED] = (getuid() != geteuid() || getgid() != getegid());
|
|
||||||
opts[USEZLE] = 1; /* may be unset in init_io() */
|
|
||||||
parseargs(argv); /* sets INTERACTIVE, SHINSTDIN and SINGLECOMMAND */
|
|
||||||
|
|
||||||
SHTTY = -1;
|
|
||||||
init_io();
|
|
||||||
setupvals();
|
|
||||||
init_signals();
|
|
||||||
init_bltinmods();
|
|
||||||
run_init_scripts();
|
|
||||||
init_misc();
|
|
||||||
|
|
||||||
for (;;) {
|
|
||||||
do
|
|
||||||
loop(1,0);
|
|
||||||
while (tok != ENDINPUT && (tok != LEXERR || isset(SHINSTDIN)));
|
|
||||||
if (tok == LEXERR) {
|
|
||||||
stopmsg = 1;
|
|
||||||
zexit(lastval, 0);
|
|
||||||
}
|
|
||||||
if (!(isset(IGNOREEOF) && interact)) {
|
|
||||||
#if 0
|
|
||||||
if (interact)
|
|
||||||
fputs(islogin ? "logout\n" : "exit\n", shout);
|
|
||||||
#endif
|
|
||||||
zexit(lastval, 0);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
noexitct++;
|
|
||||||
if (noexitct >= 10) {
|
|
||||||
stopmsg = 1;
|
|
||||||
zexit(lastval, 0);
|
|
||||||
}
|
|
||||||
zerrnam("zsh", (!islogin) ? "use 'exit' to exit."
|
|
||||||
: "use 'logout' to logout.", NULL, 0);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,13 +18,9 @@ BEGIN {
|
||||||
gsub(/\//, "_", name)
|
gsub(/\//, "_", name)
|
||||||
ARGC--
|
ARGC--
|
||||||
|
|
||||||
# `locals' is a list of local declarations, built up while global
|
printf "E#ifndef have_%s_globals\n", name
|
||||||
# declarations are output.
|
printf "E#define have_%s_globals\n", name
|
||||||
locals = ""
|
printf "E\n"
|
||||||
|
|
||||||
printf "#ifndef have_%s_globals\n", name
|
|
||||||
printf "#define have_%s_globals\n", name
|
|
||||||
printf "\n"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# all relevant declarations are preceded by "/**/" on a line by itself
|
# all relevant declarations are preceded by "/**/" on a line by itself
|
||||||
|
@ -40,6 +36,13 @@ BEGIN {
|
||||||
aborting = 1
|
aborting = 1
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
if (line == "" && $0 ~ /^[ \t]*#/) {
|
||||||
|
# Directly after the /**/ was a preprocessor line.
|
||||||
|
# Spit it out and re-start the outer loop.
|
||||||
|
printf "E%s\n", $0
|
||||||
|
printf "L%s\n", $0
|
||||||
|
next
|
||||||
|
}
|
||||||
gsub(/\t/, " ")
|
gsub(/\t/, " ")
|
||||||
line = line " " $0
|
line = line " " $0
|
||||||
gsub(/\/\*([^*]|\*+[^*\/])*\*+\//, " ", line)
|
gsub(/\/\*([^*]|\*+[^*\/])*\*+\//, " ", line)
|
||||||
|
@ -74,13 +77,16 @@ BEGIN {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
sub(/^ */, "", line)
|
sub(/^ */, "", line)
|
||||||
match(line, /^((const|enum|static|struct|union) +)*([_0-9A-Za-z]+ +|((char|double|float|int|long|short|unsigned|void) +)+)((const|static) +)*/)
|
match(line, /^((const|enum|mod_export|static|struct|union) +)*([_0-9A-Za-z]+ +|((char|double|float|int|long|short|unsigned|void) +)+)((const|static) +)*/)
|
||||||
dtype = substr(line, 1, RLENGTH)
|
dtype = substr(line, 1, RLENGTH)
|
||||||
sub(/ *$/, "", dtype)
|
sub(/ *$/, "", dtype)
|
||||||
islocal = " " dtype " " ~ / static /
|
if(" " dtype " " ~ / static /)
|
||||||
|
locality = "L"
|
||||||
|
else
|
||||||
|
locality = "E"
|
||||||
|
exported = " " dtype " " ~ / mod_export /
|
||||||
line = substr(line, RLENGTH+1) ","
|
line = substr(line, RLENGTH+1) ","
|
||||||
# Handle each declarator.
|
# Handle each declarator.
|
||||||
output = ""
|
|
||||||
while(match(line, /^[^,]*,/)) {
|
while(match(line, /^[^,]*,/)) {
|
||||||
# Separate out the name from the declarator. Use "@+" and "@-"
|
# Separate out the name from the declarator. Use "@+" and "@-"
|
||||||
# to bracket the name within the declarator. Strip off any
|
# to bracket the name within the declarator. Strip off any
|
||||||
|
@ -103,44 +109,29 @@ BEGIN {
|
||||||
gsub(/@>/, ")", dcltor)
|
gsub(/@>/, ")", dcltor)
|
||||||
gsub(/@!/, ",", dcltor)
|
gsub(/@!/, ",", dcltor)
|
||||||
|
|
||||||
# If this is a module boot/cleanup function, conditionally rename it.
|
# If this is exported, add it to the exported symbol list.
|
||||||
if(" " dtype " " ~ / int / && dcltor ~ / *@\+(boot|cleanup)_[_0-9A-Za-z]+@- *_\(\( *Module +[_0-9A-Za-z]+ *\)\) */) {
|
if(exported)
|
||||||
modtype = dnam
|
printf "X%s\n", dnam
|
||||||
sub(/_.*$/, "", modtype)
|
|
||||||
output = output "# if defined(DYNAMIC_NAME_CLASH_OK) && defined(MODULE)\n"
|
|
||||||
output = output "# define " dnam " " modtype "_\n"
|
|
||||||
output = output "# endif\n"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Format the declaration for output
|
# Format the declaration for output
|
||||||
dcl = dtype " " dcltor ";"
|
dcl = dtype " " dcltor ";"
|
||||||
if(!islocal)
|
if(locality ~ /E/)
|
||||||
dcl = "extern " dcl
|
dcl = "extern " dcl
|
||||||
|
if(isfunc)
|
||||||
|
gsub(/ mod_export /, " mod_import_function ", dcl)
|
||||||
|
else
|
||||||
|
gsub(/ mod_export /, " mod_import_variable ", dcl)
|
||||||
gsub(/@[+-]/, "", dcl)
|
gsub(/@[+-]/, "", dcl)
|
||||||
gsub(/ +/, " ", dcl)
|
gsub(/ +/, " ", dcl)
|
||||||
while(match(dcl, /[^_0-9A-Za-z] ./) || match(dcl, /. [^_0-9A-Za-z]/))
|
while(match(dcl, /[^_0-9A-Za-z] ./) || match(dcl, /. [^_0-9A-Za-z]/))
|
||||||
dcl = substr(dcl, 1, RSTART) substr(dcl, RSTART+2)
|
dcl = substr(dcl, 1, RSTART) substr(dcl, RSTART+2)
|
||||||
output = output dcl "\n"
|
printf "%s%s\n", locality, dcl
|
||||||
}
|
}
|
||||||
|
|
||||||
# Output global declarations now, but save up locals until the end.
|
|
||||||
if(islocal)
|
|
||||||
locals = locals output
|
|
||||||
else
|
|
||||||
printf "%s", output
|
|
||||||
}
|
}
|
||||||
|
|
||||||
END {
|
END {
|
||||||
if(aborting)
|
if(aborting)
|
||||||
exit 1
|
exit 1
|
||||||
printf "\n"
|
printf "E\n"
|
||||||
printf "#endif /* !have_%s_globals */\n", name
|
printf "E#endif /* !have_%s_globals */\n", name
|
||||||
if(locals != "") {
|
|
||||||
printf "\n"
|
|
||||||
printf "#ifndef GLOBAL_PROTOTYPES\n"
|
|
||||||
printf "\n"
|
|
||||||
printf locals
|
|
||||||
printf "\n"
|
|
||||||
printf "#endif /* !GLOBAL_PROTOTYPES */\n"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
352
Src/mkmakemod.sh
352
Src/mkmakemod.sh
|
@ -17,15 +17,21 @@
|
||||||
# defines one module. The .mdd file is actually a shell script, which will
|
# defines one module. The .mdd file is actually a shell script, which will
|
||||||
# be sourced. It may define the following shell variables:
|
# be sourced. It may define the following shell variables:
|
||||||
#
|
#
|
||||||
# moddeps modules on which this module depends (default none)
|
# name name of this module
|
||||||
# nozshdep non-empty indicates no dependence on the `zsh' pseudo-module
|
# moddeps modules on which this module depends (default none)
|
||||||
# alwayslink if non-empty, always link the module into the executable
|
# nozshdep non-empty indicates no dependence on the `zsh/main' pseudo-module
|
||||||
# autobins builtins defined by the module, for autoloading
|
# alwayslink if non-empty, always link the module into the executable
|
||||||
# objects .o files making up this module (*must* be defined)
|
# autobins builtins defined by the module, for autoloading
|
||||||
# proto .pro files for this module (default generated from $objects)
|
# autoinfixconds infix condition codes defined by the module, for
|
||||||
# headers extra headers for this module (default none)
|
# autoloading (without the leading `-')
|
||||||
# hdrdeps extra headers on which the .mdh depends (default none)
|
# autoprefixconds like autoinfixconds, but for prefix condition codes
|
||||||
# otherincs extra headers that are included indirectly (default none)
|
# autoparams parameters defined by the module, for autoloading
|
||||||
|
# automathfuncs math functions defined by the module, for autoloading
|
||||||
|
# objects .o files making up this module (*must* be defined)
|
||||||
|
# proto .syms files for this module (default generated from $objects)
|
||||||
|
# headers extra headers for this module (default none)
|
||||||
|
# hdrdeps extra headers on which the .mdh depends (default none)
|
||||||
|
# otherincs extra headers that are included indirectly (default none)
|
||||||
#
|
#
|
||||||
# The .mdd file may also include a Makefile.in fragment between lines
|
# The .mdd file may also include a Makefile.in fragment between lines
|
||||||
# `:<<\Make' and `Make' -- this will be copied into Makemod.in.
|
# `:<<\Make' and `Make' -- this will be copied into Makemod.in.
|
||||||
|
@ -34,9 +40,9 @@
|
||||||
# For each module in also knows how to build a .mdh file. Each source file
|
# For each module in also knows how to build a .mdh file. Each source file
|
||||||
# should #include the .mdh file for the module it is a part of. The .mdh
|
# should #include the .mdh file for the module it is a part of. The .mdh
|
||||||
# file #includes the .mdh files for any module dependencies, then each of
|
# file #includes the .mdh files for any module dependencies, then each of
|
||||||
# $headers, and then each of $proto (for global declarations). It will
|
# $headers, and then each .epro (for global declarations). It will
|
||||||
# be recreated if any of the dependency .mdh files changes, or if any of
|
# be recreated if any of the dependency .mdh files changes, or if any of
|
||||||
# $headers or $hdrdeps changes. When anything depends on it, all of $proto
|
# $headers or $hdrdeps changes. When anything depends on it, all the .epros
|
||||||
# and $otherincs will be made up to date, but the .mdh file won't actually
|
# and $otherincs will be made up to date, but the .mdh file won't actually
|
||||||
# be rebuilt if those files change.
|
# be rebuilt if those files change.
|
||||||
#
|
#
|
||||||
|
@ -67,6 +73,15 @@ sed_normalise='
|
||||||
s,\(.\)/$,\1,
|
s,\(.\)/$,\1,
|
||||||
'
|
'
|
||||||
|
|
||||||
|
CYGWIN=no
|
||||||
|
if uname -s > /dev/null 2>&1; then
|
||||||
|
case `uname -s` in
|
||||||
|
CYGWIN* )
|
||||||
|
CYGWIN=yes
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
# decide which stages to process
|
# decide which stages to process
|
||||||
first_stage=true
|
first_stage=true
|
||||||
second_stage=true
|
second_stage=true
|
||||||
|
@ -98,14 +113,14 @@ if $first_stage; then
|
||||||
echo
|
echo
|
||||||
|
|
||||||
. Src/modules.index
|
. Src/modules.index
|
||||||
bin_mods=" zsh "`sed 's/^/ /;s/$/ /' Src/modules-bltin`
|
bin_mods=" zsh/main "`sed 's/^/ /;s/$/ /' Src/modules-bltin`
|
||||||
if grep '%@D@%D%' config.status >/dev/null; then
|
if grep '%@D@%D%' config.status >/dev/null; then
|
||||||
is_dynamic=true
|
is_dynamic=true
|
||||||
else
|
else
|
||||||
is_dynamic=false
|
is_dynamic=false
|
||||||
fi
|
fi
|
||||||
|
|
||||||
here_modules=
|
here_mddnames=
|
||||||
all_subdirs=
|
all_subdirs=
|
||||||
all_modobjs=
|
all_modobjs=
|
||||||
all_modules=
|
all_modules=
|
||||||
|
@ -114,30 +129,31 @@ if $first_stage; then
|
||||||
all_proto=
|
all_proto=
|
||||||
lastsub=//
|
lastsub=//
|
||||||
for module in $module_list; do
|
for module in $module_list; do
|
||||||
eval "loc=\$loc_$module"
|
q_module=`echo $module | sed 's,Q,Qq,g;s,_,Qu,g;s,/,Qs,g'`
|
||||||
case $loc in
|
eval "modfile=\$modfile_$q_module"
|
||||||
$the_subdir)
|
case $modfile in
|
||||||
here_modules="$here_modules $module"
|
$the_subdir/$lastsub/*) ;;
|
||||||
|
$the_subdir/*/*)
|
||||||
|
lastsub=`echo $modfile | sed 's,^'$the_subdir'/,,;s,/[^/]*$,,'`
|
||||||
|
all_subdirs="$all_subdirs $lastsub"
|
||||||
|
;;
|
||||||
|
$the_subdir/*)
|
||||||
|
mddname=`echo $modfile | sed 's,^.*/,,;s,\.mdd$,,'`
|
||||||
|
here_mddnames="$here_mddnames $mddname"
|
||||||
build=$is_dynamic
|
build=$is_dynamic
|
||||||
case $is_dynamic@$bin_mods in
|
case $is_dynamic@$bin_mods in
|
||||||
*" $module "*)
|
*" $module "*)
|
||||||
build=true
|
build=true
|
||||||
all_modobjs="$all_modobjs modobjs.${module}" ;;
|
all_modobjs="$all_modobjs modobjs.${mddname}" ;;
|
||||||
true@*)
|
true@*)
|
||||||
all_modules="$all_modules ${module}.\$(DL_EXT)" ;;
|
all_modules="$all_modules ${mddname}.\$(DL_EXT)" ;;
|
||||||
esac
|
esac
|
||||||
all_mdds="$all_mdds ${module}.mdd"
|
all_mdds="$all_mdds ${mddname}.mdd"
|
||||||
$build && all_mdhs="$all_mdhs ${module}.mdh"
|
$build && all_mdhs="$all_mdhs ${mddname}.mdh"
|
||||||
$build && all_proto="$all_proto proto.${module}"
|
$build && all_proto="$all_proto proto.${mddname}"
|
||||||
;;
|
|
||||||
$lastsub | $lastsub/*) ;;
|
|
||||||
$the_subdir/*)
|
|
||||||
all_subdirs="$all_subdirs $loc"
|
|
||||||
lastsub=$loc
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
all_subdirs=`echo "$all_subdirs" | sed "s' $the_subdir/' 'g"`
|
|
||||||
echo "MODOBJS =$all_modobjs"
|
echo "MODOBJS =$all_modobjs"
|
||||||
echo "MODULES =$all_modules"
|
echo "MODULES =$all_modules"
|
||||||
echo "MDDS =$all_mdds"
|
echo "MDDS =$all_mdds"
|
||||||
|
@ -145,6 +161,11 @@ if $first_stage; then
|
||||||
echo "PROTOS =$all_proto"
|
echo "PROTOS =$all_proto"
|
||||||
echo "SUBDIRS =$all_subdirs"
|
echo "SUBDIRS =$all_subdirs"
|
||||||
echo
|
echo
|
||||||
|
echo "ENTRYOBJ = \$(dir_src)/modentry..o"
|
||||||
|
echo "NNTRYOBJ ="
|
||||||
|
echo "ENTRYOPT = -emodentry"
|
||||||
|
echo "NNTRYOPT ="
|
||||||
|
echo
|
||||||
|
|
||||||
echo "##### ===== INCLUDING Makemod.in.in ===== #####"
|
echo "##### ===== INCLUDING Makemod.in.in ===== #####"
|
||||||
echo
|
echo
|
||||||
|
@ -159,95 +180,230 @@ if $first_stage; then
|
||||||
|
|
||||||
other_mdhs=
|
other_mdhs=
|
||||||
remote_mdhs=
|
remote_mdhs=
|
||||||
for module in $here_modules; do
|
other_exports=
|
||||||
|
remote_exports=
|
||||||
|
other_modules=
|
||||||
|
remote_modules=
|
||||||
|
for mddname in $here_mddnames; do
|
||||||
|
|
||||||
unset moddeps nozshdep alwayslink
|
unset name moddeps nozshdep alwayslink hasexport
|
||||||
unset autobins
|
unset autobins autoinfixconds autoprefixconds autoparams automathfuncs
|
||||||
unset objects proto headers hdrdeps otherincs
|
unset objects proto headers hdrdeps otherincs
|
||||||
. $top_srcdir/$the_subdir/${module}.mdd
|
. $top_srcdir/$the_subdir/${mddname}.mdd
|
||||||
|
q_name=`echo $name | sed 's,Q,Qq,g;s,_,Qu,g;s,/,Qs,g'`
|
||||||
test -n "${moddeps+set}" || moddeps=
|
test -n "${moddeps+set}" || moddeps=
|
||||||
test -n "$nozshdep" || moddeps="$moddeps zsh"
|
test -n "$nozshdep" || moddeps="$moddeps zsh/main"
|
||||||
test -n "${proto+set}" ||
|
test -n "${proto+set}" ||
|
||||||
proto=`echo $objects '' | sed 's,\.o ,.pro ,g'`
|
proto=`echo $objects '' | sed 's,\.o ,.syms ,g'`
|
||||||
|
|
||||||
dobjects=`echo $objects '' | sed 's,\.o ,..o ,g'`
|
dobjects=`echo $objects '' | sed 's,\.o ,..o ,g'`
|
||||||
modhdeps=
|
modhdeps=
|
||||||
|
mododeps=
|
||||||
|
exportdeps=
|
||||||
|
imports=
|
||||||
|
q_moddeps=
|
||||||
|
dllname=
|
||||||
for dep in $moddeps; do
|
for dep in $moddeps; do
|
||||||
eval "loc=\$loc_$dep"
|
q_dep=`echo $dep | sed 's,Q,Qq,g;s,_,Qu,g;s,/,Qs,g'`
|
||||||
|
q_moddeps="$q_moddeps $q_dep"
|
||||||
|
eval "depfile=\$modfile_$q_dep"
|
||||||
|
eval `echo $depfile | sed 's,/\([^/]*\)\.mdd$,;depbase=\1,;s,^,loc=,'`
|
||||||
|
case "$binmod" in
|
||||||
|
*" $dep "* )
|
||||||
|
dep=zsh/main
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
case $the_subdir in
|
case $the_subdir in
|
||||||
$loc)
|
$loc)
|
||||||
mdh="${dep}.mdh"
|
mdh="${depbase}.mdh"
|
||||||
|
export="${depbase}.export"
|
||||||
|
case "$dep" in
|
||||||
|
zsh/main )
|
||||||
|
mdll="\$(dir_top)/Src/libzsh-\$(VERSION).\$(DL_EXT) "
|
||||||
|
;;
|
||||||
|
zsh/$mddname )
|
||||||
|
mdll=
|
||||||
|
;;
|
||||||
|
* )
|
||||||
|
mdll="${depbase}.\$(DL_EXT) "
|
||||||
|
;;
|
||||||
|
esac
|
||||||
;;
|
;;
|
||||||
$loc/*)
|
$loc/*)
|
||||||
mdh="\$(dir_top)/$loc/${dep}.mdh"
|
mdh="\$(dir_top)/$loc/${depbase}.mdh"
|
||||||
case "$other_mdhs " in
|
case "$other_mdhs " in
|
||||||
*" $mdh "*) ;;
|
*" $mdh "*) ;;
|
||||||
*) other_mdhs="$other_mdhs $mdh" ;;
|
*) other_mdhs="$other_mdhs $mdh" ;;
|
||||||
esac
|
esac
|
||||||
|
export="\$(dir_top)/$loc/${depbase}.export"
|
||||||
|
case "$other_exports " in
|
||||||
|
*" $export "*) ;;
|
||||||
|
*) other_exports="$other_exports $export" ;;
|
||||||
|
esac
|
||||||
|
case "$dep" in
|
||||||
|
zsh/main )
|
||||||
|
mdll="\$(dir_top)/Src/libzsh-\$(VERSION).\$(DL_EXT) "
|
||||||
|
;;
|
||||||
|
zsh/$mddname )
|
||||||
|
mdll=
|
||||||
|
;;
|
||||||
|
* )
|
||||||
|
mdll="\$(dir_top)/$loc/${depbase}.\$(DL_EXT) "
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
case "$other_modules " in
|
||||||
|
*" $mdll "*) ;;
|
||||||
|
*) other_modules="$other_modules $mdll" ;;
|
||||||
|
esac
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
mdh="\$(dir_top)/$loc/${dep}.mdh"
|
mdh="\$(dir_top)/$loc/${depbase}.mdh"
|
||||||
case "$remote_mdhs " in
|
case "$remote_mdhs " in
|
||||||
*" $mdh "*) ;;
|
*" $mdh "*) ;;
|
||||||
*) remote_mdhs="$remote_mdhs $mdh" ;;
|
*) remote_mdhs="$remote_mdhs $mdh" ;;
|
||||||
esac
|
esac
|
||||||
|
export="\$(dir_top)/$loc/${depbase}.export"
|
||||||
|
case "$remote_exports " in
|
||||||
|
*" $export "*) ;;
|
||||||
|
*) remote_exports="$remote_exports $export" ;;
|
||||||
|
esac
|
||||||
|
case "$dep" in
|
||||||
|
zsh/main )
|
||||||
|
mdll="\$(dir_top)/Src/libzsh-\$(VERSION).\$(DL_EXT) "
|
||||||
|
;;
|
||||||
|
zsh/$mddname )
|
||||||
|
mdll=
|
||||||
|
;;
|
||||||
|
* )
|
||||||
|
mdll="\$(dir_top)/$loc/${depbase}.\$(DL_EXT) "
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
case "$remote_modules " in
|
||||||
|
*" $mdll "*) ;;
|
||||||
|
*) remote_modules="$remote_modules $mdll" ;;
|
||||||
|
esac
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
modhdeps="$modhdeps $mdh"
|
modhdeps="$modhdeps $mdh"
|
||||||
|
exportdeps="$exportdeps $export"
|
||||||
|
imports="$imports \$(IMPOPT)$export"
|
||||||
|
if test $CYGWIN = yes -a -n "$mdll"; then
|
||||||
|
case "$mododeps" in
|
||||||
|
*" $mdll "* )
|
||||||
|
:
|
||||||
|
;;
|
||||||
|
* )
|
||||||
|
mododeps="$mododeps $mdll"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
done
|
done
|
||||||
|
if test $CYGWIN = yes; then
|
||||||
|
dllname="--dllname $q_name"
|
||||||
|
fi
|
||||||
|
|
||||||
echo "##### ===== DEPENDENCIES GENERATED FROM ${module}.mdd ===== #####"
|
echo "##### ===== DEPENDENCIES GENERATED FROM ${mddname}.mdd ===== #####"
|
||||||
echo
|
echo
|
||||||
echo "MODOBJS_${module} = $objects"
|
echo "MODOBJS_${mddname} = $objects"
|
||||||
echo "MODDOBJS_${module} = $dobjects"
|
echo "MODDOBJS_${mddname} = $dobjects \$(@E@NTRYOBJ)"
|
||||||
echo "PROTO_${module} = $proto"
|
echo "SYMS_${mddname} = $proto"
|
||||||
echo "INCS_${module} = \$(PROTO_${module}) $otherincs"
|
echo "EPRO_${mddname} = "`echo $proto '' | sed 's,\.syms ,.epro ,g'`
|
||||||
|
echo "INCS_${mddname} = \$(EPRO_${mddname}) $otherincs"
|
||||||
|
echo "EXPIMP_${mddname} = $imports \$(EXPOPT)$mddname.export"
|
||||||
|
echo "NXPIMP_${mddname} ="
|
||||||
|
echo "DEPMODS_${mddname} = $mododeps"
|
||||||
|
echo "DLLNAME_${mddname} = $dllname"
|
||||||
echo
|
echo
|
||||||
echo "proto.${module}: \$(PROTO_${module})"
|
echo "proto.${mddname}: \$(EPRO_${mddname})"
|
||||||
echo "\$(PROTO_${module}): \$(PROTODEPS)"
|
echo "\$(SYMS_${mddname}): \$(PROTODEPS)"
|
||||||
echo
|
echo
|
||||||
echo "modobjs.${module}: \$(MODOBJS_${module})"
|
echo "${mddname}.export: \$(SYMS_${mddname})"
|
||||||
echo " echo '' \$(MODOBJS_${module}) $modobjs_sed>> \$(dir_src)/stamp-modobjs.tmp"
|
echo " ( echo '#!'; cat \$(SYMS_${mddname}) | sed -n '/^X/{s/^X//;p;}' | sort -u ) > \$@"
|
||||||
|
echo
|
||||||
|
echo "modobjs.${mddname}: \$(MODOBJS_${mddname})"
|
||||||
|
echo " echo '' \$(MODOBJS_${mddname}) $modobjs_sed>> \$(dir_src)/stamp-modobjs.tmp"
|
||||||
echo
|
echo
|
||||||
if test -z "$alwayslink"; then
|
if test -z "$alwayslink"; then
|
||||||
echo "${module}.\$(DL_EXT): \$(MODDOBJS_${module})"
|
case " $all_modules" in *" ${mddname}."*)
|
||||||
|
echo "install.modules-here: install.modules.${mddname}"
|
||||||
|
echo "uninstall.modules-here: uninstall.modules.${mddname}"
|
||||||
|
echo
|
||||||
|
;; esac
|
||||||
|
instsubdir=`echo $name | sed 's,^,/,;s,/[^/]*$,,'`
|
||||||
|
echo "install.modules.${mddname}: ${mddname}.\$(DL_EXT)"
|
||||||
|
echo " \$(sdir_top)/mkinstalldirs \$(DESTDIR)\$(MODDIR)${instsubdir}"
|
||||||
|
echo " \$(INSTALL_PROGRAM) ${mddname}.\$(DL_EXT) \$(DESTDIR)\$(MODDIR)/${name}.\$(DL_EXT)"
|
||||||
|
echo
|
||||||
|
echo "uninstall.modules.${mddname}:"
|
||||||
|
echo " rm -f \$(DESTDIR)\$(MODDIR)/${name}.\$(DL_EXT)"
|
||||||
|
echo
|
||||||
|
echo "${mddname}.\$(DL_EXT): \$(MODDOBJS_${mddname}) ${mddname}.export $exportdeps \$(DEPMODS_${mddname})"
|
||||||
echo ' rm -f $@'
|
echo ' rm -f $@'
|
||||||
echo " \$(DLLINK) \$(MODDOBJS_${module}) \$(LIBS)"
|
echo " \$(DLLINK) \$(@E@XPIMP_$mddname) \$(@E@NTRYOPT) \$(DLLNAME_${mddname}) \$(MODDOBJS_${mddname}) \$(DEPMODS_${mddname}) \$(LIBS) "
|
||||||
echo
|
echo
|
||||||
fi
|
fi
|
||||||
echo "${module}.mdhi: ${module}.mdhs \$(INCS_${module})"
|
echo "${mddname}.mdhi: ${mddname}.mdhs \$(INCS_${mddname})"
|
||||||
echo " @test -f \$@ || echo 'do not delete this file' > \$@"
|
echo " @test -f \$@ || echo 'do not delete this file' > \$@"
|
||||||
echo
|
echo
|
||||||
echo "${module}.mdhs: ${module}.mdd"
|
echo "${mddname}.mdhs: ${mddname}.mdd"
|
||||||
echo " @\$(MAKE) -f \$(makefile) \$(MAKEDEFS) ${module}.mdh.tmp"
|
echo " @\$(MAKE) -f \$(makefile) \$(MAKEDEFS) ${mddname}.mdh.tmp"
|
||||||
echo " @if cmp -s ${module}.mdh ${module}.mdh.tmp; then \\"
|
echo " @if cmp -s ${mddname}.mdh ${mddname}.mdh.tmp; then \\"
|
||||||
echo " rm -f ${module}.mdh.tmp; \\"
|
echo " rm -f ${mddname}.mdh.tmp; \\"
|
||||||
echo " echo \"\\\`${module}.mdh' is up to date.\"; \\"
|
echo " echo \"\\\`${mddname}.mdh' is up to date.\"; \\"
|
||||||
echo " else \\"
|
echo " else \\"
|
||||||
echo " mv -f ${module}.mdh.tmp ${module}.mdh; \\"
|
echo " mv -f ${mddname}.mdh.tmp ${mddname}.mdh; \\"
|
||||||
echo " echo \"Updated \\\`${module}.mdh'.\"; \\"
|
echo " echo \"Updated \\\`${mddname}.mdh'.\"; \\"
|
||||||
echo " fi"
|
echo " fi"
|
||||||
echo " echo 'timestamp for ${module}.mdh against ${module}.mdd' > \$@"
|
echo " echo 'timestamp for ${mddname}.mdh against ${mddname}.mdd' > \$@"
|
||||||
echo
|
echo
|
||||||
echo "${module}.mdh: ${modhdeps} ${headers} ${hdrdeps} ${module}.mdhi"
|
echo "${mddname}.mdh: ${modhdeps} ${headers} ${hdrdeps} ${mddname}.mdhi"
|
||||||
echo " @\$(MAKE) -f \$(makefile) \$(MAKEDEFS) ${module}.mdh.tmp"
|
echo " @\$(MAKE) -f \$(makefile) \$(MAKEDEFS) ${mddname}.mdh.tmp"
|
||||||
echo " @mv -f ${module}.mdh.tmp ${module}.mdh"
|
echo " @mv -f ${mddname}.mdh.tmp ${mddname}.mdh"
|
||||||
echo " @echo \"Updated \\\`${module}.mdh'.\""
|
echo " @echo \"Updated \\\`${mddname}.mdh'.\""
|
||||||
echo
|
echo
|
||||||
echo "${module}.mdh.tmp:"
|
echo "${mddname}.mdh.tmp:"
|
||||||
echo " @( \\"
|
echo " @( \\"
|
||||||
echo " echo '#ifndef have_${module}_module'; \\"
|
echo " echo '#ifndef have_${q_name}_module'; \\"
|
||||||
echo " echo '#define have_${module}_module'; \\"
|
echo " echo '#define have_${q_name}_module'; \\"
|
||||||
echo " echo; \\"
|
echo " echo; \\"
|
||||||
if test -n "$moddeps"; then
|
echo " echo '# ifndef IMPORTING_MODULE_${q_name}'; \\"
|
||||||
echo " echo '/* Module dependencies */'; \\"
|
if test $CYGWIN = yes; then
|
||||||
echo " for mod in $modhdeps; do \\"
|
echo " echo '# ifdef MODULE'; \\"
|
||||||
echo " echo '# define USING_MODULE'; \\"
|
echo " echo '# define boot_ __attribute__((__dllexport__)) boot_${q_name}'; \\"
|
||||||
echo " echo '# include \"'\$\$mod'\"'; \\"
|
echo " echo '# define cleanup_ __attribute__((__dllexport__)) cleanup_${q_name}'; \\"
|
||||||
echo " done; \\"
|
echo " echo '# define setup_ __attribute__((__dllexport__)) setup_${q_name}'; \\"
|
||||||
echo " echo '# undef USING_MODULE'; \\"
|
echo " echo '# define finish_ __attribute__((__dllexport__)) finish_${q_name}'; \\"
|
||||||
echo " echo; \\"
|
echo " echo '# else /* MODULE */'; \\"
|
||||||
|
echo " echo '# define boot_ boot_${q_name}'; \\"
|
||||||
|
echo " echo '# define cleanup_ cleanup_${q_name}'; \\"
|
||||||
|
echo " echo '# define setup_ setup_${q_name}'; \\"
|
||||||
|
echo " echo '# define finish_ finish_${q_name}'; \\"
|
||||||
|
echo " echo '# endif /* MODULE */'; \\"
|
||||||
|
else
|
||||||
|
echo " if test @SHORTBOOTNAMES@ = yes; then \\"
|
||||||
|
echo " echo '# ifndef MODULE'; \\"
|
||||||
|
echo " fi; \\"
|
||||||
|
echo " echo '# define boot_ boot_${q_name}'; \\"
|
||||||
|
echo " echo '# define cleanup_ cleanup_${q_name}'; \\"
|
||||||
|
echo " echo '# define setup_ setup_${q_name}'; \\"
|
||||||
|
echo " echo '# define finish_ finish_${q_name}'; \\"
|
||||||
|
echo " if test @SHORTBOOTNAMES@ = yes; then \\"
|
||||||
|
echo " echo '# endif /* !MODULE */'; \\"
|
||||||
|
echo " fi; \\"
|
||||||
fi
|
fi
|
||||||
|
echo " echo '# endif /* !IMPORTING_MODULE_${q_name} */'; \\"
|
||||||
|
echo " echo; \\"
|
||||||
|
if test -n "$moddeps"; then (
|
||||||
|
set x $q_moddeps
|
||||||
|
echo " echo '/* Module dependencies */'; \\"
|
||||||
|
for hdep in $modhdeps; do
|
||||||
|
shift
|
||||||
|
echo " echo '# define IMPORTING_MODULE_${1} 1'; \\"
|
||||||
|
echo " echo '# include \"${hdep}\"'; \\"
|
||||||
|
done
|
||||||
|
echo " echo; \\"
|
||||||
|
) fi
|
||||||
if test -n "$headers"; then
|
if test -n "$headers"; then
|
||||||
echo " echo '/* Extra headers for this module */'; \\"
|
echo " echo '/* Extra headers for this module */'; \\"
|
||||||
echo " for hdr in $headers; do \\"
|
echo " for hdr in $headers; do \\"
|
||||||
|
@ -260,25 +416,35 @@ if $first_stage; then
|
||||||
echo " echo; \\"
|
echo " echo; \\"
|
||||||
fi
|
fi
|
||||||
if test -n "$proto"; then
|
if test -n "$proto"; then
|
||||||
echo " echo '# define GLOBAL_PROTOTYPES'; \\"
|
if test "$CYGWIN" = yes; then
|
||||||
echo " for pro in \$(PROTO_${module}); do \\"
|
echo " echo '# ifndef IMPORTING_MODULE_${q_name} '; \\"
|
||||||
echo " echo '# include \"'\$\$pro'\"'; \\"
|
echo " echo '# undef mod_import_variable'; \\"
|
||||||
|
echo " echo '# define mod_import_variable'; \\"
|
||||||
|
echo " echo '# endif /* IMPORTING_MODULE_${q_name} */'; \\"
|
||||||
|
fi
|
||||||
|
echo " for epro in \$(EPRO_${mddname}); do \\"
|
||||||
|
echo " echo '# include \"'\$\$epro'\"'; \\"
|
||||||
echo " done; \\"
|
echo " done; \\"
|
||||||
echo " echo '# undef GLOBAL_PROTOTYPES'; \\"
|
if test "$CYGWIN" = yes; then
|
||||||
|
echo " echo '# ifndef IMPORTING_MODULE_${q_name} '; \\"
|
||||||
|
echo " echo '# undef mod_import_variable'; \\"
|
||||||
|
echo " echo '# define mod_import_variable __attribute__((__dllimport__))'; \\"
|
||||||
|
echo " echo '# endif /* IMPORTING_MODULE_${q_name} */'; \\"
|
||||||
|
fi
|
||||||
echo " echo; \\"
|
echo " echo; \\"
|
||||||
fi
|
fi
|
||||||
echo " echo '#endif /* !have_${module}_module */'; \\"
|
echo " echo '#endif /* !have_${q_name}_module */'; \\"
|
||||||
echo " ) > \$@"
|
echo " ) > \$@"
|
||||||
echo
|
echo
|
||||||
echo "\$(MODOBJS_${module}) \$(MODDOBJS_${module}): ${module}.mdh"
|
echo "\$(MODOBJS_${mddname}) \$(MODDOBJS_${mddname}): ${mddname}.mdh"
|
||||||
sed -e '/^ *: *<< *\\Make *$/,/^Make$/!d' \
|
sed -e '/^ *: *<< *\\Make *$/,/^Make$/!d' \
|
||||||
-e 's/^ *: *<< *\\Make *$//; /^Make$/d' \
|
-e 's/^ *: *<< *\\Make *$//; /^Make$/d' \
|
||||||
< $top_srcdir/$the_subdir/${module}.mdd
|
< $top_srcdir/$the_subdir/${mddname}.mdd
|
||||||
echo
|
echo
|
||||||
|
|
||||||
done
|
done
|
||||||
|
|
||||||
if test -n "$remote_mdhs$other_mdhs"; then
|
if test -n "$remote_mdhs$other_mdhs$remote_exports$other_exports$remote_modules$other_modules"; then
|
||||||
echo "##### ===== DEPENDENCIES FOR REMOTE MODULES ===== #####"
|
echo "##### ===== DEPENDENCIES FOR REMOTE MODULES ===== #####"
|
||||||
echo
|
echo
|
||||||
for mdh in $remote_mdhs; do
|
for mdh in $remote_mdhs; do
|
||||||
|
@ -287,10 +453,32 @@ if $first_stage; then
|
||||||
echo
|
echo
|
||||||
done | sed 's,^\(.*\)@%@\(.*\)@%@\(.*\)/\([^/]*\)$,\1\3\2\4,'
|
done | sed 's,^\(.*\)@%@\(.*\)@%@\(.*\)/\([^/]*\)$,\1\3\2\4,'
|
||||||
if test -n "$other_mdhs"; then
|
if test -n "$other_mdhs"; then
|
||||||
echo "${other_mdhs}:"
|
echo "${other_mdhs}:" | sed 's,^ ,,'
|
||||||
echo " false # should only happen with make -n"
|
echo " false # should only happen with make -n"
|
||||||
echo
|
echo
|
||||||
fi
|
fi
|
||||||
|
for export in $remote_exports; do
|
||||||
|
echo "$export: FORCE"
|
||||||
|
echo " @cd @%@ && \$(MAKE) \$(MAKEDEFS) @%@$export"
|
||||||
|
echo
|
||||||
|
done | sed 's,^\(.*\)@%@\(.*\)@%@\(.*\)/\([^/]*\)$,\1\3\2\4,'
|
||||||
|
if test -n "$other_exports"; then
|
||||||
|
echo "${other_exports}:" | sed 's,^ ,,'
|
||||||
|
echo " false # should only happen with make -n"
|
||||||
|
echo
|
||||||
|
fi
|
||||||
|
if test "$CYGWIN" = yes; then
|
||||||
|
for mdll in $remote_modules; do
|
||||||
|
echo "$mdll: FORCE"
|
||||||
|
echo " @cd @%@ && \$(MAKE) \$(MAKEDEFS) @%@$mdll"
|
||||||
|
echo
|
||||||
|
done | sed 's,^\(.*\)@%@\(.*\)@%@\(.*\)/\([^/]*\)$,\1\3\2\4,'
|
||||||
|
if test -n "$other_modules"; then
|
||||||
|
echo "${other_modules}:" | sed 's,^ ,,'
|
||||||
|
echo " false # should only happen with make -n"
|
||||||
|
echo
|
||||||
|
fi
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "##### End of ${the_makefile}.in"
|
echo "##### End of ${the_makefile}.in"
|
||||||
|
|
|
@ -3070,7 +3070,8 @@ decrdumpcount(FuncDump f)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
/**/
|
||||||
|
mod_export void
|
||||||
closedumps(void)
|
closedumps(void)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
|
@ -1681,7 +1681,15 @@ typedef unsigned char * (*ZleReadFn) _((char *, char *, int));
|
||||||
/* Pseudo-keyword to mark exportedness */
|
/* Pseudo-keyword to mark exportedness */
|
||||||
/***************************************/
|
/***************************************/
|
||||||
|
|
||||||
|
#ifdef __CYGWIN__
|
||||||
|
#define mod_export __attribute__((__dllexport__))
|
||||||
|
#define mod_import_variable __attribute__((__dllimport__))
|
||||||
|
#define mod_import_function
|
||||||
|
#else
|
||||||
#define mod_export
|
#define mod_export
|
||||||
|
#define mod_import_variable
|
||||||
|
#define mod_import_function
|
||||||
|
#endif
|
||||||
|
|
||||||
/***************************************/
|
/***************************************/
|
||||||
/* Hooks in core. */
|
/* Hooks in core. */
|
||||||
|
|
22
configure.in
22
configure.in
|
@ -1467,6 +1467,18 @@ if test "x$aixdynamic" = xyes; then
|
||||||
zsh_cv_sys_dynamic_strip_exe="${zsh_cv_sys_dynamic_strip_exe=yes}"
|
zsh_cv_sys_dynamic_strip_exe="${zsh_cv_sys_dynamic_strip_exe=yes}"
|
||||||
zsh_cv_sys_dynamic_strip_lib="${zsh_cv_sys_dynamic_strip_lib=yes}"
|
zsh_cv_sys_dynamic_strip_lib="${zsh_cv_sys_dynamic_strip_lib=yes}"
|
||||||
zsh_cv_sys_dynamic_broken="${zsh_cv_sys_dynamic_broken=no}"
|
zsh_cv_sys_dynamic_broken="${zsh_cv_sys_dynamic_broken=no}"
|
||||||
|
elif test "x$ac_cv_cygwin" = xyes; then
|
||||||
|
DL_EXT="${DL_EXT=dll}"
|
||||||
|
DLLD="${DLLD=dllwrap}"
|
||||||
|
zsh_cv_func_dlsym_needs_underscore=no
|
||||||
|
DLLDFLAGS=${DLLDFLAGS=}
|
||||||
|
EXTRA_LDFLAGS=${EXTRA_LDFLAGS=}
|
||||||
|
zsh_cv_sys_dynamic_clash_ok="${zsh_cv_sys_dynamic_clash_ok=no}"
|
||||||
|
zsh_cv_sys_dynamic_rtld_global="${zsh_cv_sys_dynamic_rtld_global=yes}"
|
||||||
|
zsh_cv_sys_dynamic_execsyms="${zsh_cv_sys_dynamic_execsyms=no}"
|
||||||
|
zsh_cv_sys_dynamic_strip_exe="${zsh_cv_sys_dynamic_strip_exe=yes}"
|
||||||
|
zsh_cv_sys_dynamic_strip_lib="${zsh_cv_sys_dynamic_strip_lib=yes}"
|
||||||
|
zsh_cv_sys_dynamic_broken="${zsh_cv_sys_dynamic_broken=no}"
|
||||||
elif test "x$dynamic" = xyes; then
|
elif test "x$dynamic" = xyes; then
|
||||||
AC_CACHE_CHECK(if your system use ELF binaries,
|
AC_CACHE_CHECK(if your system use ELF binaries,
|
||||||
zsh_cv_sys_elf,
|
zsh_cv_sys_elf,
|
||||||
|
@ -1654,6 +1666,16 @@ else
|
||||||
fi
|
fi
|
||||||
AC_SUBST(SHORTBOOTNAMES)
|
AC_SUBST(SHORTBOOTNAMES)
|
||||||
|
|
||||||
|
if test "x$ac_cv_cygwin" = xyes; then
|
||||||
|
INSTLIB="install.cygwin-lib"
|
||||||
|
UNINSTLIB="uninstall.cygwin-lib"
|
||||||
|
else
|
||||||
|
INSTLIB="install.bin-\$(L)"
|
||||||
|
UNINSTLIB="uninstall.bin-\$(L)"
|
||||||
|
fi
|
||||||
|
AC_SUBST(INSTLIB)dnl
|
||||||
|
AC_SUBST(UNINSTLIB)dnl
|
||||||
|
|
||||||
AC_DEFINE_UNQUOTED(DL_EXT, "$DL_EXT")dnl
|
AC_DEFINE_UNQUOTED(DL_EXT, "$DL_EXT")dnl
|
||||||
AC_SUBST(D)dnl
|
AC_SUBST(D)dnl
|
||||||
AC_SUBST(DL_EXT)dnl
|
AC_SUBST(DL_EXT)dnl
|
||||||
|
|
Loading…
Reference in a new issue