Function: vhdl-compose-components-package
vhdl-compose-components-package is an interactive and byte-compiled
function defined in vhdl-mode.el.gz.
Signature
(vhdl-compose-components-package)
Documentation
Generate a package containing component declarations for all entities in the current project/directory.
Key Bindings
Source Code
;; Defined in /usr/src/emacs/lisp/progmodes/vhdl-mode.el.gz
(defun vhdl-compose-components-package ()
"Generate a package containing component declarations for all entities in the
current project/directory."
(interactive)
(vhdl-require-hierarchy-info)
(let* ((project (vhdl-project-p))
(pack-name (vhdl-get-components-package-name))
(pack-file-name
(concat (vhdl-replace-string vhdl-package-file-name pack-name t)
"." (file-name-extension (buffer-file-name))))
(ent-alist (vhdl-aget vhdl-entity-alist
(or project
(abbreviate-file-name default-directory))))
(lazy-lock-minimum-size 0)
clause-pos component-pos)
(message "Generating components package \"%s\"..." pack-name)
;; open package file
(when (and (file-exists-p pack-file-name)
(not (y-or-n-p (concat "File \"" pack-file-name
"\" exists; overwrite? "))))
(error "ERROR: Generating components package...aborted"))
(find-file pack-file-name)
(erase-buffer)
;; insert header
(if vhdl-compose-include-header
(progn (vhdl-template-header
(concat "Components package (generated by Emacs VHDL Mode "
vhdl-version ")"))
(goto-char (point-max)))
(vhdl-comment-display-line) (insert "\n\n"))
;; insert std_logic_1164 package
(vhdl-template-package-std-logic-1164)
(insert "\n") (setq clause-pos (point-marker))
(insert "\n") (vhdl-comment-display-line) (insert "\n\n")
;; insert package declaration
(vhdl-insert-keyword "PACKAGE ") (insert pack-name)
(vhdl-insert-keyword " IS\n\n")
(indent-to vhdl-basic-offset) (vhdl-comment-display-line) (insert "\n")
(indent-to vhdl-basic-offset) (insert "-- Component declarations\n")
(indent-to vhdl-basic-offset) (vhdl-comment-display-line) (insert "\n\n")
(indent-to vhdl-basic-offset)
(setq component-pos (point-marker))
(insert "\n\n") (vhdl-insert-keyword "END ")
(unless (vhdl-standard-p '87) (vhdl-insert-keyword "PACKAGE "))
(insert pack-name ";\n\n")
;; insert footer
(if (and vhdl-compose-include-header (not (equal vhdl-file-footer "")))
(vhdl-template-footer)
(vhdl-comment-display-line) (insert "\n"))
;; insert component declarations
(while ent-alist
(vhdl-visit-file (nth 2 (car ent-alist)) nil
(goto-char (point-min))
(forward-line (1- (nth 3 (car ent-alist))))
(end-of-line)
(vhdl-port-copy))
(goto-char component-pos)
(vhdl-port-paste-component t)
(when (cdr ent-alist) (insert "\n\n") (indent-to vhdl-basic-offset))
(setq component-pos (point-marker))
(goto-char clause-pos)
(vhdl-port-paste-context-clause pack-name)
(setq clause-pos (point-marker))
(setq ent-alist (cdr ent-alist)))
(goto-char (point-min))
(save-buffer)
(message "Generating components package \"%s\"...done\n File created: \"%s\""
pack-name pack-file-name)))