Camm Maguire writes:
OK, something like this is now in CVS head and Version_2_6_8pre.
Please test, esp. on windows, and let me know if I can close the bug
on the website.
Trying to backport compiler-temp-dir patch from 2.6.8pre
to 2.6.7 I found a serious flaw in it. The problem is
that value of *tmp-dir* is determined during build time
and this value remains hard-coded in gcl or maxima image.
This makes lots of trouble when program get installed on
other computer. Quite probable that compile will not
work unless *tmp-dir* is reset according to new
environment. I propose to modify initial value of
*tmp-dir* and its use in gazonk-name:
(1) Make default value of *tmp-dir* nil
(2) In gazonk-name:
if *tmp-dir* is nil then use (get-temp-dir)
if *tmp-dir* is not nil use it's value
The patch to gcl 2.6.7 which works to me
is attached. Please note also (abs(si::getpid))
in gazonk-name. The problem is that getpid
may return negative values on Windows Me.
Best wishes,
Vadim
--
Vadim V. Zhytnikov
<[EMAIL PROTECTED]>
<[EMAIL PROTECTED]>
diff -uNr gcl-2.6.7-orig/cmpnew/gcl_cmpmain.lsp gcl-2.6.7/cmpnew/gcl_cmpmain.lsp
--- gcl-2.6.7-orig/cmpnew/gcl_cmpmain.lsp 2005-05-07 01:56:55 +0400
+++ gcl-2.6.7/cmpnew/gcl_cmpmain.lsp 2006-01-04 20:05:55 +0300
@@ -391,10 +391,31 @@
(values)
))))))
+(defun get-temp-dir ()
+ (dolist (x `(,@(mapcar 'si::getenv #-winnt '("TMPDIR" "TMP") #+winnt
'("TEMP" "TMP")) #-winnt "/tmp" ""))
+ (when x
+ (let* ((x (pathname x))
+ (x (if (pathname-name x) x
+ (merge-pathnames
+ (make-pathname :directory (butlast (pathname-directory x))
+ :name (car (last (pathname-directory x))))
+ x))))
+ (when (directory x)
+ (return-from
+ get-temp-dir
+ (namestring
+ (make-pathname
+ :directory (when (or (pathname-directory x) (pathname-name x))
+ (append (pathname-directory x) (list (pathname-name
x))))))))))))
+
+(defvar *tmp-dir* nil)
+
(defun gazonk-name ( &aux tem)
(dotimes (i 1000)
- (unless (probe-file (setq tem (merge-pathnames (format nil
"gazonk~d.lsp" i))))
- (return-from gazonk-name (pathname tem))))
+ (let ((tem (merge-pathnames
+ (format nil "~agazonk_~d_~d.lsp" (if *tmp-dir* *tmp-dir*
(get-temp-dir)) (abs(si::getpid)) i))))
+ (unless (probe-file tem)
+ (return-from gazonk-name (pathname tem)))))
(error "1000 gazonk names used already!"))
(defun prin1-cmp (form strm)
diff -uNr gcl-2.6.7-orig/pcl/makefile gcl-2.6.7/pcl/makefile
--- gcl-2.6.7-orig/pcl/makefile 2005-05-07 18:40:33 +0400
+++ gcl-2.6.7/pcl/makefile 2006-01-04 20:04:07 +0300
@@ -19,7 +19,7 @@
'(setq compiler::*default-c-file* t)'\
'(setq compiler::*default-data-file* t)'\
'(setq compiler::*default-system-p* t)' \
- '(setq compiler::*keep-gaz* t)'
+ '(setq compiler::*keep-gaz* t compiler::*tmp-dir* "")'
all: $(addsuffix .c,$(AFILES)) $(addsuffix .o,$(AFILES))
@@ -33,14 +33,12 @@
$(addsuffix .lisp,$(subst
gcl_pcl_impl_low,impl/gcl/gcl_pcl_impl_low,$(FILES)))
rm -f *.o *gazonk*
cp ../h/cmpinclude.h .
- echo ${SETUP} '(pcl::compile-pcl)' | ../unixport/saved_gcl ../unixport/
-# FIXME -- small compiler setjmp/volatile detection bug -- CM
-# doesn't seem to be needed now, but investigate more later
-# patch -p0 <pcl_methods.patch
-# rm -f pcl_methods.o
- for i in gazonk* ; do j=$$(echo $$i | sed 's,\..*$$,,1');\
- cat $$i | sed -e "s,$$j\.h,gcl_pcl_$$j.h,1" \
- -e "s,init_.*$$j,init_gcl_pcl_$$j,g"
>gcl_pcl_$$i && rm $$i; done
+ echo ${SETUP} '(pcl::compile-pcl)' | ../unixport/saved_gcl
+ for i in gazonk* ; do \
+ j=$$(echo $$i | sed 's,\..*$$,,1');k="gazonk$$(echo $$j | cut
-f3 -d\_)";\
+ l=$$(echo $$i | sed 's,^.*\.,,1');\
+ cat $$i | sed -e "s,$$j\.h,gcl_pcl_$$k.h,1" \
+ -e "s,init_.*$$j,init_gcl_pcl_$$k,g"
>gcl_pcl_$$k.$$l && rm $$i; done
%.o: %.c %.h %.data
$(CC) $(CFLAGS) -c $< -o $@
_______________________________________________
Gcl-devel mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/gcl-devel