I am having some trouble with figuring out the default choices of the values of some of the paths used by the ECL compiler.
I have a fairly vanilla install of ecl, where I think that at least the relative positions of the installed files concerning ecl are typical. I find: > (translate-logical-pathname "SYS:") #P"/mnt/usb1/scratch/nbruin/4.6.2/local/lib/ecl/" > (require 'cmp) ;;; Loading #P"/mnt/usb1/scratch/nbruin/4.6.2/local/lib/ecl/cmp.fas" ("CMP") > c::*ecl-library-directory* "/mnt/usb1/scratch/nbruin/4.6.2/local/lib/" > (c::ecl-library-directory) "/mnt/usb1/scratch/nbruin/4.6.2/local/lib/" This indicates that the value of c::*ecl-library-directory* was vetted and found correct. This was done by the test: (probe-file (merge-pathnames (compile-file-pathname "ecl" :type #+dlopen :shared-library #-dlopen :static-library) c::*ecl-library-directory*)) which succeeds with #P"/mnt/usb1/scratch/nbruin/4.6.2/local/lib/libecl.so.11.1.1" However, if I do > (setf c::*ecl-library-directory* nil) > (c::ecl-library-directory) "/mnt/usb1/scratch/nbruin/4.6.2/local/lib/ecl/" > c::*ecl-library-directory* "/mnt/usb1/scratch/nbruin/4.6.2/local/lib/ecl/" I see the system has cooked up another default, namely the directory for which (probe-file "SYS:BUILD-STAMP") succeeds. However, the file libecl.so does not reside there! This means that c::ecl-library-directory, when presented with a value of c::*ecl-library-directory* it thinks is invalid, overwrites it with a value that is also invalid by its earlier criterion! That's probably not as intended. Shouldn't the value be initialized to the following ? (namestring (make-pathname :directory (butlast (pathname-directory (translate-logical-pathname "SYS:"))))) A similar story applies to cc:ecl-include-directory: > (c::ecl-include-directory) "/mnt/usb1/scratch/nbruin/4.6.2/local/include/" which was approved because the following succeeds: > (probe-file (merge-pathnames "ecl/config.h" c::*ecl-include-directory*)) #P"/mnt/usb1/scratch/nbruin/4.6.2/local/include/ecl/config.h" Should that fail, then the routine tries if "SYS:" would be a reasonable candidate via > (probe-file "SYS:ecl;config.h") NIL I don't think that will succeed in any sane installation. The value that would probably be OK is "SYS:..;..;include", given that: > (probe-file "SYS:..;..;include;ecl;config.h") #P"/mnt/usb1/scratch/nbruin/4.6.2/local/lib/ecl-11.1.1/../../include/ecl/config.h" so probably the thing to try would be: (namestring (make-pathname :directory (append (butlast (pathname-directory (translate-logical-pathname "SYS:")) 2) '("include")))) Most of this doesn't normally matter because ECL captures reasonable default values for *ecl-library-directory* and *ecl-include-directory* at build-time. However, would you be interested in using reasonable defaults derived from runtime information (being "SYS:") instead? It would mean that ECL continues to work if its installation is moved after build, as long as the relative position of headers and libraries is as usual. Best wishes, Nils ------------------------------------------------------------------------------ What Every C/C++ and Fortran developer Should Know! Read this article and learn how Intel has extended the reach of its next-generation tools to help Windows* and Linux* C/C++ and Fortran developers boost performance applications - including clusters. http://p.sf.net/sfu/intel-dev2devmay _______________________________________________ Ecls-list mailing list Ecls-list@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/ecls-list