1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-19 04:10:18 -08:00
emacs/lisp/cedet/ede/pconf.el
David Engster e8cc7880c3 Merge with CEDET upstream (rev. 8499).
lisp/

* eieio/eieio-datadebug.el (data-debug/eieio-insert-slots):
  Inhibit read only while inserting objects.

lisp/cedet/

* semantic.el (navigate-menu): Yank Tag :enable. Make sure
`senator-tag-ring' is bound.
(semantic-parse-region-default): Stop reversing the output of
parse-whole-stream.
(semantic-repeat-parse-whole-stream): Append returned tags
differently, so they come out in the right order.

* semantic/sb.el (semantic-sb-filter-tags-of-class): New option.
(semantic-sb-fetch-tag-table): Filter tags being bucketed to exclude
tags belonging to above filtered classes.

* semantic/find.el (semantic-filter-tags-by-class): New function.

* semantic/tag-ls.el (semantic-tag-similar-p-default): Add
short-circuit in case tag1 and 2 are identical.

* semantic/analyze/fcn.el
(semantic-analyze-dereference-metatype-stack): Use
`semantic-tag-similar-p' instead of 'eq' when comparing two tags
during metatype evaluation in case they are the same, but not the same
node. (Tweaked patch from Tomasz Gajewski) (Tiny change)

* semantic/db-find.el (semanticdb-partial-synchronize): Fix require to
semantic/db-typecache to be correct.
(semanticdb-find-tags-external-children-of-type): Make this a brutish
search by default.

* semantic/sort.el (semantic-tag-external-member-children-default):
When calling `semanticdb-find-tags-external-children-of-type', pass in
the input tag as the place to start searching for externally defined
methods.

* semantic/db-file.el (semanticdb-default-save-directory): Doc
fix: Add ref to default value.

* semantic/complete.el (semantic-complete-post-command-hook): When
detecting if cursor is outside completion area, do so if cursor moves
before start of overlay, or the original starting location of the
overlay (i.e., if user deletes past beginning of the overlay region).
(semantic-complete-inline-tag-engine): Initialize original start of
`semantic-complete-inline-overlay'.

* semantic/bovine/c.el (semantic-c-describe-environment): Update some
section titles.  Test semanticdb table before printing it.
(semantic-c-reset-preprocessor-symbol-map): Update
`semantic-lex-spp-macro-symbol-obarray' outside the loop over all the
files contributing to its value.
(semantic-c-describe-environment): If there is an EDE project but no
spp symbols from it, say so.

* srecode/args.el (srecode-semantic-handle-:project): New argument
handler. Provide variable values if not in an EDE project.

* srecode/srt-mode.el (srecode-template-mode): Fix typo on srecode
name.

* srecode/cpp.el (srecode-semantic-handle-:c): Replace all characters
in FILENAME_SYMBOL that aren't valid CPP symbol chars.

* srecode/map.el (srecode-map-validate-file-for-mode): Force semantic
to load if it is not active in the template being added to the map.

* srecode/srt.el: Add local variables for setting the autoload file
name.
(srecode-semantic-handle-:srt): New autoload cookie

* ede.el (ede-apply-preprocessor-map): Apply map to
`semantic-lex-spp-project-macro-symbol-obarray' instead of the system
one. Add require for semantic.

* ede/proj-elisp.el (ede-update-version-in-source): In case a file has
both a version variable and a Version: comment, always use
`call-next-method'.

* ede/cpp-root.el (ede-set-project-variables): Deleted.
`ede-preprocessor-map' does the job this function was attempting to do
with :spp-table.
(ede-preprocessor-map): Update file tests to provide better messages.
Do not try to get symbols from a file that is the file in the current
buffer.

* ede/base.el (ede-project-placeholder): Add more documentation to
:file slot.
(ede-load-cache): Use `insert-file-contents' instead of
`find-file-noselect' in order to avoid activating other tools.

* semantic/bovine/c.el (semantic-get-local-variables): Also add a new
variable 'this' if we are in an inline member function.  For detecting
this, we check overlays at point if there is a class spanning the
current function.  Also, the variable 'this' has to be a pointer.

* semantic/bovine/gcc.el (semantic-gcc-setup): Fail gracefully when
querying g++ for defines returns an error.

* srecode/srt-mode.el:
* srecode/compile.el:
* semantic/elp.el:
* semantic/db-el.el:
* semantic/complete.el:
* ede.el:
* cogre.el:
* srecode/table.el:
* srecode/mode.el:
* srecode/insert.el:
* srecode/compile.el:
* semantic/decorate/include.el:
* semantic/db.el:
* semantic/adebug.el:
* ede/auto.el:
* srecode/dictionary.el:
* semantic/ede-grammar.el:
* semantic/db.el:
* semantic/db-find.el:
* semantic/db-file.el:
* semantic/complete.el:
* semantic/bovine/c.el:
* semantic/analyze.el:
* ede/util.el:
* ede/proj.el:
* ede/proj-elisp.el:
* ede/pconf.el:
* ede/locate.el:
* ede.el: Adapt to EIEIO namespace cleanup: Rename `object-name' to
`eieio-object-name', `object-set-name-string' to
`eieio-object-set-name-string', `object-class' to
`eieio-object-class', `class-parent' to `eieio-class-parent',
`class-parents' to `eieio-class-parents', `class-children' to
`eieio-class-children', `object-name-string' to
`eieio-object-name-string', `object-class-fast' to
`eieio--object-class'. Also replace direct access with new accessor
functions.

* ede/cpp-root.el (ede-project-autoload, initialize-instance): Fix EDE
file symbol to match rename.  Fix ede-cpp-root symbol to include
-project in name.

* cedet-files.el (cedet-files-list-recursively): New function.
Recursively find files whose names are matching to given regex

* ede.el (ede-current-project): Rewrite to avoid imperative style.

* ede/files.el (ede-find-file): Simplify code.

* ede/base.el (ede-normalize-file/directory): Add function to
normalize :file or :directory slots if they are missing.

* ede/cpp-root.el (ede-cpp-root-project): Add compile-command slot.
(project-compile-project): Compiles project using value specified in
:compule-command slot or in compile-command local variable.  Value of
slot or local variable could be string or function that receives
project and should return string that will be invoked as command.
(project-compile-target): Invokes compilation of whole project

* ede/files.el (ede-find-project-root): New function to find root of
project that contains specific file.
(ede-files-find-existing): New function which checks presence of given
directory in the list of registered projects.

etc/

* srecode/ede-autoconf.srt: Change Copyright to FSF.
(ede-empty): Change AC_INIT to use PROJECT_NAME, and PROJECT_VERSION.

* srecode/ede-make.srt (ede-empty): Add a dependency on :project.  Add
header comment specifying the project's relative path.

* srecode/c.srt (header_guard): Upcase the filename symbol.

* srecode/java.srt (empty-main): New.
(class-tag): Decapitalize class.
2013-03-21 23:11:03 +01:00

187 lines
6.8 KiB
EmacsLisp

;;; ede/pconf.el --- configure.ac maintenance for EDE
;;; Copyright (C) 1998-2000, 2005, 2008-2013 Free Software Foundation,
;;; Inc.
;; Author: Eric M. Ludlam <zappo@gnu.org>
;; Keywords: project
;; 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:
;;
;; Code generator for autoconf configure.ac, and support files.
(require 'ede/proj)
(require 'ede/autoconf-edit)
(defvar compilation-in-progress)
(defvar ede-pconf-create-file-query 'ask
"Controls if queries are made while creating project files.
A value of 'ask means to always ask the user before creating
a file, such as AUTHORS. A value of 'never means don't ask, and
don't do it. A value of nil means to just do it.")
;;; Code:
(defmethod ede-proj-configure-file ((this ede-proj-project))
"The configure.ac script used by project THIS."
(ede-expand-filename (ede-toplevel this) "configure.ac" t))
(defmethod ede-proj-configure-test-required-file ((this ede-proj-project) file)
"For project THIS, test that the file FILE exists, or create it."
(let ((f (ede-expand-filename (ede-toplevel this) file t)))
(when (not (file-exists-p f))
(save-excursion
(find-file f)
(cond ((string= file "AUTHORS")
(insert (user-full-name) " <" (user-login-name) ">"))
((string= file "NEWS")
(insert "NEWS file for " (ede-name this)))
(t (insert "\n")))
(save-buffer)
(when
(and (eq ede-pconf-create-file-query 'ask)
(not (eq ede-pconf-create-file-query 'never))
(not (y-or-n-p
(format "I had to create the %s file for you. Ok? " file)))
(error "Quit")))))))
(defmethod ede-proj-configure-synchronize ((this ede-proj-project))
"Synchronize what we know about project THIS into configure.ac."
(let ((b (find-file-noselect (ede-proj-configure-file this)))
;;(td (file-name-directory (ede-proj-configure-file this)))
(targs (oref this targets))
(postcmd "")
(add-missing nil))
;; First, make sure we have a file.
(if (not (file-exists-p (ede-proj-configure-file this)))
(autoconf-new-program b (oref this name) "Project.ede"))
(set-buffer b)
;; Next, verify all targets of all subobjects.
(autoconf-set-version (oref this version))
(let ((top-level-project-local this))
(autoconf-set-output
(ede-map-all-subprojects
this
(lambda (sp)
;; NOTE: don't put in ./Makefile - configure complains.
(let ((dir (file-name-as-directory
(directory-file-name
(ede-subproject-relative-path sp top-level-project-local)))))
(when (string= dir "./") (setq dir ""))
;; Use concat, because expand-file-name removes the relativity.
(concat dir "Makefile") )))))
;;
;; NOTE TO SELF. TURN THIS INTO THE OFFICIAL LIST
;;
(ede-proj-dist-makefile this)
;; Loop over all targets to clean and then add themselves in.
(ede-map-all-subprojects
this
(lambda (sp)
(ede-map-targets sp 'ede-proj-flush-autoconf)))
(ede-map-all-subprojects
this
(lambda (sp)
(ede-map-targets this 'ede-proj-tweak-autoconf)))
;; Now save
(save-buffer)
(setq postcmd "autoreconf -i;")
;; Verify a bunch of files that are required by automake.
(ede-proj-configure-test-required-file this "AUTHORS")
(ede-proj-configure-test-required-file this "NEWS")
(ede-proj-configure-test-required-file this "README")
(ede-proj-configure-test-required-file this "ChangeLog")
;; Let specific targets get missing files.
(mapc 'ede-proj-configure-create-missing targs)
;; Verify that we have a make system.
(if (or (not (ede-expand-filename (ede-toplevel this) "Makefile"))
;; Now is this one of our old Makefiles?
(with-current-buffer
(find-file-noselect
(ede-expand-filename (ede-toplevel this)
"Makefile" t) t)
(goto-char (point-min))
;; Here is the unique piece for our makefiles.
(re-search-forward "For use with: make" nil t)))
(setq postcmd (concat postcmd "./configure;")))
(if (not (string= "" postcmd))
(progn
(compile postcmd)
(while compilation-in-progress
(accept-process-output)
;; If sit for indicates that input is waiting, then
;; read and discard whatever it is that is going on.
(when (not (sit-for 1))
(read-event nil nil .1)
))
(with-current-buffer "*compilation*"
(goto-char (point-max))
(when (not (string= mode-line-process ":exit [0]"))
(error "Configure failed!"))
;; The Makefile is now recreated by configure?
(let ((b (get-file-buffer
(ede-expand-filename (ede-toplevel this)
"Makefile" 'newfile))))
;; This makes sure that if Makefile was loaded, and old,
;; that it gets flushed so we don't keep rebuilding
;; the autoconf system.
(if b (kill-buffer b))))
))))
(defmethod ede-proj-configure-recreate ((this ede-proj-project))
"Delete project THIS's configure script and start over."
(if (not (ede-proj-configure-file this))
(error "Could not determine configure.ac for %S" (eieio-object-name this)))
(let ((b (get-file-buffer (ede-proj-configure-file this))))
;; Destroy all evidence of the old configure.ac
(delete-file (ede-proj-configure-file this))
(if b (kill-buffer b)))
(ede-proj-configure-synchronize this))
(defmethod ede-proj-tweak-autoconf ((this ede-proj-target))
"Tweak the configure file (current buffer) to accommodate THIS."
;; Check the compilers belonging to THIS, and call the autoconf
;; setup for those compilers.
(mapc 'ede-proj-tweak-autoconf (ede-proj-compilers this))
(mapc 'ede-proj-tweak-autoconf (ede-proj-linkers this))
)
(defmethod ede-proj-flush-autoconf ((this ede-proj-target))
"Flush the configure file (current buffer) to accommodate THIS.
By flushing, remove any cruft that may be in the file. Subsequent
calls to `ede-proj-tweak-autoconf' can restore items removed by flush."
nil)
(defmethod ede-proj-configure-add-missing ((this ede-proj-target))
"Query if any files needed by THIS provided by automake are missing.
Results in --add-missing being passed to automake."
nil)
(defmethod ede-proj-configure-create-missing ((this ede-proj-target))
"Add any missing files for THIS by creating them."
nil)
(provide 'ede/pconf)
;;; ede/pconf.el ends here