Better error detection for include files

This commit is contained in:
Benson Chu 2023-01-04 11:13:45 -06:00
parent 10c94e028b
commit e58d28dc18
2 changed files with 24 additions and 28 deletions

View file

@ -26,6 +26,7 @@
(require 'llvm-ir-mode)
(require 'llvm-shared)
(require 'action-map-lib)
(require 'anaphora)
(defvar ll/c-file-action-map
'((debug :key ?d :major-mode llvm-mode :buffer-string "debug" :description "[d]ebug pass" :compiler-action assemble)
@ -75,29 +76,15 @@
(save-excursion
(beginning-of-buffer)
(let ((r
(rx (and "#include "
(or "\"" "<") (group (+ (not space))) (or "\"" ">")))))
(when-let ((res (re-search-forward r nil t)))
(message "Couldn't find %s header file" (match-string 1))
res)))))
(rx (and "fatal error: '" (group (+ (not space))) "' file not found"))))
(aprog1 (re-search-forward r nil t)
(message "Couldn't find '%s' header file" (match-string 1)))))))
(defun ll/add-include-file ()
(interactive)
(when (not (or compilation-minor-mode
(eq major-mode
'compilation-mode)))
(user-error "Wrong buffer idiot"))
(when (not (ll/buffer-has-include-error (current-buffer)))
(user-error "The problem is not an include file..."))
(let ((new-dir (read-directory-name "directory? ")))
(setq compilation-arguments
(cons (concat (car compilation-arguments)
(format " -I%s "
new-dir))
(cdr compilation-arguments)))
(call-interactively #'recompile)))
(defun ll/add-include-folder-to-command (command)
(let ((directory (read-directory-name "directory? ")))
(string-replace "-I" (format "-I%s -I"
directory)
command)))
(defun ll/c-file-sentinel (buffer msg)
(when (and (string-match-p "exited abnormally with code 1" msg)
@ -106,7 +93,7 @@
(let ((new-dir (read-directory-name "directory? ")))
(with-current-buffer buffer
(setq compilation-arguments
(cons (string-replace "-I" (format "-I%s -I" new-dir)
(cons (ll/add-include-folder-to-command
(car compilation-arguments))
(cdr compilation-arguments)))
(call-interactively #'recompile))))))

View file

@ -24,7 +24,9 @@
;;; Code:
(require 'act-on-c-file)
(require 'llvm-shared)
(require 'anaphora)
(defun ll/get-cc1-command (file)
(let* ((fname (file-name-nondirectory file))
@ -38,7 +40,13 @@
:output (make-temp-file nil nil ".o"))
"-v")
" ")))
(shell-command command buffer))
(while
(progn
(shell-command command buffer)
(aprog1 (ll/buffer-has-include-error buffer)
(when it
(setq command
(ll/add-include-folder-to-command command)))))))
(with-current-buffer (get-buffer buffer)
(beginning-of-buffer)
(re-search-forward (rx "\"" (literal clang) "\" "
@ -48,9 +56,10 @@
(defun ll/kill-gdb-command (file)
(interactive
(list
(--> (current-buffer)
(buffer-file-name)
(read-file-name "Which file? " nil))))
(or (let ((fname (buffer-file-name (current-buffer))))
(and (string= "c" (file-name-extension fname))
fname))
(read-file-name "Which file? "))))
(let ((fname (file-name-nondirectory file)))
(kill-new
(format "r %s"