]> git.eshelyaron.com Git - emacs.git/commitdiff
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
authorChong Yidong <cyd@stupidchicken.com>
Sun, 20 Sep 2009 22:05:17 +0000 (22:05 +0000)
committerChong Yidong <cyd@stupidchicken.com>
Sun, 20 Sep 2009 22:05:17 +0000 (22:05 +0000)
ede/srecode.
lisp/cedet/ede/srecode.el: New file.

lisp/ChangeLog
lisp/cedet/ede/pmake.el
lisp/cedet/ede/srecode.el [new file with mode: 0644]

index 902532d37d1c6710b71beacd3b4f01969e5e9424..61a7be1f83babf27e210149443feb42b10280116 100644 (file)
@@ -1,5 +1,8 @@
 2009-09-20  Chong Yidong  <cyd@stupidchicken.com>
 
+       * cedet/ede/pmake.el (ede-proj-makefile-create): Require
+       ede/srecode.
+
        * cedet/srecode/compile.el (srecode-compile-split-code)
        (srecode-compile-parse-inserter): Fix compiler warning.
 
index bc5fe577043ece88c561f10d39dac68ec7f1b51c..302de420543c84808a3525d053a4fb7ec9289363 100644 (file)
 (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 (file)
index 0000000..c53fe99
--- /dev/null
@@ -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