bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [patch] 21.3 executable.el - New func executable-command-find-unix-p


From: Jari Aalto+mail.linux
Subject: Re: [patch] 21.3 executable.el - New func executable-command-find-unix-p
Date: Tue, 03 Feb 2004 18:38:15 +0200
User-agent: Gnus/5.110002 (No Gnus v0.2) Emacs/21.3 (windows-nt) (i386-msvc-nt5.0.2195)

* Wed 2004-01-28 jari.aalto <AT> poboxes.com (Jari Aalto+mail.linux) 
gnu.emacs.bug
* 
<http://groups.google.com/groups?oi=djq&as_umsgid=%3Cmailman.1524.1075323038.928.bug-gnu-emacs@gnu.org>
| 
| Right. The message is a good indication of Unix find(1) as well. Here
| fix for the previous code. Also added couple of options more like -print.
| 
| 
| 2004-01-28  Jari Aalto  <jaalto@w2kpicasso>
| 
|       * progmodes/executable.el (executable-command-find-unix-p): 
|       Check basic find which does not support -maxdepth.
|       Return find(1) type: 'gnu, t or nil. 

And a little more error checking added. This patch should be aplied
after the previous on {See Message ID-reference above).

2004-02-03 Tue  Jari Aalto  <jari.aalto <AT> poboxes.com>

        * progmodes/executable.el (executable-command-find-test-data): New.
        (executable-command-find-unix-p): Improved error checking. Moved
        logic to `executable-command-find-test-data'.


Index: executable.el
===================================================================
RCS file: 
/cygdrive/h/data/version-control/cvsroot/emacs/gnu-emacs/lisp213/progmodes/executable.el,v
retrieving revision 1.3
retrieving revision 1.5
diff -u -IId: -b -w -u -r1.3 -r1.5
--- executable.el       28 Jan 2004 20:56:16 -0000      1.3
+++ executable.el       3 Feb 2004 16:34:18 -0000       1.5
@@ -52,7 +52,8 @@
 
 ;;; Code:
 
-(autoload 'find-if "cl-seq")
+(eval-when-compile
+  (require 'cl))
 
 (defgroup executable nil
   "Base functionality for executable interpreter scripts"
@@ -145,6 +146,27 @@
       '(".exe" ".com" ".bat" ".cmd" ".btm" "")
     '("")))
 
+(defun executable-command-find-test-data ()
+  "Return list (DIR FILE) to search from randomly picked directory."
+  (let (dir file)
+    (dolist (elt (append load-path (list (getenv "TEMP")
+                                         (getenv "TMP")
+                                         "/tmp"
+                                         "c:/temp")))
+      (when (and (stringp elt)
+                 ;;  load-path may contain stale directories.
+                 (file-directory-p elt)
+                 (setq dir elt)
+                 (setq file (find-if
+                             (lambda (x)
+                               ;; Filter directories . and ..
+                               (and (not (string-match "^\\.\\.?$" x))
+                                    (not (file-directory-p x))))
+                             (directory-files dir 'full))))
+        (return)))
+    (when (and dir file)
+      (list dir (file-name-nondirectory file)))))
+
 ;;;###autoload
 (defun executable-command-find-unix-p (&optional program)
   "Check if command 'find' is Unix type program.
@@ -153,15 +175,11 @@
 Return:
   'gnu    for GNU find(1)
   t       for other unix compatible find(1)"
-  ;;  Pick file to search from location we know
-  (let* ((dir   (car load-path))
-         (file  (find-if
-                 (lambda (x)
-                   ;; Filter directories . and ..
-                   (and (not (string-match "^\\.\\.?$" x))
-                        ;; load-path may contain stale directories.
-                        (file-directory-p x)))
-                 (directory-files dir))))
+  (multiple-value-bind (dir file)
+      (executable-command-find-test-data)
+    (unless file
+      ;;  This is better message than cryptic failure in:  "-name" file
+      (error "executable: Cannot find suitable file to test."))
     (with-temp-buffer
       (call-process
        (or program "find")
@@ -173,17 +191,18 @@
        file
        "-mount"
        "-print"
-       ;; GNU find(1) understands this
-       ;; Solaris 8 (SunOS 5.8), both
+       ;; - GNU find(1) understands -maxdepth
+       ;; - Solaris 8 (SunOS 5.8), both
        ;; /usr/bin/find and /usr/xpg4/bin/find report
        ;; reports "find: bad option -maxdepth"
+       ;; - W2k reports "FIND: Parameter format not correct\"
        "-maxdepth"
        "1")
         (goto-char (point-min))
         (cond
          ((search-forward file nil t)
           'gnu)
-         ((search-forward "find: bad option -maxdepth")
+         ((search-forward "find: bad option -maxdepth" nil t)
           t)))))
 
 ;;;###autoload




reply via email to

[Prev in Thread] Current Thread [Next in Thread]