]> code.delx.au - gnu-emacs/blobdiff - lisp/cedet/ede/proj-comp.el
merge trunk
[gnu-emacs] / lisp / cedet / ede / proj-comp.el
index be91c25d5f082287c40e929f5fce7b3eb0b1a3c0..8277f58a5e03bc664c1781179a9240fff9058505 100644 (file)
@@ -1,6 +1,6 @@
 ;;; ede/proj-comp.el --- EDE Generic Project compiler/rule driver
 
-;; Copyright (C) 1999, 2000, 2001, 2004, 2005, 2007, 2009
+;; Copyright (C) 1999-2001, 2004-2005, 2007, 2009-2012
 ;;   Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
@@ -44,9 +44,9 @@
 ;; To write a method that inserts a variable or rule for a compiler
 ;; based object, wrap the body of your call in `ede-compiler-only-once'
 
+(eval-when-compile (require 'cl))
 (require 'ede)                         ;source object
 (require 'ede/autoconf-edit)
-(eval-when-compile (require 'ede/pmake))
 
 ;;; Types:
 (defclass ede-compilation-program (eieio-instance-inheritor)
@@ -83,7 +83,7 @@ For example, yacc/lex files need additional chain rules, or inferences.")
            :documentation
            "The commands used to execute this compiler.
 The object which uses this compiler will place these commands after
-it's rule definition.")
+its rule definition.")
    (autoconf :initarg :autoconf
             :initform nil
             :type list
@@ -97,8 +97,8 @@ use the same autoconf form.")
    (objectextention :initarg :objectextention
                    :type string
                    :documentation
-                   "A string which is the extention used for object files.
-For example, C code uses .o on unix, and Emacs Lisp uses .elc.")
+                   "A string which is the extension used for object files.
+For example, C code uses .o on Unix, and Emacs Lisp uses .elc.")
    )
   "A program used to compile or link a program via a Makefile.
 Contains everything needed to output code into a Makefile, or autoconf
@@ -149,7 +149,7 @@ belonging to the target name.")
          :type list
          :custom (repeat string)
          :documentation "Scripts to execute.
-These scripst will be executed in sh (Unless the SHELL variable is overriden).
+These scripts will be executed in sh (Unless the SHELL variable is overridden).
 Do not prefix with TAB.
 Each individual element of this list can be either a string, or
 a lambda function.  (The custom element does not yet express that.")
@@ -236,7 +236,7 @@ This will prevent rules from creating duplicate variables or rules."
 
 ;;; Methods:
 (defmethod ede-proj-tweak-autoconf ((this ede-compilation-program))
-  "Tweak the configure file (current buffer) to accomodate THIS."
+  "Tweak the configure file (current buffer) to accommodate THIS."
   (mapcar
    (lambda (obj)
      (cond ((stringp obj)
@@ -248,16 +248,28 @@ This will prevent rules from creating duplicate variables or rules."
    (oref this autoconf)))
 
 (defmethod ede-proj-flush-autoconf ((this ede-compilation-program))
-  "Flush the configure file (current buffer) to accomodate THIS."
+  "Flush the configure file (current buffer) to accommodate THIS."
   nil)
 
+(defmacro proj-comp-insert-variable-once (varname &rest body)
+  "Add VARNAME into the current Makefile if it doesn't exist.
+Execute BODY in a location where a value can be placed."
+  `(let ((addcr t) (v ,varname))
+     (unless (re-search-backward (concat "^" v "\\s-*=") nil t)
+       (insert v "=")
+       ,@body
+       (if addcr (insert "\n"))
+       (goto-char (point-max)))
+     ))
+(put 'proj-comp-insert-variable-once 'lisp-indent-function 1)
+
 (defmethod ede-proj-makefile-insert-variables ((this ede-compilation-program))
   "Insert variables needed by the compiler THIS."
   (if (eieio-instance-inheritor-slot-boundp this 'variables)
       (with-slots (variables) this
        (mapcar
         (lambda (var)
-          (ede-pmake-insert-variable-once (car var)
+          (proj-comp-insert-variable-once (car var)
             (let ((cd (cdr var)))
               (if (listp cd)
                   (mapc (lambda (c) (insert " " c)) cd)
@@ -343,5 +355,4 @@ compiler it decides to use after inserting in the rule."
 
 (provide 'ede/proj-comp)
 
-;; arch-tag: ade67766-1a5d-467a-826a-93e95594d717
 ;;; ede/proj-comp.el ends here