# HG changeset patch # User Chong Yidong # Date 1253484317 0 # Node ID cdbbb89893d50aa9e61fd8c517f172c3d09ced6a # Parent b5dbdf25d1c5fa31b67303f429bcb33840d0844e lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require ede/srecode. lisp/cedet/ede/srecode.el: New file. diff -r b5dbdf25d1c5 -r cdbbb89893d5 lisp/ChangeLog --- a/lisp/ChangeLog Sun Sep 20 21:48:30 2009 +0000 +++ b/lisp/ChangeLog Sun Sep 20 22:05:17 2009 +0000 @@ -1,5 +1,8 @@ 2009-09-20 Chong Yidong + * 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. diff -r b5dbdf25d1c5 -r cdbbb89893d5 lisp/cedet/ede/pmake.el --- a/lisp/cedet/ede/pmake.el Sun Sep 20 21:48:30 2009 +0000 +++ b/lisp/cedet/ede/pmake.el Sun Sep 20 22:05:17 2009 +0000 @@ -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 -r b5dbdf25d1c5 -r cdbbb89893d5 lisp/cedet/ede/srecode.el --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/cedet/ede/srecode.el Sun Sep 20 22:05:17 2009 +0000 @@ -0,0 +1,106 @@ +;;; ede-srecode.el --- EDE utilities on top of SRecoder + +;; Copyright (C) 2008 Free Software Foundation, Inc. + +;; Author: Eric M. Ludlam + +;; 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 . + +;;; 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