Function: vhdl-scan-project-contents
vhdl-scan-project-contents is a byte-compiled function defined in
vhdl-mode.el.gz.
Signature
(vhdl-scan-project-contents PROJECT)
Documentation
Scan the contents of all VHDL files found in the directories and files of PROJECT.
Source Code
;; Defined in /usr/src/emacs/lisp/progmodes/vhdl-mode.el.gz
(defun vhdl-scan-project-contents (project)
"Scan the contents of all VHDL files found in the directories and files
of PROJECT."
(let ((dir-list (or (nth 2 (vhdl-aget vhdl-project-alist project)) '("")))
(default-dir (vhdl-resolve-env-variable
(nth 1 (vhdl-aget vhdl-project-alist project))))
(file-exclude-regexp
(or (nth 3 (vhdl-aget vhdl-project-alist project)) ""))
dir-list-tmp dir dir-name num-dir act-dir recursive)
;; clear project alists
(vhdl-adelete 'vhdl-entity-alist project)
(vhdl-adelete 'vhdl-config-alist project)
(vhdl-adelete 'vhdl-package-alist project)
(vhdl-adelete 'vhdl-ent-inst-alist project)
(vhdl-adelete 'vhdl-file-alist project)
;; expand directory names by default-directory
(message "Collecting source files...")
(while dir-list
(setq dir (vhdl-resolve-env-variable (car dir-list)))
(string-match "\\(\\(-r \\)?\\)\\(.*\\)" dir)
(setq recursive (match-string 1 dir)
dir-name (match-string 3 dir))
(setq dir-list-tmp
(cons (concat recursive
(if (file-name-absolute-p dir-name) "" default-dir)
dir-name)
dir-list-tmp))
(setq dir-list (cdr dir-list)))
;; resolve path wildcards
(setq dir-list-tmp (vhdl-resolve-paths dir-list-tmp))
;; expand directories
(while dir-list-tmp
(setq dir (car dir-list-tmp))
;; get subdirectories
(if (string-match "-r \\(.*[/\\]\\)" dir)
(setq dir-list (append dir-list (vhdl-get-subdirs
(match-string 1 dir))))
(setq dir-list (append dir-list (list dir))))
(setq dir-list-tmp (cdr dir-list-tmp)))
;; exclude files
(unless (equal file-exclude-regexp "")
(let ((case-fold-search nil))
(while dir-list
(unless (string-match file-exclude-regexp (car dir-list))
(push (car dir-list) dir-list-tmp))
(setq dir-list (cdr dir-list)))
(setq dir-list (nreverse dir-list-tmp))))
(message "Collecting source files...done")
;; scan for design units for each directory in DIR-LIST
(setq dir-list-tmp nil
num-dir (length dir-list)
act-dir 1)
(while dir-list
(setq dir-name (abbreviate-file-name
(expand-file-name (car dir-list))))
(vhdl-scan-directory-contents dir-name project nil
(format "(%s/%s) " act-dir num-dir)
(cdr dir-list))
(vhdl--pushnew (file-name-directory dir-name) dir-list-tmp :test #'equal)
(setq dir-list (cdr dir-list)
act-dir (1+ act-dir)))
(vhdl-aput 'vhdl-directory-alist project (list (nreverse dir-list-tmp)))
(message "Scanning project \"%s\"...done" project)))