Function: verilog-getopt

verilog-getopt is a byte-compiled function defined in verilog-mode.el.gz.

Signature

(verilog-getopt ARGLIST &optional DEFAULT-DIR)

Documentation

Parse -f, -v etc arguments in ARGLIST list or string.

Use DEFAULT-DIR to anchor paths if non-nil.

Source Code

;; Defined in /usr/src/emacs/lisp/progmodes/verilog-mode.el.gz
;;
;; Argument file parsing
;;

(defun verilog-getopt (arglist &optional default-dir)
  "Parse -f, -v etc arguments in ARGLIST list or string.
Use DEFAULT-DIR to anchor paths if non-nil."
  (unless (listp arglist) (setq arglist (list arglist)))
  (let ((space-args '())
	arg next-param)
    ;; Split on spaces, so users can pass whole command lines
    (while arglist
      (setq arg (car arglist)
	    arglist (cdr arglist))
      (while (string-match "^\\([^ \t\n\f]+\\)[ \t\n\f]*\\(.*$\\)" arg)
	(setq space-args (append space-args
				 (list (match-string-no-properties 1 arg))))
	(setq arg (match-string 2 arg))))
    ;; Parse arguments
    (while space-args
      (setq arg (car space-args)
	    space-args (cdr space-args))
      (cond
       ;; Need another arg
       ((equal arg "-F")
	(setq next-param arg))
       ((equal arg "-f")
	(setq next-param arg))
       ((equal arg "-v")
	(setq next-param arg))
       ((equal arg "-y")
	(setq next-param arg))
       ;; +libext+(ext1)+(ext2)...
       ((string-match "^\\+libext\\+\\(.*\\)" arg)
	(setq arg (match-string 1 arg))
	(while (string-match "\\([^+]+\\)\\+?\\(.*\\)" arg)
	  (verilog-add-list-unique 'verilog-library-extensions
				   (match-string 1 arg))
	  (setq arg (match-string 2 arg))))
       ;;
       ((or (string-match "^-D\\([^+=]*\\)[+=]\\(.*\\)" arg)  ; -Ddefine=val
            (string-match "^-D\\([^+=]*\\)\\(\\)" arg)  ; -Ddefine
            (string-match "^\\+define\\([^+=]*\\)[+=]\\(.*\\)" arg)  ; +define+val
            (string-match "^\\+define\\([^+=]*\\)\\(\\)" arg))  ; +define+define
	(verilog-set-define (match-string 1 arg) (match-string 2 arg)))
       ;;
       ((or (string-match "^\\+incdir\\+\\(.*\\)" arg)  ; +incdir+dir
            (string-match "^-I\\(.*\\)" arg))   ; -Idir
	(verilog-add-list-unique 'verilog-library-directories
				 (substitute-in-file-name (match-string 1 arg))))
       ;; Ignore
       ((equal "+librescan" arg))
       ((string-match "^-U\\(.*\\)" arg))  ; -Udefine
       ;; Second parameters
       ((equal next-param "-F")
	(setq next-param nil)
	(verilog-getopt-file (verilog-substitute-file-name-path arg default-dir)
                             (file-name-directory (verilog-substitute-file-name-path arg default-dir))))
       ((equal next-param "-f")
	(setq next-param nil)
	(verilog-getopt-file (verilog-substitute-file-name-path arg default-dir) nil))
       ((equal next-param "-v")
	(setq next-param nil)
	(verilog-add-list-unique 'verilog-library-files
				 (verilog-substitute-file-name-path arg default-dir)))
       ((equal next-param "-y")
	(setq next-param nil)
	(verilog-add-list-unique 'verilog-library-directories
				 (verilog-substitute-file-name-path arg default-dir)))
       ;; Filename
       ((string-match "^[^-+]" arg)
	(verilog-add-list-unique 'verilog-library-files
				 (verilog-substitute-file-name-path arg default-dir)))
       ;; Default - ignore; no warning
       ))))