Mercurial > emacs
annotate lisp/cedet/ede/srecode.el @ 104502:cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
ede/srecode.
lisp/cedet/ede/srecode.el: New file.
author | Chong Yidong <cyd@stupidchicken.com> |
---|---|
date | Sun, 20 Sep 2009 22:05:17 +0000 |
parents | |
children | bde759149ba1 |
rev | line source |
---|---|
104502
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
1 ;;; ede-srecode.el --- EDE utilities on top of SRecoder |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
2 |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
3 ;; Copyright (C) 2008 Free Software Foundation, Inc. |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
4 |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
5 ;; Author: Eric M. Ludlam <eric@siege-engine.com> |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
6 |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
7 ;; This file is part of GNU Emacs. |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
8 |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
9 ;; GNU Emacs is free software: you can redistribute it and/or modify |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
10 ;; it under the terms of the GNU General Public License as published by |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
11 ;; the Free Software Foundation, either version 3 of the License, or |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
12 ;; (at your option) any later version. |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
13 |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
14 ;; GNU Emacs is distributed in the hope that it will be useful, |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
15 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
16 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
17 ;; GNU General Public License for more details. |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
18 |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
19 ;; You should have received a copy of the GNU General Public License |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
20 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
21 |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
22 ;;; Commentary: |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
23 ;; |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
24 ;; EDE utilities for using SRecode to generate project files, such as |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
25 ;; Makefiles. |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
26 |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
27 (require 'srecode) |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
28 |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
29 (declare-function srecode-create-dictionary "srecode/dictionary") |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
30 (declare-function srecode-dictionary-set-value "srecode/dictionary") |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
31 (declare-function srecode-load-tables-for-mode "srecode/find") |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
32 (declare-function srecode-table "srecode/find") |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
33 (declare-function srecode-template-get-table "srecode/find") |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
34 (declare-function srecode-insert-fcn "srecode/insert") |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
35 (declare-function srecode-resolve-arguments "srecode/map") |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
36 (declare-function srecode-map-update-map "srecode/map") |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
37 |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
38 ;;; Code: |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
39 (defun ede-srecode-setup () |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
40 "Update various paths to get SRecode to identify our macros." |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
41 (let* ((lib (locate-library "ede.el" t)) |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
42 (ededir (file-name-directory lib)) |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
43 (tmpdir (file-name-as-directory |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
44 (expand-file-name "templates" ededir)))) |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
45 (when (not tmpdir) |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
46 (error "Unable to location EDE Templates directory")) |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
47 |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
48 ;; Rig up the map. |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
49 (require 'srecode/map) |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
50 (require 'srecode/find) |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
51 (add-to-list 'srecode-map-load-path tmpdir) |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
52 (srecode-map-update-map t) |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
53 |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
54 ;; We don't call this unless we need it. Load in the templates. |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
55 (srecode-load-tables-for-mode 'makefile-mode) |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
56 (srecode-load-tables-for-mode 'makefile-mode 'ede) |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
57 |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
58 ;; @todo - autoconf files. |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
59 |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
60 )) |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
61 |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
62 (defmacro ede-srecode-insert-with-dictionary (template &rest forms) |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
63 "Insert TEMPLATE after executing FORMS with a dictionary. |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
64 TEMPLATE should specify a context by using a string format of: |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
65 context:templatename |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
66 Locally binds the variable DICT to a dictionary which can be |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
67 updated in FORMS." |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
68 `(let* ((dict (srecode-create-dictionary)) |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
69 (temp (srecode-template-get-table (srecode-table) |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
70 ,template |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
71 nil |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
72 'ede)) |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
73 ) |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
74 (when (not temp) |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
75 (error "EDE template %s for %s not found!" |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
76 ,template major-mode)) |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
77 (srecode-resolve-arguments temp dict) |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
78 |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
79 ;; Now execute forms for updating DICT. |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
80 (progn ,@forms) |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
81 |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
82 (srecode-insert-fcn temp dict) |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
83 )) |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
84 |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
85 (defun ede-srecode-insert (template &rest dictionary-entries) |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
86 "Insert at the current point TEMPLATE. |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
87 TEMPLATE should specify a context by using a string format of: |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
88 context:templatename |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
89 Add DICTIONARY-ENTRIES into the dictionary before insertion. |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
90 Note: Just like `srecode-insert', but templates found in 'ede app." |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
91 (require 'srecode/insert) |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
92 (ede-srecode-insert-with-dictionary template |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
93 |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
94 ;; Add in optional dictionary entries. |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
95 (while dictionary-entries |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
96 (srecode-dictionary-set-value dict |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
97 (car dictionary-entries) |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
98 (car (cdr dictionary-entries))) |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
99 (setq dictionary-entries |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
100 (cdr (cdr dictionary-entries)))) |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
101 |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
102 )) |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
103 |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
104 (provide 'ede-srecode) |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
105 |
cdbbb89893d5
lisp/cedet/ede/pmake.el (ede-proj-makefile-create): Require
Chong Yidong <cyd@stupidchicken.com>
parents:
diff
changeset
|
106 ;;; ede-srecode.el ends here |