Fixes related to /usr/include path on multiarch systems
authorGlenn Morris <rgm@gnu.org>
Wed, 22 Feb 2012 08:34:02 +0000 (00:34 -0800)
committerGlenn Morris <rgm@gnu.org>
Wed, 22 Feb 2012 08:34:02 +0000 (00:34 -0800)
* lisp/ffap.el (ffap-c-path):
* lisp/man.el (Man-header-file-path): Handle multiarch.

Fixes: debbugs:10702

lisp/ChangeLog
lisp/ffap.el
lisp/man.el

index c91a900..4f025f3 100644 (file)
@@ -1,3 +1,8 @@
+2012-02-22  Glenn Morris  <rgm@gnu.org>
+
+       * ffap.el (ffap-c-path):
+       * man.el (Man-header-file-path): Handle multiarch.  (Bug#10702)
+
 2012-02-22  Chong Yidong  <cyd@gnu.org>
 
        * custom.el (load-theme): Doc fix.
index c379753..99017d2 100644 (file)
@@ -850,9 +850,24 @@ URL, or nil.  If nil, search the alist for further matches.")
   (and (not (string-match "\\.el\\'" name))
        (ffap-locate-file name '(".el") load-path)))
 
+;; FIXME this duplicates the logic of Man-header-file-path.
+;; There should be a single central variable or function for this.
+;; See also (bug#10702):
+;; cc-search-directories, semantic-c-dependency-system-include-path,
+;; semantic-gcc-setup
 (defvar ffap-c-path
-  ;; Need smarter defaults here!  Suggestions welcome.
-  '("/usr/include" "/usr/local/include"))
+  (let ((arch (with-temp-buffer
+                (when (eq 0 (ignore-errors
+                              (call-process "gcc" nil '(t nil) nil
+                                            "-print-multiarch")))
+                  (goto-char (point-min))
+                  (buffer-substring (point) (line-end-position)))))
+        (base '("/usr/include" "/usr/local/include")))
+    (if (zerop (length arch))
+        base
+      (append base (list (expand-file-name arch "/usr/include")))))
+  "List of directories to search for include files.")
+
 (defun ffap-c-mode (name)
   (ffap-locate-file name t ffap-c-path))
 
index 7698cc2..0a7b831 100644 (file)
@@ -215,9 +215,20 @@ the associated section number."
                       (string :tag "Real Section")))
   :group 'man)
 
+;; FIXME see comments at ffap-c-path.
 (defcustom Man-header-file-path
-  '("/usr/include" "/usr/local/include")
+  (let ((arch (with-temp-buffer
+                (when (eq 0 (ignore-errors
+                              (call-process "gcc" nil '(t nil) nil
+                                            "-print-multiarch")))
+                  (goto-char (point-min))
+                  (buffer-substring (point) (line-end-position)))))
+        (base '("/usr/include" "/usr/local/include")))
+    (if (zerop (length arch))
+        base
+      (append base (list (expand-file-name arch "/usr/include")))))
   "C Header file search path used in Man."
+  :version "24.1"                       ; add multiarch
   :type '(repeat string)
   :group 'man)