X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/b4ec679c1eac8651d65824960831d5048321d07a..847b0831357d0280796fc054986e32bacaef87f6:/lisp/progmodes/cmacexp.el diff --git a/lisp/progmodes/cmacexp.el b/lisp/progmodes/cmacexp.el index f030ade3f6..03fb90d992 100644 --- a/lisp/progmodes/cmacexp.el +++ b/lisp/progmodes/cmacexp.el @@ -1,9 +1,9 @@ ;;; cmacexp.el --- expand C macros in a region -;; Copyright (C) 1992, 1994, 1996 Free Software Foundation, Inc. +;; Copyright (C) 1992, 1994, 1996, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 +;; Free Software Foundation, Inc. -;; Author: Francesco Potorti` -;; Version: $Id: cmacexp.el,v 1.25 1996/05/21 15:42:13 kwzh Exp rms $ +;; Author: Francesco Potorti` ;; Adapted-By: ESR ;; Keywords: c @@ -21,8 +21,10 @@ ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, -;; Boston, MA 02111-1307, USA. +;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. + +;;; Commentary: ;; USAGE ============================================================= @@ -46,7 +48,7 @@ ;; Put the following in your ~/.emacs file. ;; If you want the *Macroexpansion* window to be not higher than -;; necessary: +;; necessary: ;;(setq c-macro-shrink-window-flag t) ;; ;; If you use a preprocessor other than /lib/cpp (be careful to set a @@ -63,7 +65,7 @@ ;; BUG REPORTS ======================================================= ;; Please report bugs, suggestions, complaints and so on to -;; pot@cnuce.cnr.it (Francesco Potorti`). +;; pot@gnu.org (Francesco Potorti`). ;; IMPROVEMENTS OVER emacs 18.xx cmacexp.el ========================== @@ -85,44 +87,72 @@ ;; If the start point of the region is inside a macro definition the ;; macro expansion is often inaccurate. +;;; Code: (require 'cc-mode) (provide 'cmacexp) -(defvar c-macro-shrink-window-flag nil - "*Non-nil means shrink the *Macroexpansion* window to fit its contents.") +(defvar msdos-shells) + + +(defgroup c-macro nil + "Expand C macros in a region." + :group 'c) + + +(defcustom c-macro-shrink-window-flag nil + "*Non-nil means shrink the *Macroexpansion* window to fit its contents." + :type 'boolean + :group 'c-macro) -(defvar c-macro-prompt-flag nil - "*Non-nil makes `c-macro-expand' prompt for preprocessor arguments.") +(defcustom c-macro-prompt-flag nil + "*Non-nil makes `c-macro-expand' prompt for preprocessor arguments." + :type 'boolean + :group 'c-macro) -(defvar c-macro-preprocessor - ;; Cannot rely on standard directory on MS-DOS to find CPP. - (cond ((eq system-type 'ms-dos) "cpp -C") - ;; Solaris has it in an unusual place. +(defcustom c-macro-preprocessor + (cond ;; Solaris has it in an unusual place. ((and (string-match "^[^-]*-[^-]*-\\(solaris\\|sunos5\\)" system-configuration) (file-exists-p "/opt/SUNWspro/SC3.0.1/bin/acomp")) "/opt/SUNWspro/SC3.0.1/bin/acomp -C -E") - (t "/lib/cpp -C")) + ((locate-file "/usr/ccs/lib/cpp" + '("/") exec-suffixes 'file-executable-p) + "/usr/ccs/lib/cpp -C") + ((locate-file "/lib/cpp" + '("/") exec-suffixes 'file-executable-p) + "/lib/cpp -C") + ;; On some systems, we cannot rely on standard directories to + ;; find CPP. In fact, we cannot rely on having cpp, either, + ;; in some GCC versions. + ((locate-file "cpp" exec-path exec-suffixes 'file-executable-p) + "cpp -C") + (t "gcc -E -C -o - -")) "The preprocessor used by the cmacexp package. If you change this, be sure to preserve the `-C' (don't strip comments) -option, or to set an equivalent one.") +option, or to set an equivalent one." + :type 'string + :group 'c-macro) -(defvar c-macro-cppflags "" - "*Preprocessor flags used by `c-macro-expand'.") +(defcustom c-macro-cppflags "" + "*Preprocessor flags used by `c-macro-expand'." + :type 'string + :group 'c-macro) (defconst c-macro-buffer-name "*Macroexpansion*") +;;;###autoload (defun c-macro-expand (start end subst) "Expand C macros in the region, using the C preprocessor. Normally display output in temp buffer, but prefix arg means replace the region with it. `c-macro-preprocessor' specifies the preprocessor to use. -Prompt for arguments to the preprocessor \(e.g. `-DDEBUG -I ./include') -if the user option `c-macro-prompt-flag' is non-nil. +Tf the user option `c-macro-prompt-flag' is non-nil +prompt for arguments to the preprocessor \(e.g. `-DDEBUG -I ./include'), +otherwise use `c-macro-cppflags'. Noninteractive args are START, END, SUBST. For use inside Lisp programs, see also `c-macro-expansion'." @@ -192,7 +222,7 @@ For use inside Lisp programs, see also `c-macro-expansion'." (let ((oldwinheight (window-height)) (alreadythere ;the window was already there (get-buffer-window (current-buffer))) - (popped nil)) ;the window popped changing the layout + (popped nil)) ;the window popped changing the layout (or alreadythere (progn (display-buffer (current-buffer) t) @@ -234,7 +264,7 @@ Optional arg DISPLAY non-nil means show messages in the echo area." ;; Preprocess the buffer contents, then look for all the lines stored ;; in linelist starting from end of buffer. The last line so found is ;; where START was, so return the substring from point to end of -;; buffer. +;; buffer. (let ((inbuf (current-buffer)) (outbuf (get-buffer-create " *C Macro Expansion*")) (filename (if (and buffer-file-name @@ -252,10 +282,10 @@ Optional arg DISPLAY non-nil means show messages in the echo area." (startstat ()) (startmarker "") (exit-status 0) - (tempname (make-temp-name (concat - (or (getenv "TMPDIR") (getenv "TEMP") - (getenv "TMP") "/tmp") - "/")))) + (tempname (make-temp-file + (expand-file-name "cmacexp" + (or small-temporary-file-directory + temporary-file-directory))))) (unwind-protect (save-excursion (save-restriction @@ -316,13 +346,13 @@ Optional arg DISPLAY non-nil means show messages in the echo area." (format "\n#line %d \"%s\"\n" startlinenum filename))) ;; Call the preprocessor. - (if display (message mymsg)) + (if display (message "%s" mymsg)) (setq exit-status (call-process-region 1 (point-max) shell-file-name t (list t tempname) nil "-c" cppcommand)) - (if display (message (concat mymsg "done"))) + (if display (message "%s" (concat mymsg "done"))) (if (= (buffer-size) 0) ;; Empty output is normal after a fatal error. (insert "\nPreprocessor produced no output\n") @@ -368,4 +398,5 @@ Optional arg DISPLAY non-nil means show messages in the echo area." ;; Cleanup. (kill-buffer outbuf)))) +;;; arch-tag: 4f20253c-71ef-4e6d-a774-19087060910e ;;; cmacexp.el ends here