diff options
author | Chong Yidong <cyd@stupidchicken.com> | 2009-09-20 22:05:17 +0000 |
---|---|---|
committer | Chong Yidong <cyd@stupidchicken.com> | 2009-09-20 22:05:17 +0000 |
commit | 447a30f3655f011c51c07682f23a0483b7ab3c4f (patch) | |
tree | ecfff40607ceb8fb8f26b41daea1b38f1a5ff974 /lisp/cedet/ede | |
parent | 6564b17767d46022996d43647c176cf58735dc08 (diff) | |
download | emacs-447a30f3655f011c51c07682f23a0483b7ab3c4f.tar.gz |
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
ede/srecode.
lisp/cedet/ede/srecode.el: New file.
Diffstat (limited to 'lisp/cedet/ede')
-rw-r--r-- | lisp/cedet/ede/pmake.el | 4 | ||||
-rw-r--r-- | lisp/cedet/ede/srecode.el | 106 |
2 files changed, 110 insertions, 0 deletions
diff --git a/lisp/cedet/ede/pmake.el b/lisp/cedet/ede/pmake.el index bc5fe577043..302de420543 100644 --- a/lisp/cedet/ede/pmake.el +++ b/lisp/cedet/ede/pmake.el @@ -48,10 +48,14 @@ (require 'ede/proj-obj) (require 'ede/proj-comp) +(declare-function ede-srecode-setup "ede/srecode") +(declare-function ede-srecode-insert "ede/srecode") + ;;; Code: (defmethod ede-proj-makefile-create ((this ede-proj-project) mfilename) "Create a Makefile for all Makefile targets in THIS. MFILENAME is the makefile to generate." + (require 'ede/srecode) (let ((mt nil) (isdist (string= mfilename (ede-proj-dist-makefile this))) (depth 0) diff --git a/lisp/cedet/ede/srecode.el b/lisp/cedet/ede/srecode.el new file mode 100644 index 00000000000..c53fe99239f --- /dev/null +++ b/lisp/cedet/ede/srecode.el @@ -0,0 +1,106 @@ +;;; ede-srecode.el --- EDE utilities on top of SRecoder + +;; Copyright (C) 2008 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: +;; +;; EDE utilities for using SRecode to generate project files, such as +;; Makefiles. + +(require 'srecode) + +(declare-function srecode-create-dictionary "srecode/dictionary") +(declare-function srecode-dictionary-set-value "srecode/dictionary") +(declare-function srecode-load-tables-for-mode "srecode/find") +(declare-function srecode-table "srecode/find") +(declare-function srecode-template-get-table "srecode/find") +(declare-function srecode-insert-fcn "srecode/insert") +(declare-function srecode-resolve-arguments "srecode/map") +(declare-function srecode-map-update-map "srecode/map") + +;;; Code: +(defun ede-srecode-setup () + "Update various paths to get SRecode to identify our macros." + (let* ((lib (locate-library "ede.el" t)) + (ededir (file-name-directory lib)) + (tmpdir (file-name-as-directory + (expand-file-name "templates" ededir)))) + (when (not tmpdir) + (error "Unable to location EDE Templates directory")) + + ;; Rig up the map. + (require 'srecode/map) + (require 'srecode/find) + (add-to-list 'srecode-map-load-path tmpdir) + (srecode-map-update-map t) + + ;; We don't call this unless we need it. Load in the templates. + (srecode-load-tables-for-mode 'makefile-mode) + (srecode-load-tables-for-mode 'makefile-mode 'ede) + + ;; @todo - autoconf files. + + )) + +(defmacro ede-srecode-insert-with-dictionary (template &rest forms) + "Insert TEMPLATE after executing FORMS with a dictionary. +TEMPLATE should specify a context by using a string format of: + context:templatename +Locally binds the variable DICT to a dictionary which can be +updated in FORMS." + `(let* ((dict (srecode-create-dictionary)) + (temp (srecode-template-get-table (srecode-table) + ,template + nil + 'ede)) + ) + (when (not temp) + (error "EDE template %s for %s not found!" + ,template major-mode)) + (srecode-resolve-arguments temp dict) + + ;; Now execute forms for updating DICT. + (progn ,@forms) + + (srecode-insert-fcn temp dict) + )) + +(defun ede-srecode-insert (template &rest dictionary-entries) + "Insert at the current point TEMPLATE. +TEMPLATE should specify a context by using a string format of: + context:templatename +Add DICTIONARY-ENTRIES into the dictionary before insertion. +Note: Just like `srecode-insert', but templates found in 'ede app." + (require 'srecode/insert) + (ede-srecode-insert-with-dictionary template + + ;; Add in optional dictionary entries. + (while dictionary-entries + (srecode-dictionary-set-value dict + (car dictionary-entries) + (car (cdr dictionary-entries))) + (setq dictionary-entries + (cdr (cdr dictionary-entries)))) + + )) + +(provide 'ede-srecode) + +;;; ede-srecode.el ends here |