Patches for building ECL using the Microsoft Visual C++ Toolkit 2003

This commit is contained in:
jjgarcia 2005-05-30 09:27:44 +00:00
parent bd283f5a2b
commit d83012b506
24 changed files with 2725 additions and 423 deletions

142
msvc/c/Makefile Normal file
View file

@ -0,0 +1,142 @@
#
# Makefile for ECL core library
#
top_srcdir = ..\..\src
srcdir = ..\..\src\c
!if "$(ECL_THREADS)" != ""
THREADS_OBJ= threads_win32.obj
THREADS_FLAGS= -DECL_THREADS -DGC_WIN32_THREADS
!else
THREADS_OBJ=
THREADS_FLAGS=
!endif
# Programs used by "make":
#
TRUE_CC = cl
CC = cl
CFLAGS = -c -MD -Zi -I./ -I$(srcdir) -I$(HDIR) -I../h -I$(top_srcdir)/gc/include -DHAVE_ISATTY $(THREADS_FLAGS) -DGC_NOT_DLL
# -Wall -W -Wfloat-equal -Wundef -Wendif-labels -Wpointer-arith -Wcast-align \
# -Wwrite-strings -Wconversion -Wsign-compare -Wmissing-prototypes -Wredundant-decls \
# -Wunreachable-code -Winline
DEFS = $(THREADS_FLAGS)
SHELL = /bin/sh
RM = del
CP = copy /Y
MV = move /Y
LINK = link
EXE = .exe
DPP = .\dpp$(EXE)
# Data for installation
#
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
prefix=@prefix@
exec_prefix=$(prefix)
libdir=$(prefix)\lib\ecl
# Files
HDIR = $(top_srcdir)\h
HFILES = ..\h\config.h $(HDIR)\ecl.h $(HDIR)\ecl-cmp.h\
$(HDIR)\object.h $(HDIR)\cs.h $(HDIR)\stacks.h\
$(HDIR)\external.h $(HDIR)\eval.h\
$(HDIR)\number.h $(HDIR)\page.h $(HDIR)\unify.h\
$(HDIR)\lwp.h
OBJS = main.obj symbol.obj package.obj list.obj\
apply.obj eval.obj interpreter.obj compiler.obj disassembler.obj \
instance.obj gfun.obj reference.obj character.obj\
file.obj read.obj print.obj error.obj string.obj cfun.obj\
typespec.obj assignment.obj \
predicate.obj big.obj number.obj\
num_pred.obj num_comp.obj num_arith.obj num_sfun.obj num_co.obj\
num_log.obj num_rand.obj array.obj sequence.obj cmpaux.obj\
macros.obj backq.obj stacks.obj \
time.obj unixint.obj\
mapfun.obj multival.obj hash.obj format.obj pathname.obj\
structure.obj load.obj unixfsys.obj unixsys.obj \
ffi.obj alloc_2.obj tcp.obj $(THREADS_OBJ)
all: $(DPP) external.h ..\eclmin.lib ..\cinit.obj
.SUFFIXES: .obj .c .d
{$(srcdir:\=/)}.d{}.c:
$(DPP) $< $@
#.d.c:
# $(DPP) $< $@
.c.obj:
$(CC) $(CFLAGS) -o $@ $<
.PHONY: all
#
# When compiling the library itself, we have to remove the dllimport
# declarations, because the variables that they mark are in the
# in the library and can be referenced without indirection.
#
external.h: $(top_srcdir)/h/external.h Makefile
cut.exe removedecl < $(top_srcdir)/h/external.h > $@
cut.exe: $(top_srcdir)/util/cut.c
$(CC) $(LDFLAGS) /Fecut.exe $(top_srcdir)/util/cut.c
install: $(HFILES)
for %i in ($(HFILES)) do $(CP) %i $(libdir)\h
cut.exe < ..\h\config.h > $(libdir)\h\config-install.h
$(RM) $(libdir)\h\config.h
$(MV) $(libdir)\h\config-install.h $(libdir)\h\config.h
flatinstall: $(HFILES)
for %i in ($(HFILES)) do $(CP) %i $(prefix)\h
cut.exe < ..\h\config.h > $(prefix)\h\config-install.h
for %h in (..\h\*.h) do $(CP) %h $(prefix)\h
$(RM) $(prefix)\h\config.h
$(MV) $(prefix)\h\config-install.h $(prefix)\h\config.h
..\eclmin.lib: $(OBJS:.obj=.c) all_symbols.c $(OBJS) all_symbols.obj all_symbols2.obj
-$(RM) $@
$(LINK) -lib -out:$@ $(OBJS)
clean:
-for %f in (..\h\config.h dpp dpp.obj $(DPP) external.h \
..\eclmin.lib ..\cinit.obj cinit.c \
symbols_list2.h) \
do $(RM) %f
-for %f in ($(OBJS:.obj=.c) all_symbols.c) do $(RM) %f
-for %f in ($(OBJS) all_symbols.obj all_symbols2.obj) do $(RM) %f
-$(RM) *.pdb
# Build rules
$(DPP): $(srcdir)/dpp.c $(srcdir)/symbols_list2.h ../h/config.h
$(TRUE_CC) -I../h -I./ -I$(HDIR) $(DEFS) $(srcdir)/dpp.c -o $@
../h/config.h: ../h/config.h.msvc6
$(CP) ..\h\config.h.msvc6 ..\h\config.h
#
# GCC might break this code
#
gbc.o: gbc.c $(HFILES)
$(CC) $(CFLAGS) -O0 gbc.c -o $@
#
# This reduces the overhead of jumping to other functions
#
apply.o: apply.c $(HFILES) $(HDIR)/cs.h
$(CC) $(CFLAGS) apply.c -o $@
#
# These files are interrelated
#
all_symbols.obj: all_symbols.c
$(CC) $(CFLAGS) -Fo$@ -I./ all_symbols.c
all_symbols2.obj: all_symbols.c
$(CC) $(CFLAGS) -DECL_FINAL -Fo$@ -I./ all_symbols.c
#
# This is in another directory
#
../cinit.obj: cinit.c
$(CC) $(CFLAGS) -I./ -o cinit.obj cinit.c
$(MV) cinit.obj ..\

162
msvc/doc/Makefile Normal file
View file

@ -0,0 +1,162 @@
top_srcdir= ..\..\src
srcdir = ..\..\src\doc
prefix=@prefix@
exec_prefix=$(prefix)\bin
infodir = $(prefix)\doc\info
mandir=$(prefix)\doc\man
docdir=$(prefix)\doc
manext=1
INFOEXT = info
SHELL = cmd.exe
INSTALL = ..\install.bat
INSTALL_PROGRAM = $(INSTALL)
INSTALL_DATA = $(INSTALL)
INSTALL_INFO = $(INSTALL)
mkinstalldirs = $(SHELL) $(top_srcdir)/gc/mkinstalldirs.bat
INFO_FILES = ecl.$(INFOEXT) ecldev.$(INFOEXT)
HTML_FILES = index.html license.html lgpl.html news.html benchmark.html \
install.html download.html
RM = erase
RMDIR = rmdir /S /Q
MKDIR = mkdir
CP = copy /Y
ECL_VERSION=0.9f
FILTER = ..\c\cut$(EXE) "@PACKAGE_VERSION@" "$(ECL_VERSION)"
ECL = ../ecl
all: $(INFO_FILES) $(HTML_FILES) developers_manual user_manual clx_manual
ecl.dvi: $(srcdir)/user.txi $(srcdir)/macros.txi clisp.sty ecl.sty
tex $(srcdir)/user.txi
ecldev.dvi: $(srcdir)/devel.txi $(srcdir)/macros.txi clisp.sty ecl.sty
tex $(srcdir)/devel.txi
clx.dvi: clx.texinfo
tex clx.texinfo
ecl.ps: ecl.dvi $(srcdir)/macros.txi
dvips -o $@ ecl.dvi
ecldev.ps: ecldev.dvi $(srcdir)/macros.txi
dvips -o $@ ecldev.dvi
clx.ps: clx.dvi
dvips -o $@ clx.dvi
install: all
IF NOT EXIST $(docdir) $(MKDIR) $(docdir)
for %i in (Copyright LGPL) do $(CP) $(top_srcdir)\..\%i $(docdir)
for %i in ($(HTML_FILES)) do $(CP) %i $(docdir)
IF NOT EXIST $(docdir)\ecldev $(MKDIR) $(docdir)\ecldev
for %i in (ecldev\*) do $(CP) %i $(docdir)\ecldev
IF NOT EXIST $(docdir)\ecl $(MKDIR) $(docdir)\ecl
for %i in (ecl\*) do $(CP) %i $(docdir)\ecl
IF NOT EXIST $(docdir)\clx $(MKDIR) $(docdir)\clx
for %i in (clx\*) do $(CP) %i $(docdir)\clx
flatinstall: all
IF NOT EXIST $(docdir) $(MKDIR) $(docdir)
for %i in (Copyright LGPL) do $(CP) $(top_srcdir)\..\%i $(docdir)
for %i in ($(HTML_FILES)) do $(CP) %i $(docdir)
IF NOT EXIST $(docdir)\ecldev $(MKDIR) $(docdir)\ecldev
for %i in (ecldev\*) do $(CP) %i $(docdir)\ecldev
IF NOT EXIST $(docdir)\ecl $(MKDIR) $(docdir)\ecl
for %i in (ecl\*) do $(CP) %i $(docdir)\ecl
IF NOT EXIST $(docdir)\clx $(MKDIR) $(docdir)\clx
for %i in (clx\*) do $(CP) %i $(docdir)\clx
uninstall:
for k in $(INFO_FILES); do \
rm $$k; \
if [ -x $(INSTALL_INFO) ]; then \
$(INSTALL_INFO) --delete $$k; \
fi; \
done
rm -r $(infodir)/ecl.$(INFOEXT) $(infodir)/ecldev.$(INFOEXT); \
rm $(mandir)/man$(manext)/ecl.$(manext)
head2: developers_manual user_manual clx_manual $(srcdir)/head Makefile
IF EXIST ecl\index.html ( \
..\c\cut.exe "ecl/user.html" "ecl/index.html" \
"ecldev/devel.html" "ecldev/index.html" \
< $(srcdir)/head > head2 \
) ELSE ( \
copy /y $(srcdir)/head head2 \
)
ecl.info.gz: ecl.info
gzip < ecl.info > ecl.info.gz
ecldev.info.gz: ecldev.info
gzip < ecldev.info > ecldev.info.gz
clx.info.gz: clx.info
gzip < clx.info > clx.info.gz
ecl.info: $(srcdir)/user.txi $(srcdir)/macros.txi
makeinfo -I $(srcdir) --no-split $(srcdir)/user.txi
ecldev.info: $(srcdir)/devel.txi $(srcdir)/macros.txi
makeinfo -I $(srcdir) --no-split $(srcdir)/devel.txi
clx.info: clx.texinfo
makeinfo --no-split clx.texinfo
clx.texinfo: $(top_srcdir)/clx/manual/clx.texinfo
cp $(top_srcdir)/clx/manual/clx.texinfo .
download.html: $(srcdir)/download.in.html head2
( type head2 $(srcdir)\download.in.html $(srcdir)\end ) | $(FILTER) > $@
index.html: $(srcdir)/index.in.html head2
( type head2 $(srcdir)\index.in.html $(srcdir)\end ) | $(FILTER) > $@
install.html: $(srcdir)/install.in.html head2
( type head2 $(srcdir)\install.in.html $(srcdir)\end ) | $(FILTER) > $@
news.html: $(srcdir)\..\..\ANNOUNCEMENT head2
type head2 > html_tmp
echo "<pre>" >> html_tmp
type $(srcdir)\..\..\ANNOUNCEMENT >> html_tmp
echo "</pre>" >> html_tmp
type $(srcdir)\end >> html_tmp
$(FILTER) < html_tmp > $@
$(RM) html_tmp
benchmark.html: $(srcdir)/benchmark.in.html ../gabriel/BENCHMARK head2
type head2 > html_tmp
type $(srcdir)\benchmark.in.html >> html_tmp
echo "<pre>" >> html_tmp
type ..\gabriel\BENCHMARK >> html_tmp
echo "</pre>" >> html_tmp
type $(srcdir)\end >> html_tmp
$(FILTER) < html_tmp > $@
$(RM) html_tmp
../gabriel/BENCHMARK:
if not exist ..\gabriel $(MKDIR) ..\gabriel
echo No benchmarks available > ..\gabriel\BENCHMARK
license.html: $(top_srcdir)/../Copyright head2
type head2 > html_tmp
echo "<pre>" >> html_tmp
type $(top_srcdir)\..\Copyright >> html_tmp
echo "</pre>" >> html_tmp
type $(srcdir)\end >> html_tmp
$(FILTER) < html_tmp > $@
$(RM) html_tmp
lgpl.html: $(top_srcdir)/../LGPL head2
type head2 > html_tmp
echo "<pre>" >> html_tmp
type $(top_srcdir)\..\LGPL >> html_tmp
echo "</pre>" >> html_tmp
type $(srcdir)\end >> html_tmp
$(FILTER) < html_tmp > $@
$(RM) html_tmp
user_manual: $(srcdir)/user.txi $(srcdir)/macros.txi
echo "Producing ecl.html; ignore error messages."
IF NOT EXIST ecl MKDIR ecl
makeinfo -v -I $(srcdir) --html $(srcdir)/user.txi
echo > user_manual
developers_manual: $(srcdir)/devel.txi $(srcdir)/macros.txi
echo "Producing ecldev.html; ignore error messages."
IF NOT EXIST ecldev MKDIR ecldev
makeinfo -v -I $(srcdir) --html $(srcdir)/devel.txi
echo > developers_manual
clx_manual: $(srcdir)/../clx/manual/clx.texinfo
echo "Producing clx.html; ignore error messages."
IF NOT EXIST clx MKDIR clx
makeinfo -v --html $(srcdir)\..\clx\manual\clx.texinfo
echo > clx_manual
clean:
-for %i in (ecl ecldev clx ..\gabriel) do $(RMDIR) %i
-for %i in (ecl.info* ecldev.info* $(HTML_FILES) head2 user_manual developers_manual clx_manual ..\gabriel\BENCHMARK) do $(RM) %i

71
msvc/gc/Makefile Normal file
View file

@ -0,0 +1,71 @@
# Makefile for Windows NT. Assumes Microsoft compiler, and a single thread.
# DLLs are included in the root set under NT, but not under win32S.
# Use "nmake nodebug=1 all" for optimized versions of library, gctest and editor.
CPU= i386
!include <ntwin32.mak>
srcdir = ..\..\src\gc
!if "$(ECL_THREADS)" != ""
THREADS_OBJ= win32_threads.obj
THREADS_FLAGS= -DGC_WIN32_THREADS
!else
THREADS_OBJ=
THREADS_FLAGS=
!endif
OBJS= alloc.obj reclaim.obj allchblk.obj misc.obj mach_dep.obj os_dep.obj mark_rts.obj headers.obj mark.obj obj_map.obj blacklst.obj finalize.obj new_hblk.obj dbg_mlc.obj malloc.obj stubborn.obj dyn_load.obj typd_mlc.obj ptr_chck.obj gc_cpp.obj mallocx.obj $(THREADS_OBJ)
all: gctest.exe cord\de.exe test_cpp.exe
{$(srcdir)}.c{}.obj:
$(cc) $(cdebug) $(cflags) $(cvarsdll) -I$(srcdir)\include -DSILENT -DALL_INTERIOR_POINTERS -D__STDC__ -DGC_NOT_DLL $(THREADS_FLAGS) $< /Fo$*.obj
.cpp.obj:
$(cc) /MD $(cdebug) $(cflags) $(cvarsdll) -I$(srcdir)\include -DSILENT -DALL_INTERIOR_POINTERS -DGC_NOT_DLL $(THREADS_FLAGS) $*.CPP /Fo$*.obj
$(OBJS) tests\test.obj: $(srcdir)\include\private\gc_priv.h $(srcdir)\include\private\gc_hdrs.h $(srcdir)\include\gc.h $(srcdir)\include\private\gcconfig.h $(srcdir)\include\private\gc_locks.h $(srcdir)\include\private\gc_pmark.h $(srcdir)\include\gc_mark.h
gc.lib: $(OBJS)
link -lib /MACHINE:i386 /out:gc.lib $(OBJS)
# The original NT SDK used lib32 instead of lib
gctest.exe: tests\test.obj gc.lib
# The following works for win32 debugging. For win32s debugging use debugtype:coff
# and add mapsympe line.
# This produces a "GUI" applications that opens no windows and writes to the log file
# "gc.log". This is done to make the result runnable under win32s.
$(link) -debug:full -debugtype:cv $(guiflags) -stack:131072 -out:$*.exe tests\test.obj $(guilibs) gc.lib
# mapsympe -n -o gctest.sym gctest.exe
cord\de_win.rbj: cord\de_win.res
cvtres -$(CPU) cord\de_win.res -o cord\de_win.rbj
cord\de.obj cord\de_win.obj: include\cord.h include\private\cord_pos.h cord\de_win.h cord\de_cmds.h
cord\de_win.res: cord\de_win.rc cord\de_win.h cord\de_cmds.h
$(rc) $(rcvars) -r -fo cord\de_win.res $(cvarsdll) cord\de_win.rc
# Cord/de is a real win32 gui application.
cord\de.exe: cord\cordbscs.obj cord\cordxtra.obj cord\de.obj cord\de_win.obj cord\de_win.rbj gc.lib
$(link) -debug:full -debugtype:cv $(guiflags) -stack:16384 -out:cord\de.exe cord\cordbscs.obj cord\cordxtra.obj cord\de.obj cord\de_win.obj cord\de_win.rbj gc.lib $(guilibs)
gc_cpp.obj: $(srcdir)\include\gc_cpp.h $(srcdir)\include\gc.h
gc_cpp.cpp: $(srcdir)\gc_cpp.cc
copy $(srcdir)\gc_cpp.cc gc_cpp.cpp
test_cpp.cpp: tests\test_cpp.cc
copy tests\test_cpp.cc test_cpp.cpp
# This generates the C++ test executable. The executable expects
# a single numeric argument, which is the number of iterations.
# The output appears in the file "gc.log".
test_cpp.exe: test_cpp.obj include\gc_cpp.h include\gc.h gc.lib
$(link) -debug:full -debugtype:cv $(guiflags) -stack:16384 -out:test_cpp.exe test_cpp.obj gc.lib $(guilibs)
clean:
-del gc.lib
-for %i in ($(OBJS) gc_cpp.cpp) do erase %i

615
msvc/gmp/Makefile Normal file
View file

@ -0,0 +1,615 @@
srcdir = ..\..\src\gmp
AUTO_SUBDIRS = mpn\generic mpf mpq mpz printf scanf
MPN_GC_SOURCES = \
mpn\generic\add.c \
mpn\generic\add_1.c \
mpn\generic\add_n.c \
mpn\generic\addmul_1.c \
mpn\generic\addsub_n.c \
mpn\generic\bdivmod.c \
mpn\generic\cmp.c \
mpn\generic\dc_divrem_n.c \
mpn\generic\dive_1.c \
mpn\generic\diveby3.c \
mpn\generic\divis.c \
mpn\generic\divrem.c \
mpn\generic\divrem_1.c \
mpn\generic\divrem_2.c \
mpn\generic\dump.c \
mpn\generic\fib2_ui.c \
mpn\generic\gcd.c \
mpn\generic\gcd_1.c \
mpn\generic\gcdext.c \
mpn\generic\get_str.c \
mpn\generic\hamdist.c \
mpn\generic\jacbase.c \
mpn\generic\lshift.c \
mpn\generic\mod_1.c \
mpn\generic\mod_34lsub1.c \
mpn\generic\mode1o.c \
mpn\generic\mul.c \
mpn\generic\mul_1.c \
mpn\generic\mul_basecase.c \
mpn\generic\mul_fft.c \
mpn\generic\mul_n.c \
mpn\generic\perfsqr.c \
mpn\generic\popcount.c \
mpn\generic\pow_1.c \
mpn\generic\pre_divrem_1.c \
mpn\generic\pre_mod_1.c \
mpn\generic\random.c \
mpn\generic\random2.c \
mpn\generic\rootrem.c \
mpn\generic\rshift.c \
mpn\generic\sb_divrem_mn.c \
mpn\generic\scan0.c \
mpn\generic\scan1.c \
mpn\generic\set_str.c \
mpn\generic\sizeinbase.c \
mpn\generic\sqr_basecase.c \
mpn\generic\sqrtrem.c \
mpn\generic\sub.c \
mpn\generic\sub_1.c \
mpn\generic\sub_n.c \
mpn\generic\submul_1.c \
mpn\generic\tdiv_qr.c \
mpn\mp_bases.c
MPN_P0_C_SOURCES = \
mpn\generic\add.c \
mpn\generic\add_1.c \
mpn\generic\addsub_n.c \
mpn\generic\bdivmod.c \
mpn\generic\cmp.c \
mpn\generic\dc_divrem_n.c \
mpn\generic\divis.c \
mpn\generic\divrem.c \
mpn\generic\divrem_2.c \
mpn\generic\dump.c \
mpn\generic\fib2_ui.c \
mpn\generic\gcd.c \
mpn\generic\gcd_1.c \
mpn\generic\gcdext.c \
mpn\generic\get_str.c \
mpn\generic\hamdist.c \
mpn\generic\jacbase.c \
mpn\generic\mode1o.c \
mpn\mp_bases.c \
mpn\generic\mul.c \
mpn\generic\mul_fft.c \
mpn\generic\mul_n.c \
mpn\generic\perfsqr.c \
mpn\generic\popcount.c \
mpn\generic\pow_1.c \
mpn\generic\pre_divrem_1.c \
mpn\generic\pre_mod_1.c \
mpn\generic\random.c \
mpn\generic\random2.c \
mpn\generic\rootrem.c \
mpn\generic\sb_divrem_mn.c \
mpn\generic\scan0.c \
mpn\generic\scan1.c \
mpn\generic\set_str.c \
mpn\generic\sizeinbase.c \
mpn\generic\sqr_basecase.c \
mpn\generic\sqrtrem.c \
mpn\generic\sub.c \
mpn\generic\sub_1.c \
mpn\generic\tdiv_qr.c
MPN_P0_ASM_SOURCES = \
mpn\x86i\umul.asm \
mpn\x86i\udiv.asm \
mpn\x86i\rshift.asm \
mpn\x86i\mul_basecase.asm \
mpn\x86i\mul_1.asm \
mpn\x86i\mod_34lsub1.asm \
mpn\x86i\mod_1.asm \
mpn\x86i\lshift.asm \
mpn\x86i\divrem_1.asm \
mpn\x86i\diveby3.asm \
mpn\x86i\dive_1.asm \
mpn\x86i\copyi.asm \
mpn\x86i\copyd.asm \
mpn\x86i\aorsmul_1.asm \
mpn\x86i\aors_n.asm
MPN_P3_C_SOURCES = \
mpn\generic\add.c \
mpn\generic\add_1.c \
mpn\generic\addsub_n.c \
mpn\generic\bdivmod.c \
mpn\generic\cmp.c \
mpn\generic\dc_divrem_n.c \
mpn\generic\divis.c \
mpn\generic\divrem.c \
mpn\generic\divrem_2.c \
mpn\generic\dump.c \
mpn\generic\fib2_ui.c \
mpn\generic\gcd.c \
mpn\generic\gcd_1.c \
mpn\generic\gcdext.c \
mpn\generic\get_str.c \
mpn\generic\jacbase.c \
mpn\mp_bases.c \
mpn\generic\mul.c \
mpn\generic\mul_fft.c \
mpn\generic\mul_n.c \
mpn\generic\perfsqr.c \
mpn\generic\pow_1.c \
mpn\generic\random.c \
mpn\generic\random2.c \
mpn\generic\rootrem.c \
mpn\generic\sb_divrem_mn.c \
mpn\generic\scan0.c \
mpn\generic\scan1.c \
mpn\generic\set_str.c \
mpn\generic\sizeinbase.c \
mpn\generic\sqrtrem.c \
mpn\generic\sub.c \
mpn\generic\sub_1.c \
mpn\generic\tdiv_qr.c
MPN_P3_ASM_SOURCES = \
mpn\x86i\umul.asm \
mpn\x86i\udiv.asm \
mpn\x86i\p6\sqr_basecase.asm \
mpn\x86i\mul_basecase.asm \
mpn\x86i\mul_1.asm \
mpn\x86i\p6\mode1o.asm \
mpn\x86i\mod_34lsub1.asm \
mpn\x86i\p6\mod_1.asm \
mpn\x86i\p6\diveby3.asm \
mpn\x86i\p6\dive_1.asm \
mpn\x86i\copyi.asm \
mpn\x86i\p6\copyd.asm \
mpn\x86i\p6\aorsmul_1.asm \
mpn\x86i\aors_n.asm \
mpn\x86i\p6\mmx\rshift.asm \
mpn\x86i\p6\p3mmx\popham.asm \
mpn\x86i\p6\mmx\lshift.asm \
mpn\x86i\p6\mmx\divrem_1.asm
MPN_P4_C_SOURCES = \
mpn\generic\add.c \
mpn\generic\add_1.c \
mpn\generic\addsub_n.c \
mpn\generic\bdivmod.c \
mpn\generic\cmp.c \
mpn\generic\dc_divrem_n.c \
mpn\generic\divis.c \
mpn\generic\divrem.c \
mpn\generic\divrem_2.c \
mpn\generic\dump.c \
mpn\generic\fib2_ui.c \
mpn\generic\gcd.c \
mpn\generic\gcd_1.c \
mpn\generic\gcdext.c \
mpn\generic\get_str.c \
mpn\generic\jacbase.c \
mpn\mp_bases.c \
mpn\generic\mul.c \
mpn\generic\mul_fft.c \
mpn\generic\mul_n.c \
mpn\generic\perfsqr.c \
mpn\generic\pow_1.c \
mpn\generic\pre_divrem_1.c \
mpn\generic\pre_mod_1.c \
mpn\generic\random.c \
mpn\generic\random2.c \
mpn\generic\rootrem.c \
mpn\generic\sb_divrem_mn.c \
mpn\generic\scan0.c \
mpn\generic\scan1.c \
mpn\generic\set_str.c \
mpn\generic\sizeinbase.c \
mpn\generic\sqrtrem.c \
mpn\generic\sub.c \
mpn\generic\sub_1.c \
mpn\generic\tdiv_qr.c
MPN_P4_ASM_SOURCES = \
mpn\x86i\umul.asm \
mpn\x86i\udiv.asm \
mpn\x86i\mod_1.asm \
mpn\x86i\divrem_1.asm \
mpn\x86i\pentium4\copyi.asm \
mpn\x86i\pentium4\copyd.asm \
mpn\x86i\pentium4\sse2\submul_1.asm \
mpn\x86i\pentium4\sse2\sub_n.asm \
mpn\x86i\pentium4\sse2\sqr_basecase.asm \
mpn\x86i\pentium4\sse2\mul_basecase.asm \
mpn\x86i\pentium4\sse2\mul_1.asm \
mpn\x86i\pentium4\sse2\mode1o.asm \
mpn\x86i\pentium4\sse2\mod_34lsub1.asm \
mpn\x86i\pentium4\sse2\diveby3.asm \
mpn\x86i\pentium4\sse2\dive_1.asm \
mpn\x86i\pentium4\sse2\addmul_1.asm \
mpn\x86i\pentium4\sse2\add_n.asm \
mpn\x86i\pentium4\mmx\rshift.asm \
mpn\x86i\pentium4\mmx\popham.asm \
mpn\x86i\pentium4\mmx\lshift.asm
MPF_SOURCES = \
mpf\abs.c \
mpf\add.c \
mpf\add_ui.c \
mpf\ceilfloor.c \
mpf\clear.c \
mpf\cmp.c \
mpf\cmp_d.c \
mpf\cmp_si.c \
mpf\cmp_ui.c \
mpf\div.c \
mpf\div_2exp.c \
mpf\div_ui.c \
mpf\dump.c \
mpf\eq.c \
mpf\fits_sint.c \
mpf\fits_slong.c \
mpf\fits_sshort.c \
mpf\fits_uint.c \
mpf\fits_ulong.c \
mpf\fits_ushort.c \
mpf\get_d.c \
mpf\get_d_2exp.c \
mpf\get_dfl_prec.c \
mpf\get_prc.c \
mpf\get_si.c \
mpf\get_str.c \
mpf\get_ui.c \
mpf\init.c \
mpf\init2.c \
mpf\inp_str.c \
mpf\int_p.c \
mpf\iset.c \
mpf\iset_d.c \
mpf\iset_si.c \
mpf\iset_str.c \
mpf\iset_ui.c \
mpf\mul.c \
mpf\mul_2exp.c \
mpf\mul_ui.c \
mpf\neg.c \
mpf\out_str.c \
mpf\pow_ui.c \
mpf\random2.c \
mpf\reldiff.c \
mpf\set.c \
mpf\set_d.c \
mpf\set_dfl_prec.c \
mpf\set_prc.c \
mpf\set_prc_raw.c \
mpf\set_q.c \
mpf\set_si.c \
mpf\set_str.c \
mpf\set_ui.c \
mpf\set_z.c \
mpf\size.c \
mpf\sqrt.c \
mpf\sqrt_ui.c \
mpf\sub.c \
mpf\sub_ui.c \
mpf\swap.c \
mpf\trunc.c \
mpf\ui_div.c \
mpf\ui_sub.c \
mpf\urandomb.c
MPQ_SOURCES = \
mpq\abs.c \
mpq\aors.c \
mpq\canonicalize.c \
mpq\clear.c \
mpq\cmp.c \
mpq\cmp_si.c \
mpq\cmp_ui.c \
mpq\div.c \
mpq\equal.c \
mpq\get_d.c \
mpq\get_den.c \
mpq\get_num.c \
mpq\get_str.c \
mpq\init.c \
mpq\inp_str.c \
mpq\inv.c \
mpq\md_2exp.c \
mpq\mul.c \
mpq\neg.c \
mpq\out_str.c \
mpq\set.c \
mpq\set_d.c \
mpq\set_den.c \
mpq\set_f.c \
mpq\set_num.c \
mpq\set_si.c \
mpq\set_str.c \
mpq\set_ui.c \
mpq\set_z.c \
mpq\swap.c
MPZ_SOURCES = \
mpz\abs.c \
mpz\add.c \
mpz\add_ui.c \
mpz\and.c \
mpz\aorsmul.c \
mpz\aorsmul_i.c \
mpz\array_init.c \
mpz\bin_ui.c \
mpz\bin_uiui.c \
mpz\cdiv_q.c \
mpz\cdiv_q_ui.c \
mpz\cdiv_qr.c \
mpz\cdiv_qr_ui.c \
mpz\cdiv_r.c \
mpz\cdiv_r_ui.c \
mpz\cdiv_ui.c \
mpz\cfdiv_q_2exp.c \
mpz\cfdiv_r_2exp.c \
mpz\clear.c \
mpz\clrbit.c \
mpz\cmp.c \
mpz\cmp_d.c \
mpz\cmp_si.c \
mpz\cmp_ui.c \
mpz\cmpabs.c \
mpz\cmpabs_d.c \
mpz\cmpabs_ui.c \
mpz\com.c \
mpz\cong.c \
mpz\cong_2exp.c \
mpz\cong_ui.c \
mpz\dive_ui.c \
mpz\divegcd.c \
mpz\divexact.c \
mpz\divis.c \
mpz\divis_2exp.c \
mpz\divis_ui.c \
mpz\dump.c \
mpz\export.c \
mpz\fac_ui.c \
mpz\fdiv_q.c \
mpz\fdiv_q_ui.c \
mpz\fdiv_qr.c \
mpz\fdiv_qr_ui.c \
mpz\fdiv_r.c \
mpz\fdiv_r_ui.c \
mpz\fdiv_ui.c \
mpz\fib2_ui.c \
mpz\fib_ui.c \
mpz\fits_sint.c \
mpz\fits_slong.c \
mpz\fits_sshort.c \
mpz\fits_uint.c \
mpz\fits_ulong.c \
mpz\fits_ushort.c \
mpz\gcd.c \
mpz\gcd_ui.c \
mpz\gcdext.c \
mpz\get_d.c \
mpz\get_d_2exp.c \
mpz\get_si.c \
mpz\get_str.c \
mpz\get_ui.c \
mpz\getlimbn.c \
mpz\hamdist.c \
mpz\import.c \
mpz\init.c \
mpz\init2.c \
mpz\inp_raw.c \
mpz\inp_str.c \
mpz\invert.c \
mpz\ior.c \
mpz\iset.c \
mpz\iset_d.c \
mpz\iset_si.c \
mpz\iset_str.c \
mpz\iset_ui.c \
mpz\jacobi.c \
mpz\kronsz.c \
mpz\kronuz.c \
mpz\kronzs.c \
mpz\kronzu.c \
mpz\lcm.c \
mpz\lcm_ui.c \
mpz\lucnum2_ui.c \
mpz\lucnum_ui.c \
mpz\millerrabin.c \
mpz\mod.c \
mpz\mul.c \
mpz\mul_2exp.c \
mpz\mul_si.c \
mpz\mul_ui.c \
mpz\n_pow_ui.c \
mpz\neg.c \
mpz\nextprime.c \
mpz\out_raw.c \
mpz\out_str.c \
mpz\perfpow.c \
mpz\perfsqr.c \
mpz\popcount.c \
mpz\pow_ui.c \
mpz\powm.c \
mpz\powm_ui.c \
mpz\pprime_p.c \
mpz\random.c \
mpz\random2.c \
mpz\realloc.c \
mpz\realloc2.c \
mpz\remove.c \
mpz\root.c \
mpz\rrandomb.c \
mpz\scan0.c \
mpz\scan1.c \
mpz\set.c \
mpz\set_d.c \
mpz\set_f.c \
mpz\set_q.c \
mpz\set_si.c \
mpz\set_str.c \
mpz\set_ui.c \
mpz\setbit.c \
mpz\size.c \
mpz\sizeinbase.c \
mpz\sqrt.c \
mpz\sqrtrem.c \
mpz\sub.c \
mpz\sub_ui.c \
mpz\swap.c \
mpz\tdiv_q.c \
mpz\tdiv_q_2exp.c \
mpz\tdiv_q_ui.c \
mpz\tdiv_qr.c \
mpz\tdiv_qr_ui.c \
mpz\tdiv_r.c \
mpz\tdiv_r_2exp.c \
mpz\tdiv_r_ui.c \
mpz\tdiv_ui.c \
mpz\tstbit.c \
mpz\ui_pow_ui.c \
mpz\ui_sub.c \
mpz\urandomb.c \
mpz\urandomm.c \
mpz\xor.c \
PRINTF_SOURCES = \
printf\asprintf.c \
printf\asprntffuns.c \
printf\doprnt.c \
printf\doprntf.c \
printf\doprnti.c \
printf\fprintf.c \
printf\obprintf.c \
printf\obprntffuns.c \
printf\obvprintf.c \
printf\printf.c \
printf\printffuns.c \
printf\repl-vsnprintf.c \
printf\snprintf.c \
printf\snprntffuns.c \
printf\sprintf.c \
printf\sprintffuns.c \
printf\vasprintf.c \
printf\vfprintf.c \
printf\vprintf.c \
printf\vsnprintf.c \
printf\vsprintf.c
SCANF_SOURCES = \
scanf\doscan.c \
scanf\fscanf.c \
scanf\fscanffuns.c \
scanf\scanf.c \
scanf\sscanf.c \
scanf\sscanffuns.c \
scanf\vfscanf.c \
scanf\vscanf.c \
scanf\vsscanf.c
GMP_SOURCES = \
ansi2knr.c \
assert.c \
compat.c \
errno.c \
extract-dbl.c \
insert-dbl.c \
memory.c \
mp_bpl.c \
mp_clz_tab.c \
mp_minv_tab.c \
mp_set_fns.c \
rand.c \
randclr.c \
randdef.c \
randlc.c \
randlc2s.c \
randlc2x.c \
randraw.c \
rands.c \
randsd.c \
randsdui.c \
version.c
MPN_GC_OBJS = $(MPN_GC_SOURCES:.c=.obj)
MPN_P0_OBJS = $(MPN_P0_ASM_SOURCES:.asm=.obj) $(MPN_P0_C_SOURCES:.c=.obj)
MPN_P3_OBJS = $(MPN_P3_ASM_SOURCES:.asm=.obj) $(MPN_P3_C_SOURCES:.c=.obj)
MPN_P4_OBJS = $(MPN_P4_ASM_SOURCES:.asm=.obj) $(MPN_P4_C_SOURCES:.c=.obj)
MPF_OBJS = $(MPF_SOURCES:.c=.obj)
MPQ_OBJS = $(MPQ_SOURCES:.c=.obj)
MPZ_OBJS = $(MPZ_SOURCES:.c=.obj)
PRINTF_OBJS = $(PRINTF_SOURCES:.c=.obj)
SCANF_OBJS = $(SCANF_SOURCES:.c=.obj)
GMP_OBJS = $(GMP_SOURCES:.c=.obj)
GMP_ALL_OBJS = $(MPF_OBJS) $(MPQ_OBJS) $(MPZ_OBJS) \
$(PRINTF_OBJS) $(SCANF_OBJS) $(GMP_OBJS)
MPN_TYPE = gc
all: gmp.lib
mpn_gc.lib: msvc-build $(MPN_GC_OBJS)
link -lib /NOLOGO /OUT:$@ $(MPN_GC_OBJS)
mpn_p0.lib: msvc-build $(MPN_P0_OBJS)
link -lib /NOLOGO /OUT:$@ $(MPN_P0_OBJS)
mpn_p3.lib: msvc-build $(MPN_P3_OBJS)
link -lib /NOLOGO /OUT:$@ $(MPN_P3_OBJS)
mpn_p4.lib: msvc-build $(MPN_P4_OBJS)
link -lib /NOLOGO /OUT:$@ $(MPN_P4_OBJS)
gmp.lib: mpn_$(MPN_TYPE).lib $(GMP_ALL_OBJS)
link -lib /NOLOGO /OUT:$@ *.obj mpf\*.obj mpz\*.obj mpq\*.obj $(PRINTF_OBJS) $(SCANF_OBJS) mpn_$(MPN_TYPE).lib
CFLAGS = /nologo /MD /W3 /GX /I "." /I $(srcdir) /I "$(srcdir)\mpn\generic" /D "WIN32" /D "NDEBUG" /D "_LIB" /D "_WIN32" /D "_MBCS"
{$(srcdir)\mpn\generic}.c{mpn\generic}.obj:
cl -c $(CFLAGS) /Fo$@ $?
{$(srcdir)\mpn}.c{mpn}.obj:
cl -c $(CFLAGS) /Fo$@ $?
{$(srcdir)\mpf}.c{mpf}.obj:
cl -c $(CFLAGS) /Fo$@ $?
{$(srcdir)\mpq}.c{mpq}.obj:
cl -c $(CFLAGS) /Fo$@ $?
{$(srcdir)\mpz}.c{mpz}.obj:
cl -c $(CFLAGS) /Fo$@ $?
{$(srcdir)\printf}.c{printf}.obj:
cl -c $(CFLAGS) /Fo$@ $?
{$(srcdir)\scanf}.c{scanf}.obj:
cl -c $(CFLAGS) /Fo$@ $?
{$(srcdir)}.c{}.obj:
cl -c $(CFLAGS) /Fo$@ $?
.asm.obj:
nasm -O9 -Xvc -f win32 -i $(@D)\ -o $@ $?
msvc-build: config-vc6.$(MPN_TYPE) gmp.h.vc6
copy config-vc6.$(MPN_TYPE) config.h
copy gmp.h.vc6 gmp.h
for %d in ($(AUTO_SUBDIRS)) do \
if not exist %d mkdir %d
echo > $@
clean:
-erase mpn\generic\*.obj
-erase mpn\*.obj
-erase mpf\*.obj
-erase mpq\*.obj
-erase mpz\*.obj
-erase printf\*.obj
-erase scanf\*.obj
-erase *.obj
-erase mpn_*.lib
-erase gmp.lib
-for %o in ($(MPN_P0_ASM_SOURCES:.asm=.obj)) do erase %o
-for %o in ($(MPN_P3_ASM_SOURCES:.asm=.obj)) do erase %o
-for %o in ($(MPN_P4_ASM_SOURCES:.asm=.obj)) do erase %o
-for %d in ($(AUTO_SUBDIRS)) do rmdir /S /Q %d
-erase config.h
-erase gmp.h
-erase msvc-build

View file

@ -1,4 +1,4 @@
@ECHO off
REM @ECHO off
REM Converted from ecl_nsi.sh
SETLOCAL
@ -7,17 +7,17 @@ SET source=%1
SET where=%2
CD %where%
SET dest=ecl.nsi
SET where=%CD%
ECHO %where%
REM set -x
sed -e "/!@INSTALLFILES@/,$d" -e "s,@ECLDIR@,%where:\=\\%," %source% > %dest%
DIR /B /A:-D | sed -e "/^.*ecl.exe.*$/d" -e "/^.*ecl.nsi.*$/d" -e "s,^%where:\=\\%\\,,g" -e "s,^\(.*\)$, File \"${ECLDIR}\\\1\",g" >> %dest%
DIR /B /A:D | sed -e "s,^%where:\=\\%\\,,g" -e "s,^\(.*\)$, File /r \"${ECLDIR}\\\1\",g" >> %dest%
sed -e "1,/!@INSTALLFILES@/d;/!@DELETEFILES@/,$d" %source% >> %dest%
DIR /B /A:-D | sed -e "/^.*ecl.exe.*$/d" -e "/^.*ecl.nsi.*$/d" -e "s,^%where:\=\\%\\,,g" -e "s,^\(.*\)$, Delete \"$INSTDIR\\\1\",g" >> %dest%
DIR /B /A:D | sed -e "s,^%where:\=\\%\\,,g" -e "s,^\(.*\)$, RMDir /r \"$INSTDIR\\\1\",g" >> %dest%
sed -e "1,/!@DELETEFILES@/d" %source% >> %dest%
type %source%1 | ..\c\cut.exe "@ECLDIR@" "%where%" > %dest%
dir /s /b /a:-d | ..\c\cut.exe "ecl.exe" "/DELETE/" "ecl.nsi" "/DELETE/" "%where%\\" "" > ../aux_files
dir /s /b /a:d | ..\c\cut.exe "ecl.exe" "/DELETE/" "ecl.nsi" "/DELETE/" "%where%\\" "" > ../aux_dirs
echo HOLA
for /f %%i in (../aux_dirs) do @echo %%i
for /f %%i in (../aux_dirs) do @echo File /r "${ECLDIR}\%%i" >> %dest%
for /f %%i in (../aux_files) do @echo File "${ECLDIR}\%%i" >> %dest%
type %source%2 >> %dest%
for /f %%i in (../aux_files) do @echo Delete "$INSTDIR\%%i" >> %dest%
for /f %%i in (../aux_dirs) do @echo RMDir /r "$INSTDIR\%%i" >> %dest%
type %source%3 >> %dest%
ENDLOCAL

View file

@ -21,6 +21,9 @@ ECL 0.9g
- Generated C functions now have readable names corresponding to appropriate
Lisp function names (M. Pasternacki)
- ECL now compiles with the free Microsoft Visual C++ Toolkit
2003. Instructions are provided on how to do it.
* Errors fixed:
- Now .o files compiled with :SYSTEM-P T with dash in filename load

View file

@ -92,11 +92,11 @@ clean:
# Build rules
$(DPP): $(srcdir)/dpp.c symbols_list2.h
$(DPP): $(srcdir)/dpp.c $(srcdir)/symbols_list2.h
if test -f ../CROSS-DPP; then touch dpp; else \
$(TRUE_CC) @CFLAGS@ @ECL_CFLAGS@ -I../h -I./ -I$(HDIR) $(DEFS) $(srcdir)/dpp.c -o $@ ; \
fi
symbols_list2.h: $(srcdir)/symbols_list.h Makefile
$(srcdir)/symbols_list2.h: $(srcdir)/symbols_list.h Makefile
cat $(srcdir)/symbols_list.h | \
sed -e 's%{\([A-Z ]*.*".*"\),[^,]*,[ ]*NULL,.*}%{\1,NULL}%g' \
-e 's%{\([A-Z ]*.*".*"\),[^,]*,[ ]*\([^,]*\),.*}%{\1,"\2"}%g' \

View file

@ -136,12 +136,14 @@ int nres;
put_lineno(void)
{
static int flag = 0;
#if 0
if (flag)
fprintf(out, "#line %d\n", lineno);
else {
flag++;
fprintf(out, "#line %d \"%s\"\n", lineno, filename);
}
#endif
}
error(char *s)

1528
src/c/symbols_list2.h Normal file

File diff suppressed because it is too large Load diff

View file

@ -11,7 +11,7 @@
(setq *ld-format* #-msvc "~A -o ~S -L~S ~{~S ~} ~@?"
#+msvc "~A -Zi -Fe~S~* ~{~S ~} ~@?")
(setq *cc-format* #-msvc "~A ~A ~:[~*~;~A~] \"-I~A/h\" -w -c \"~A\" -o \"~A\""
#+msvc "~A ~A ~:[~*~;~A~] -I\"~A/h\" -Zi -W3 -c \"~A\" -Fo\"~A\"")
#+msvc "~A ~A ~:[~*~;~A~] -I\"~A/h\" -Zi -w -nologo -c \"~A\" -Fo\"~A\"")
#-dlopen
(setq *ld-flags* "@LDRPATH@ @LDFLAGS@ -lecl @CORE_LIBS@ @LIBS@ @FASL_LIBS@")
#+dlopen

View file

@ -301,7 +301,7 @@ static cl_object VV[VM];
(with-open-file (f "static_lib.tmp" :direction :output :if-does-not-exist :create :if-exists :supersede)
(format f "/DEBUGTYPE:CV /OUT:~A ~A ~{\"~&~A\"~}"
output-name o-name ld-flags))
(safe-system "lib @static_lib.tmp"))
(safe-system "link -lib @static_lib.tmp"))
(when (probe-file "static_lib.tmp")
(cmp-delete-file "static_lib.tmp")))
)

View file

@ -41,7 +41,7 @@
#+msvc "@CFLAGS@ @ECL_CFLAGS@ -I\"@true_srcdir@\"/h -I\"@true_builddir@\"/h"
c::*cc-format*
#-msvc "~A ~A ~:[~*~;~A~] -I\"@true_builddir@\"/h~* -w -c ~S -o ~S"
#+msvc "~A ~A ~:[~*~;~A~] -I\"@true_builddir@\"/h~* -Zi -W3 -c ~S -Fo~S"
#+msvc "~A ~A ~:[~*~;~A~] -I\"@true_builddir@\"/h~* -Zi -w -nologo -c ~S -Fo~S"
c::*ld-format*
#-msvc "~A -o ~S -L\"@true_builddir@\"~* ~{~S ~} ~@?"
#+msvc "~A -Zi -Fe~S~* ~{~S ~} ~@?")

View file

@ -113,10 +113,8 @@ index.html: $(srcdir)/index.in.html head
cat head $(srcdir)/index.in.html $(srcdir)/end | $(FILTER) > $@
install.html: $(srcdir)/install.in.html head
cat head $(srcdir)/install.in.html $(srcdir)/end | $(FILTER) > $@
news.html: $(srcdir)/news.in.html head
(cat head; sed -e '/^----.*$$/,$$d' $(srcdir)/news.in.html; \
sed -e '1,/^ECL [0-9\.]*$$/d;/^===*$$/d' $(srcdir)/../../ANNOUNCEMENT| sed -e '1d'; \
sed -e '1,/^----*$$/d' $(srcdir)/news.in.html; \
news.html: head
(cat head; echo '<pre>'; cat $(srcdir)/../../ANNOUNCEMENT| sed -e '1d'; echo '</pre>' \
cat $(srcdir)/end) | $(FILTER) > $@
benchmark.html: $(srcdir)/benchmark.in.html ../gabriel/BENCHMARK head
(cat head; cat $(srcdir)/benchmark.in.html; \

View file

@ -1,327 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html>
<head>
<title>ECL-Spain 0.1a</title>
</head>
<body>
<h1>ECL-Spain 0.1a</h1>
<a name="toc"><h2>Table of contents</h2></a>
<ul>
<li><a href="#intro">Introduction</a>
<li><a href="#intro">Project goals</a>
<li><a href="#news">News</a>
<li><a href="#bugs">Known bugs</a>
<li><a href="#distrib">Distribution</a>
<li><a href="#installing">Installation</a>
<li><a href="ecls-guide.html">User's guide</a>
<li><a href="#author">The author</a>
<li><a href="#bench">Benchmark</a>
</ul>
<a name="intro"><a href="#toc"><h2>Introduction</h2></a></a>
<a href="http://ecls.sourceforge.net">ECLS</a> stands for <em>Embeddable
Common-Lisp "Spain"</em>, and I usually read it as "e-klos". It is a an
implementation of the <a href="http://www.lisp.org">Common-Lisp language</a>
which aims to comply to the <a
href="http://www.lisp.org/HyperSpec/FrontMatter/index.html">ANSI X3J13</a>
definition of the language.
<p><a href="http://ecls.sourceforge.net">ECLS</a> combines a bytecodes
compiler/interpreter and a translator to C. The first one is specially suited
for prototyping and debugging. The second one produces fast code that can be
dynamically loaded into the interpreter or statically linked to build
standalone executables.
<p><a href="http://ecls.sourceforge.net">ECLS</a> is distributed under the <a
href="#copyright">GNU Library General Public License (GNU LGPL)</a>.
<p><a href="http://ecls.sourceforge.net">ECLS</a> is not a brand new
product. It has evolved from the EcoLisp implementation by Giuseppe Attardi
which in turn was based on the Kyoto Common-Lisp implementation done by Taiichi
Yuasa and Masami Hagiya, with contributions from several people. Nevertheless
the program has been seriously modified and the current code base bears little
resemblance to the previous implementations and the author of those
implementations should not be blamed for the faults of thi <a
href="http://ecls.sourceforge.net">ECLS</a>.
<a name="goals"><a href="#toc"><h2>Project goals</h2></a></a>
<ul>
<li><b>To produce a free implementation of Common-Lisp.</b>
<p><a href="http://ecls.sourceforge.net">ECLS</a> is released under the LGPL or
GNU Library General Public Licence (See <a
href="Copyright">Copyright</a>). This means that <a
href="http://ecls.sourceforge.net">ECLS</a> can be used in commercial projects
while keeping the implementation free.
<li><b>Compliance to the latest ANSI spec.</b>
<p><a href="http://ecls.sourceforge.net">ECLS</a> is already rather standards
compliant. <a href="http://ecls.sourceforge.net">ECLS</a> was born as a fork
from the ECL (Eco-Common-Lisp by Giussepe Attardi) which conformed to Cltl2
("Common-Lisp the Language 2"), but which was shipped with some ANSI
compatibility extensions. Currently the worst parts with respect to ANSI are
the LOOP package and parts of CLOS.
<li><b>Small code size.</b>
<p><a href="http://ecls.sourceforge.net">ECLS</a> is made of a runtime library
and an interpreter. The interpreter itself is small, at most three files of C
code. Once the lisp environment is booted, it takes about 1Mb of code (although
currently it is a bit more due to debuggin issues in the interpreter). If the
whole of <a href="http://ecls.sourceforge.net">ECLS</a> is compiled from lisp
to C, the resulting program is 1.5Mb. Nevertheless, there is room for
improvement in this area.
<li><b>Embedability.</b>
<p>In a near future <a href="http://ecls.sourceforge.net">ECLS</a> will be
shipped as a library that can be linked against arbitrary C
programs. Currently, arbitrary C code can be linked against <a
href="http://ecls.sourceforge.net">ECLS</a>, either statically or at runtime.
<li><b>Portability to arbitrary environments.</b>
<p><a href="http://ecls.sourceforge.net">ECLS</a> currently compiles and runs
on Linux, FreeBSD 4.x and NetBSD 1.5. Most of the code is portable. The parts
which change from operating system to operating system are about the
filesystem, sockets, signals and the allocation of big chunks of memory, but in
all it is well below 1000 lines. The worst part is related to word-size and
endianness. Work is in progress to port <a
href="http://ecls.sourceforge.net">ECLS</a> to 64-bit environments.
<li><b>Compilation via an ANSI C compiler.</b>
<p><a href="http://ecls.sourceforge.net">ECLS</a> can translate lisp code to C
code that can be dynamically loaded or linked to the runtime to produce a
standalone executable. Currently this process relies on GCC as a targed
platform, but work is in progress to remove GCC dependencies.
<li><b>Better garbage collection.</b>
<p>As of this release the memory that <a
href="http://ecls.sourceforge.net">ECLS</a> can allocate is restricted to
16Mb. I have tried replacing the garbage collector with a conservative one
(Boehm's GC v 4.11) and that did fix the problems, but increases the memory
requirements of <a href="http://ecls.sourceforge.net">ECLS</a>. Since this is
really undesirable, I have been also thinking about revamping the current
garbage collector with an interface to mmap(). Time wil tell...
<li><b>Improve the compiler: more agressive inlining, better operations among
numbers and unboxed arrays of complex numbers.</b>
<p><a href="http://ecls.sourceforge.net">ECLS</a> currently can inline all
operations that involve fixnums, characters and floating point
numbers. However, the type inferencer is not very powerful and therefore some
operations are not inlined because the compiler cannot actually tell the types
of the arguments and of the output.
</ul>
<a name="news"><a href="#toc"><h2>News in this release (ECLS-0.1a)</h2></a></a>
<ul>
<li>Due to human errors, the bytecompiler shipped with 0.1a was an
unfinished version. In 0.1b we shipped a more polished files. Some
of the errors which are fixed are
<ul>
<li>Produce the right code for TAGBODY inside closures</li>
<li>Activate compiler for SYMBOL-MACROLET</li>
<li>Allow non-keyword symbols as lambda-list-keywords</li>
<li>Allow more than one :ALLOW-OTHER-KEYS to be supplied, but discard other than the first one
<li> Process declarations in FLET/LABELS forms
</ul>
<li> Fixed the C compiler routines for TAGBODY: it would produce wrong
code when jumping out of a closure.
<li> Rewrite the error system using KMP's condition system, CLOS and a
rudimentary interface to the toplevel.
<li> Enclosing the bytecompiler in an UNWIND-PROTECT ensures that the
status of the compiler and of the interpreter is always consistent.
<li> Port and incorporate Peter Van Eynde's test suite for ANSI
compliance.
<li> Replace features ECL/ECL-MIN with ECLS and ECLS-MIN. All references
to ECL (Eco-Common-Lisp) should have been dropped by now.
<li> Add simple-program-error and simple-control-error to the hierarchy
of conditions, and try to ensure that all routines in libecls.a
signal the right type of condition.
<li> Define COMPLEMENT and CONTINOUSLY.
<li> Fix #'= between bignums.
<li> NIL is no longer valid as the first of a pair of bounding index
designators, i.e. (nstring-upcase "aa" :start nil :end nil) causes
an error.
</ul>
<a name="bugs"><a href="#toc"><h2>Known bugs</h2></a></a>
As I mentioned above, the problem I am finding here is the lack of test suites
which I can use to detect failures in the behavior of any function. Currently I
can assure that <a href="http://ecls.sourceforge.net">ECLS</a> passes most of
the tests from the <a href="http://clocc.sourceforge.net">the CLOCC suite</a>.
The most important exceptions are
<ul>
<li>CLOS
<li>#'format
<li>#'unread-char is too lax
<li>The CL package is too polluted
<li>LOOP lacks some of the standard keywords, including destructuring
<li>Support for logical pathnames is incomplete
</ul>
If you find something that should be fixed or that the behavior of a
function is particularly misleading with respect to the standards, feel free
to tell me so.
Some other bugs which need to be fixed are:
<ul>
<li>Threads and sockets haven't been tested yet.
<li>#'format doesn't pass the Cltl-1 tests and fails when the number of
arguments is large.
<li>Needs better support for wildcards in pathnames.
<li>Bugs in logical operations among bignums.
<li>Support for CLOS needs yet more optimization.
</ul>
<a name="distrib"><a href="#toc"><h2>Distribution</h2></a></a>
This project is hosted at <a href="http://ecls.sourceforge.net">Source
forge</a>. You can get current copies of the sources and of the documentation
in there.
<a name="installing"><a href="#toc"><h2>Installation</h2></a></a>
<ul>
<li>Unpack the tar file
<pre>
gunzip -c ecls.tgz | tar xf -
</pre>
<li>Run the configuration file.
<pre>
cd ecls-0.1a
./configure
</pre>
The previous step creates a directory with the name <b>build</b>, and
stores a bunch of makefiles in it.
<li>Use GNU make to invoke the compilation
<pre>
make
</pre>
<li>If you want to test the fresh new executable before installing. You you
should invoke ECLS from withing the build directory using the "-dir ./"
argument to advice him about the right place to find header files, libraries,
etc. For instance, under linux the build directory is "linux" and we would do
<pre>
$ ./configure --prefix=$HOME
[...]
$ cd build
$ make
[...]
$ ./ecls -dir ./
</pre>
<li>Install it in the desired location
<pre>
make install
</pre>
</ul>
<p>As a side note, a --disable-clos is still in ./configure, but its use is
discouraged and unsupported.
<a name="author"><a href="#toc"><h2>The author</h2></a></a>
For the people who built the several pieces from ECoLisp, see the README.orig
file. To contact the author of <a href="http://ecls.sourceforge.net">ECLS</a>,
use the following address
<pre>
Juan Jose Garcia Ripoll
Univ. de Castilla-La Mancha
E.T.S.I. Industriales
Departamento de Matematicas
c/Camilo Jose Cela, 3
Ciudad Real, E-13071
Spain
<a href="mailto:jjgarcia@ind-cr.uclm.es">jjgarcia@ind-cr.uclm.es</a>
</pre>
<a name="news"><a href="#toc"><h2>Benchmark</h2></a></a>
Benchmarks should be taken with a grain of salt. <a
href="http://ecls.sourceforge.net">ECLS</a> does not aim to compete with any
commercial or open source implementation. The purpose of these benchmarks are,
thus, to show the progress of <a href="http://ecls.sourceforge.net">ECLS</a>
itself from version to version.
<p>It also serves to show how well other implementations perform: CLISPc, which
is based on bytecodes, is astonishingly fast, compared to other bytecodes
implementations (ECLSi, CMUCLi) and to native code implementations (ECLSc,
CMUCLc).
<p>All benchmarks are executed one after another. The benchmark currently shows
just mean execution times in seconds, using English decimal point (0.03 = 3/100
seconds). This means that performance of garbage collectors has a deep impact
in these numbers.
<p>It would be nice to collect some other information, such as memory use and
garbage collector timings, but that is beyond my reach for now. Help is always
welcome.
<p>Finally, I have decided to distribute Gabriel's benchmarks together with <a
href="http://ecls.sourceforge.net">ECLS</a>. The reason is that this code seems
to belong to public domain and I had to perform several changes in order to let
it run with different implementations. To recreate the benchmark just get in
<tt>build/gabriel/</tt> and type <tt>make</tt>.
<pre>
CLISPi ECLSi CMUCLi CLISPc ECLSc CMUCLc
boyer 2.490 28.283 13.520 0.397 0.767 0.110
browse 3.116 7.167 13.260 0.459 ***** 0.280
ctak 0.406 0.883 1.530 0.032 0.017 0.000
dderiv 0.455 1.317 1.850 0.110 0.167 0.080
deriv 0.405 1.133 1.670 0.111 0.167 0.070
destru-mod 1.418 0.871 2.398 0.053 0.025 0.025
destru 1.384 0.871 2.412 0.053 0.025 0.020
div2 0.889 1.867 3.850 0.132 0.150 0.070
fprint 0.026 0.046 0.015 0.026 0.042 0.015
fread 0.009 0.017 0.007 0.009 0.017 0.005
frpoly 3.026 22.750 15.240 0.625 6.267 0.220
puzzle 6.452 4.633 14.630 0.481 0.033 0.020
puzzle-mod 6.890 4.667 14.680 0.480 0.017 0.030
puzzle-mod2 6.467 4.633 14.690 0.480 0.033 0.030
stak 0.374 0.842 1.768 0.047 0.021 0.007
tak 3.394 9.183 11.500 0.208 0.033 0.020
tak-mod 3.385 9.450 11.520 0.208 0.033 0.020
takl 1.407 6.433 9.130 0.107 0.000 0.010
takr 0.346 0.971 2.035 0.026 0.004 0.002
tprint 0.022 0.046 0.023 0.022 0.046 0.020
traverse 41.230 71.767 108.390 1.880 1.450 0.370
triang-mod 74.765 169.750 255.840 7.362 1.567 3.110
triang 71.018 149.417 243.330 5.797 0.667 *****
IMPLi = Implementation IMPL interpreted
IMPLc = Implementation IMPL compiled
CLISP = CLISP 2000-03-06 (March 2000)
CMUCL = CMUCL 18c
ECLS = ECLS 0.1a
</pre></body></html>

View file

@ -67,27 +67,28 @@ improvement in this area.
<li><b>Embedability.</b>
<p>In a near future <a href="http://ecls.sourceforge.net">ECL</a> will be
shipped as a library that can be linked against arbitrary C
programs. Currently, arbitrary C code can be linked against <a
href="http://ecls.sourceforge.net">ECL</a>, either statically or at runtime.
<p><a href="http://ecls.sourceforge.net">ECL</a> is shipped as a
library that can be linked against arbitrary C programs. Arbitrary
C/C++ code can be linked against <a
href="http://ecls.sourceforge.net">ECL</a>, either statically or at
runtime.
<li><b>Portability to arbitrary environments.</b>
<p><a href="http://ecls.sourceforge.net">ECL</a> is currently supported in
<ul>
<li>Debian and Redhat Linux on Intel</li>
<li>Debian Linux on PowerPC</li>
<li>FreeBSD 4.x</li>
<li>Cygwin on Intel Windows (statically linked)</li>
<li>MacOSX (statically linked)</li>
<li>Linux on Intel, PowerPC, Alpha and Opteron</li>
<li>FreeBSD on Intel</li>
<li>NetBSD on Intel and Alpha</li>
<li>Microsoft Windows</li>
<li>MacOSX (currently broken)</li>
</ul>
Most of the code is portable. The parts
which change from operating system to operating system are about the
filesystem, sockets, signals and the allocation of big chunks of memory, but in
all it is well below 1000 lines. The worst part is related to word-size and
endianness. Work is in progress to port <a
href="http://ecls.sourceforge.net">ECL</a> to 64-bit environments.
Most of the code is portable and clean from issues like endianness and
word size (<a href="http://ecls.sourceforge.net">ECL</a> works on 64
bit architectures). The parts which change from operating system to
operating system are about the filesystem, sockets, signals and the
allocation of big chunks of memory, but in all it is well below 1000
lines.
<li><b>Compilation via an ANSI C compiler.</b>

View file

@ -26,7 +26,6 @@
<tr><td><a href="clx/index.html"><b>CLX manual</b></a></td></tr>
<tr><td><a href="benchmark.html"><b>Benchmarks</b></a></td></tr>
<tr><td><a href="download.html"><b>Distribution</b></a></td></tr>
<tr><td><a href="patch-current-exp.gz"><b>Experimental<br>Patches</b></a></td></tr>
<tr><td><a
href="http://lists.sourceforge.net/mailman/listinfo/ecls-list"><b>Mailing list</b></a></td></tr>
<tr><td><a href="http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/ecls/ecls"><b>Browse CVS</b></a></td></tr>

View file

@ -12,9 +12,9 @@ definition of the language.
<ul>
<li>A bytecodes compiler and interpreter.</li>
<li>A translator to C.</li>
<li>An interface to foreign functions.</li>
<li>A UFFI-compatible interface to C code.</li>
<li>A dynamic loader.</li>
<li>The possibility to build standalone executables.</li>
<li>The possibility to build standalone executables and DLLs.</li>
<li>The Common-Lisp Object System (CLOS).</li>
<li>Conditions and restarts for handling errors.</li>
<li>Sockets as ordinary streams.</li>
@ -24,8 +24,10 @@ definition of the language.
</ul>
<p>ECL supports the operating systems Linux, FreeBSD, NetBSD, Solaris,
Windows/Cygwin and OSX, running on top of the Intel, Sparc, Alpha and PowerPC
processors. Porting to other architectures should be rather easy.</p>
Windows, running on top of the Intel, Sparc, Alpha and PowerPC
processors. The port to OSX is broken due to some problems with the
garbage collector and latest versions of OSX. Porting to other
architectures should be rather easy.</p>
<h2>The author</h2>
@ -33,8 +35,8 @@ The original version was written by Giuseppe Attardi.
The current maintainer of <a href="http://ecls.sourceforge.net">ECLS</a> is
Juan Jose Garcia Ripoll, who can be reached at the ECLS mailing list.
<p>We seek volunteers willing to test or improve the implementation. We accept
both code and constructive critics, so feel free to share your toughts at the
mailing list.
<p>We seek volunteers willing to test or improve the
implementation. We accept both code and constructive critics, so feel
free to share your toughts at the mailing list.
<h2>Latest news</h2>

View file

@ -15,20 +15,6 @@ href="#msvc">the appropiate section</a>.
chapter</a> on how to pre-configure, write down a configuration file
and finish the compilation.
<h3><a name="msvc">Microsoft C++</a></h3>
<ul>
<li>Change to the <tt>msvc</tt> directory.
<li>Run <tt>nmake</tt> to build ECL.
<li>Run <tt>nmake flatinstall prefix=d:\Software\ECL</tt> where the
<tt>prefix</tt> is the directory where you want to install ECL.
<li>Optionally, if you want to build a self-installing executable, you can install NSIS
and run <tt>nmake windows-nsi</tt>.
</ul>
<h3><a name="configure">Autoconf based configuration</a></h3>
<ul>
@ -39,21 +25,21 @@ and run <tt>nmake windows-nsi</tt>.
<li>Run the configuration file.
<pre>
cd ecl-@VERSION@
cd ecl-@PACKAGE_VERSION@
./configure
</pre>
The previous step creates a directory with the name <b>build</b>, and
stores a bunch of makefiles in it.
<li>Use GNU make to invoke the compilation
<li>Use GNU make to begin building ECL
<pre>
make
</pre>
<li>If you want to test the fresh new executable before installing. You you
should invoke ECL from withing the build directory using the "-dir ./"
argument to advice him about the right place to find header files, libraries,
etc. For instance, under linux the build directory is "linux" and we would do
<li>If you want to test the fresh new executable before installing,
you can do it. You should invoke ECL from withing the build directory
using the "-dir ./" argument to advice it about the right place to
find header files, libraries, etc
<pre>
$ ./configure --prefix=$HOME
[...]
@ -63,12 +49,43 @@ etc. For instance, under linux the build directory is "linux" and we would do
$ ./ecl -dir ./
</pre>
<li>Install it in the desired location
<li>Install it in the preconfigured location
<pre>
make install
</pre>
</ul>
<h3><a name="msvc">Microsoft C++</a></h3>
<p>If you have a commercial version of Microsoft Visual Studio, the
steps are simple:
<ul>
<li>Change to the <tt>msvc</tt> directory.
<li>Run <tt>nmake</tt> to build ECL.
<li>Run <tt>nmake flatinstall prefix=d:\Software\ECL</tt> where the
<tt>prefix</tt> is the directory where you want to install ECL.
<li>Optionally, if you want to build a self-installing executable, you can install <a href="http://nsis.sourceforge.net">NSIS</a>
and run <tt>nmake windows-nsi</tt>.
</ul>
<p>If you want to build ECL using the free Microsoft Visual C++
Toolkit 2003, you should follow these before building ECL:
<ul>
<li> Download and install <a href="http://msdn.microsoft.com/visualc/vctoolkit2003/">Microsoft Visual C++ Toolkit</a>.
<li> Download and install the <a href="http://www.microsoft.com/msdownload/platformsdk/sdkupdate/">Microsoft Platform SDK</a>
<li> Download NMAKE and install. There is an old version in <a href="http://download.microsoft.com/download/vc15/Patch/1.52/W95/EN-US/Nmake15.exe">Microsoft's download page</a>.
<li> Download and install the .NET Framework SDK. Copy the files msvcrt.lib an msvcrtd.lib from this toolkit to the directory where the Visual C++ Toolkit keeps it libraries. Afterwards you can uninstall the .NET SDK.
<li> Make sure that
<ul>
<li><tt>%PATH%</tt> includes the directories <tt>bin</tt> of both the C++ Toolkit, NMAKE and the SDK.
<li><tt>%INCLUDE%</tt> includes the directories <tt>include</tt> of both the C++ Toolkit and the SDK.
<li><tt>%LIB%</tt>includes the directories <tt>lib</tt> of both the C++ Toolkit and the SDK.
</ul>
</ul>
<h3><a name="cross">Cross compiling ECL</a></h3>

View file

@ -1,31 +0,0 @@
<h2>News in this release (ECL-@VERSION@)</h2>
<pre>
-------
</pre>
<h2>Known bugs</h2>
As I mentioned above, the problem I am finding here is the lack of test suites
which I can use to detect failures in the behavior of any function. Currently I
can assure that <a href="http://ecls.sourceforge.net">ECL</a> passes most of
the tests from the <a href="http://clocc.sourceforge.net">the CLOCC suite</a>.
The most important exceptions are
<ul>
<li>CLOS
<li>#'format
<li>#'unread-char is too lax
<li>Support for logical pathnames is incomplete
<li>No support for (SETF (VALUES ...) ...)
</ul>
If you find something that should be fixed or that the behavior of a
function is particularly misleading with respect to the standards, feel free
to tell me so.
Some other bugs which need to be fixed are:
<ul>
<li>Threads were broken with latest improvements.
<li>#'format doesn't pass the Cltl-1 tests.
<li>Support for CLOS needs yet more optimization.
<li>ECL has its own pretty-printer, which does not conform ANSI.
</ul>

View file

@ -18,6 +18,8 @@ sed_emulator(int narg, char **patterns)
for (i = 0; i < narg; i+=2) {
char *b3, *b4;
while ((b3 = strstr(b1, patterns[i]))) {
if (strcmp(patterns[i+1], "/DELETE/") == 0)
goto GO_ON;
b3[0] = 0;
strcpy(b2, b1);
strcat(b2, patterns[i+1]);
@ -26,6 +28,7 @@ sed_emulator(int narg, char **patterns)
}
}
puts(b1);
GO_ON:;
}
}

54
src/util/ecl.nsi1 Normal file
View file

@ -0,0 +1,54 @@
; Script generated by the HM NIS Edit Script Wizard.
; HM NIS Edit Wizard helper defines
!define PRODUCT_NAME "ECL"
!define PRODUCT_VERSION "0.9d"
!define PRODUCT_PUBLISHER "Juan Jose Garcia Ripoll"
!define PRODUCT_WEB_SITE "http://ecls.sourceforge.net"
!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\ecl.exe"
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
!define PRODUCT_UNINST_ROOT_KEY "HKLM"
!define ECLDIR "@ECLDIR@"
; MUI 1.67 compatible ------
!include "MUI.nsh"
; MUI Settings
!define MUI_ABORTWARNING
!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico"
!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico"
; Welcome page
!insertmacro MUI_PAGE_WELCOME
; License page
!insertmacro MUI_PAGE_LICENSE "${ECLDIR}\doc\Copyright"
; Directory page
!insertmacro MUI_PAGE_DIRECTORY
; Instfiles page
!insertmacro MUI_PAGE_INSTFILES
; Finish page
!define MUI_FINISHPAGE_RUN "$INSTDIR\ecl.exe"
!insertmacro MUI_PAGE_FINISH
; Uninstaller pages
!insertmacro MUI_UNPAGE_INSTFILES
; Language files
!insertmacro MUI_LANGUAGE "English"
; MUI end ------
Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
OutFile "Setup.exe"
InstallDir "$PROGRAMFILES\ECL"
InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""
ShowInstDetails show
ShowUnInstDetails show
Section "Hauptgruppe" SEC01
SetOutPath "$INSTDIR"
SetOverwrite ifnewer
File "${ECLDIR}\ecl.exe"
CreateDirectory "$SMPROGRAMS\ECL"
CreateShortCut "$SMPROGRAMS\ECL\ECL.lnk" "$INSTDIR\ecl.exe"
CreateShortCut "$DESKTOP\ECL.lnk" "$INSTDIR\ecl.exe"

33
src/util/ecl.nsi2 Normal file
View file

@ -0,0 +1,33 @@
SectionEnd
Section -AdditionalIcons
WriteIniStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}"
CreateShortCut "$SMPROGRAMS\ECL\Website.lnk" "$INSTDIR\${PRODUCT_NAME}.url"
CreateShortCut "$SMPROGRAMS\ECL\Uninstall.lnk" "$INSTDIR\uninst.exe"
SectionEnd
Section -Post
WriteUninstaller "$INSTDIR\uninst.exe"
WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\ecl.exe"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\ecl.exe"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"
SectionEnd
Function un.onUninstSuccess
HideWindow
MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) has been succesfully deinstalled."
FunctionEnd
Function un.onInit
MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "Do you really want to deinstall $(^Name)?" IDYES +2
Abort
FunctionEnd
Section Uninstall
Delete "$INSTDIR\${PRODUCT_NAME}.url"
Delete "$INSTDIR\uninst.exe"

14
src/util/ecl.nsi3 Normal file
View file

@ -0,0 +1,14 @@
Delete "$INSTDIR\ecl.exe"
Delete "$SMPROGRAMS\ECL\Uninstall.lnk"
Delete "$SMPROGRAMS\ECL\Website.lnk"
Delete "$DESKTOP\ECL.lnk"
Delete "$SMPROGRAMS\ECL\ECL.lnk"
RMDir "$SMPROGRAMS\ECL"
RMDir "$INSTDIR"
DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"
SetAutoClose true
SectionEnd

16
src/util/make_msvcrtlib Executable file
View file

@ -0,0 +1,16 @@
#!/bin/sh
set -x
export MSVC="d:/unix/msvc/bin"
cat > exports.sed <<EOF
/^.*@.*$/d
/[ \t]*ordinal hint/,/^[ \t]*Summary/{
/^[ \t]\+[0-9]\+/{
s/^[ \t]\+[0-9]\+[ \t]\+[0-9A-Fa-f]\+[ \t]\+[0-9A-Fa-f]\+[ \t]\+\(.*\)/\1/p
}
}
EOF
echo EXPORTS> msvcrt.def
${MSVC}/link -dump -exports ${SYSTEMROOT}/System32/msvcrt.dll | tee msvcrt.out | sed -nf exports.sed >> msvcrt.def
${MSVC}/link -lib -machine:X86 -def:msvcrt.def -out:msvcrt.lib