update.
[elisp/apel.git] / path-util.el
index 3835d02..2d004db 100644 (file)
 
 ;; You should have received a copy of the GNU General Public License
 ;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
 
 ;;; Code:
 
-(eval-when-compile (require 'static))
-
-(static-condition-case nil
-    (directory-files "." nil nil t)
-  (file-error nil);; unreadable directory.
-  (wrong-number-of-arguments
-   (or (fboundp 'si:directory-files)
-       (fset 'si:directory-files (symbol-function 'directory-files)))
-   ;; This function is also defined in poe-18, but it is needed here
-   ;; for compiling other packages under old Emacsen.
-   (defun directory-files (directory &optional full match nosort)
-     "Return a list of names of files in DIRECTORY.
-There are three optional arguments:
-If FULL is non-nil, return absolute file names.  Otherwise return names
- that are relative to the specified directory.
-If MATCH is non-nil, mention only file names that match the regexp MATCH.
-If NOSORT is dummy for compatibility.
-\[poe-18.el; EMACS 19 emulating function]"
-     (si:directory-files directory full match))
-   ))
+(require 'poe)
 
 (defvar default-load-path load-path
   "*Base of `load-path'.
@@ -57,7 +38,7 @@ directories and it does not exist in `load-path'.
 
 You can use following PATH styles:
        load-path relative: \"PATH/\"
-                       (it is searched from `defaul-load-path')
+                       (it is searched from `default-load-path')
        home directory relative: \"~/PATH/\" \"~USER/PATH/\"
        absolute path: \"/HOO/BAR/BAZ/\"
 
@@ -73,18 +54,16 @@ You can specify following OPTIONS:
               (while rest
                 (setq p (expand-file-name path (car rest)))
                 (if (file-directory-p p)
-                    (throw 'tag p)
-                  )
-                (setq rest (cdr rest))
-                ))
-            (not (member p load-path))
-            )
+                    (throw 'tag p))
+                (setq rest (cdr rest))))
+            (not (or (member p load-path)
+                     (if (string-match "/$" p)
+                         (member (substring p 0 (1- (length p))) load-path)
+                       (member (file-name-as-directory p) load-path)))))
        (setq load-path
              (if (memq 'append options)
                  (append load-path (list p))
-               (cons p load-path)
-               ))
-      )))
+               (cons p load-path))))))
 
 ;;;###autoload
 (defun add-latest-path (pattern &optional all-paths)
@@ -158,33 +137,65 @@ If suffixes is omitted, `exec-suffix-list' is used."
   (or suffixes
       (setq suffixes exec-suffix-list)
       )
-  (catch 'tag
-    (while paths
-      (let ((stem (expand-file-name file (car paths)))
-           (sufs suffixes)
+  (let (files)
+    (catch 'tag
+      (while suffixes
+       (let ((suf (car suffixes)))
+         (if (and (not (string= suf ""))
+                  (string-match (concat (regexp-quote suf) "$") file))
+             (progn
+               (setq files (list file))
+               (throw 'tag nil)
+               )
+           (setq files (cons (concat file suf) files))
            )
-       (while sufs
-         (let ((file (concat stem (car sufs))))
-           (if (file-exists-p file)
+         (setq suffixes (cdr suffixes))
+         )))
+    (setq files (nreverse files))
+    (catch 'tag
+      (while paths
+       (let ((path (car paths))
+             (files files)
+             )
+         (while files
+           (setq file (expand-file-name (car files) path))
+           (if (file-executable-p file)
                (throw 'tag file)
-             ))
-         (setq sufs (cdr sufs))
-         ))
-      (setq paths (cdr paths))
-      )))
+             )
+           (setq files (cdr files))
+           )
+         (setq paths (cdr paths))
+         )))))
 
 ;;;###autoload
 (defun module-installed-p (module &optional paths)
   "Return t if module is provided or exists in PATHS.
 If PATHS is omitted, `load-path' is used."
   (or (featurep module)
-      (exec-installed-p (symbol-name module) load-path '(".elc" ".el"))
-      ))
+      (let ((file (symbol-name module)))
+       (or paths
+           (setq paths load-path)
+           )
+       (catch 'tag
+         (while paths
+           (let ((stem (expand-file-name file (car paths)))
+                 (sufs '(".elc" ".el"))
+                 )
+             (while sufs
+               (let ((file (concat stem (car sufs))))
+                 (if (file-exists-p file)
+                     (throw 'tag file)
+                   ))
+               (setq sufs (cdr sufs))
+               ))
+           (setq paths (cdr paths))
+           )))))
 
 
 ;;; @ end
 ;;;
 
-(provide 'path-util)
+(require 'product)
+(product-provide (provide 'path-util) (require 'apel-ver))
 
 ;;; path-util.el ends here