The following patch works.

Do we need to compare PATHNAME_-DEVICE as well
(returns "C" in this case) in 'isSystemDirectory'?

- Qian

diff --git a/src/interp/lisplib.boot b/src/interp/lisplib.boot
index 9c37eacc..b11d9603 100644
--- a/src/interp/lisplib.boot
+++ b/src/interp/lisplib.boot
@@ -71,7 +71,7 @@ loadLibIfNotLoaded libName ==
 loadLib cname ==
   startTimingProcess 'load
   fullLibName := get_database(cname, 'OBJECT) or return nil
-  systemdir? := isSystemDirectory(pathnameDirectory fullLibName)
+  systemdir? := isSystemDirectory(fullLibName)
   update? := not systemdir?
   loadLibNoUpdate1(cname, fullLibName)
   kind := get_database(cname, 'CONSTRUCTORKIND)
diff --git a/src/interp/pathname.boot b/src/interp/pathname.boot
index 7bd1f1b3..5a81eb49 100644
--- a/src/interp/pathname.boot
+++ b/src/interp/pathname.boot
@@ -61,4 +61,7 @@ isExistingFile f ==

 --% Scratchpad II File Name Functions

-isSystemDirectory dir == EVERY(function CHAR_=,$spadroot,dir)
+isSystemDirectory file ==
+  p1 := BUTLAST PATHNAME_-DIRECTORY file
+  p2 := PATHNAME_-DIRECTORY pad_directory_name $spadroot
+  p1 = p2


On 5/13/24 19:52, Qian Yun wrote:
Yes, make 'updateCategoryTable' a no-op and the problem goes away.

As for the system directory issue:

(3) -> )boot get_database('Integer, 'OBJECT)

(EVAL-WHEN (:EXECUTE :LOAD-TOPLEVEL)
   (PROG () (RETURN (|get_database| '|Integer| 'OBJECT))))
Value = "C:/msys64/home/oldk1331/build/target/x86_64-w64-mingw32/algebra/INT.fasl"
(3) -> )boot pathnameDirectory get_database('Integer, 'OBJECT)

(EVAL-WHEN (:EXECUTE :LOAD-TOPLEVEL)
  (PROG () (RETURN (|pathnameDirectory| (|get_database| '|Integer| 'OBJECT)))))
Value = "/msys64/home/oldk1331/build/target/x86_64-w64-mingw32/algebra/"
(3) -> )boot isSystemDirectory pathnameDirectory get_database('Integer, 'OBJECT)

(EVAL-WHEN (:EXECUTE :LOAD-TOPLEVEL)
   (PROG ()
     (RETURN
      (|isSystemDirectory|
       (|pathnameDirectory| (|get_database| '|Integer| 'OBJECT))))))
Value = NIL


I'll look into where this originates and how to fix it.

- Qian

On 5/13/24 19:05, Waldek Hebisch wrote:
On Mon, May 13, 2024 at 06:32:10PM +0800, Qian Yun wrote:
I modified i-coerce.boot, then in FRICASsys,
   )read i-coerce
   )lisp (defun GLESSEQP (X Y) (BREAK))
   series(sin x)

The above has no problem in Linux, but fails under
windows, backtrace is in attachment.

AFAICS there is something wrong on Windows with detection of
system directories.  "Integer" is system domain and
'updateCategoryTable' should not be called for it.

On Linux, when I force call to 'updateCategoryTable' I get
the same failure as on Windows.

In principle extra 'updateCategoryTable' should cause no trouble,
ATM I do not know why it triggers failue in the test.


--
You received this message because you are subscribed to the Google Groups "FriCAS - 
computer algebra system" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/fricas-devel/7c1898ff-ed3e-4f9d-b74c-06796d644e2d%40gmail.com.

Reply via email to