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)))