Mercurial > emacs
view lisp/cedet/ede/makefile-edit.el @ 104513:a6a812dd2d88
* cedet/semantic/lex.el (semantic-lex-reset-hooks): Doc fix.
* cedet/semantic/idle.el
(semantic-before-idle-scheduler-reparse-hook)
(semantic-after-idle-scheduler-reparse-hook): Rename from *-hooks.
Make old name an obsolete alias.
* cedet/semantic/edit.el (semantic-after-partial-cache-change-hook)
(semantic-change-hooks, semantic-edits-new-change-hooks)
(semantic-edits-delete-change-hooks)
(semantic-edits-move-change-hook)
(semantic-edits-reparse-change-hooks)
(semantic-edits-incremental-reparse-failed-hooks): Doc fixes.
* cedet/semantic/debug.el (semantic-debug-mode): Rename hook
symbols.
* cedet/semantic/db-mode.el (semanticdb-mode-hook): Rename from
semanticdb-mode-hooks.
(global-semanticdb-minor-mode): Use the new name.
(semanticdb-hooks): Use semantic-init-db-hook instead of obsolete
alias semantic-init-db-hooks.
* cedet/semantic/db-global.el (semanticdb-enable-gnu-global-databases):
Use semantic-init-hook instead of obsolete alias
semantic-init-hooks.
* cedet/semantic/db-file.el (semanticdb-save-database-hook):
Rename from semanticdb-save-database-hooks. Make old name an
obsolete alias.
* cedet/semantic/decorate/mode.el
(semantic-decorate-pending-decoration-hook): Rename from
semantic-decorate-pending-decoration-hooks. Make old name an
obsolete alias.
* cedet/srecode/map.el (srecode-map-validate-file-for-mode): Use
semantic-init-hook instead of obsolete alias semantic-init-hooks.
* cedet/semantic/fw.el (semantic-find-file-noselect): Use
semantic-init-hook instead of obsolete alias semantic-init-hooks.
* cedet/ede/project-am.el (project-am-with-makefile-current): Use
semantic-init-hook instead of obsolete alias semantic-init-hooks.
* cedet/semantic/util.el (semantic-describe-buffer): Use
semantic-init-hook and semantic-init-db-hook instead of obsolete
aliases.
* cedet/semantic/util-modes.el (semantic-mode-line-update)
(semantic-toggle-minor-mode-globally): Use semantic-init-hook
instead of obsolete alias semantic-init-hooks.
Synch to Eric Ludlam's upstream CEDET repository:
* cedet/semantic/bovine/c.el (semantic-c-parse-token-hack-depth):
New var.
(semantic-c-parse-lexical-token): Save match data when setting up
the secondary parse buffer. Allow recursion. Protect against
initializing the major mode from throwing errors, ie user hooks.
* cedet/semantic/lex-spp.el (semantic-lex-spp-lex-text-string):
Protect installing a major mode from throwing errors.
author | Chong Yidong <cyd@stupidchicken.com> |
---|---|
date | Sat, 26 Sep 2009 17:47:11 +0000 |
parents | 8c4870c15962 |
children | 51ba3b848c03 |
line wrap: on
line source
;;; makefile-edit.el --- Makefile editing/scanning commands. ;;; Copyright (C) 2009 Free Software Foundation, Inc. ;; Author: Eric M. Ludlam <eric@siege-engine.com> ;; This file is part of GNU Emacs. ;; GNU Emacs is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; GNU Emacs is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. ;;; Commentary: ;; ;; Utilities for editing a Makefile for EDE Makefile management commands. ;; ;; Derived from project-am.el. ;; ;; Makefile editing and scanning commands ;; ;; Formatting of a makefile ;; ;; 1) Creating an automakefile, stick in a top level comment about ;; being created by emacs ;; 2) Leave order of variable contents alone, except for SOURCE ;; SOURCE always keep in the order of .c, .h, the other stuff. ;;; Things to do ;; makefile-fill-paragraph -- refill a macro w/ backslashes ;; makefile-insert-macro -- insert "foo = " ;;; Code: (defun makefile-beginning-of-command () "Move the the beginning of the current command." (interactive) (if (save-excursion (forward-line -1) (makefile-line-continued-p)) (forward-line -1)) (beginning-of-line) (if (not (makefile-line-continued-p)) nil (while (and (makefile-line-continued-p) (not (bobp))) (forward-line -1)) (forward-line 1))) (defun makefile-end-of-command () "Move the the beginning of the current command." (interactive) (end-of-line) (while (and (makefile-line-continued-p) (not (eobp))) (forward-line 1) (end-of-line))) (defun makefile-line-continued-p () "Return non-nil if the current line ends in continuation." (save-excursion (end-of-line) (= (preceding-char) ?\\))) ;;; Programatic editing of a Makefile ;; (defun makefile-move-to-macro (macro &optional next) "Move to the definition of MACRO. Return t if found. If NEXT is non-nil, move to the next occurance of MACRO." (let ((oldpt (point))) (when (not next) (goto-char (point-min))) (if (re-search-forward (concat "^\\s-*" macro "\\s-*[+:?]?=") nil t) t (goto-char oldpt) nil))) (defun makefile-navigate-macro (stop-before) "In a list of files, move forward until STOP-BEFORE is reached. STOP-BEFORE is a regular expression matching a file name." (save-excursion (makefile-beginning-of-command) (let ((e (save-excursion (makefile-end-of-command) (point)))) (if (re-search-forward stop-before nil t) (goto-char (match-beginning 0)) (goto-char e))))) (defun makefile-macro-file-list (macro) "Return a list of all files in MACRO." (save-excursion (goto-char (point-min)) (let ((lst nil)) (while (makefile-move-to-macro macro t) (let ((e (save-excursion (makefile-end-of-command) (point)))) (while (re-search-forward "\\s-**\\([-a-zA-Z0-9./_@$%(){}]+\\)\\s-*" e t) (let ((var nil)(varexp nil) (match (buffer-substring-no-properties (match-beginning 1) (match-end 1)))) (if (not (setq var (makefile-extract-varname-from-text match))) (setq lst (cons match lst)) (setq varexp (makefile-macro-file-list var)) (dolist (V varexp) (setq lst (cons V lst)))))))) (nreverse lst)))) (defun makefile-extract-varname-from-text (text) "Extract the variable name from TEXT if it is a variable reference. Return nil if it isn't a variable." (save-match-data (when (string-match "\\$\\s(\\([A-Za-z0-9_]+\\)\\s)" text) (match-string 1 text)))) (provide 'ede/makefile-edit) ;;; ede/makefile-edit.el ends here