diff options
Diffstat (limited to 'lisp/cedet/ede/cpp-root.el')
| -rw-r--r-- | lisp/cedet/ede/cpp-root.el | 67 |
1 files changed, 50 insertions, 17 deletions
diff --git a/lisp/cedet/ede/cpp-root.el b/lisp/cedet/ede/cpp-root.el index d31ede723cc..cf2009ced30 100644 --- a/lisp/cedet/ede/cpp-root.el +++ b/lisp/cedet/ede/cpp-root.el | |||
| @@ -242,11 +242,11 @@ ROOTPROJ is nil, since there is only one project." | |||
| 242 | (ede-add-project-autoload | 242 | (ede-add-project-autoload |
| 243 | (ede-project-autoload "cpp-root" | 243 | (ede-project-autoload "cpp-root" |
| 244 | :name "CPP ROOT" | 244 | :name "CPP ROOT" |
| 245 | :file 'ede-cpp-root | 245 | :file 'ede/cpp-root |
| 246 | :proj-file 'ede-cpp-root-project-file-for-dir | 246 | :proj-file 'ede-cpp-root-project-file-for-dir |
| 247 | :proj-root 'ede-cpp-root-project-root | 247 | :proj-root 'ede-cpp-root-project-root |
| 248 | :load-type 'ede-cpp-root-load | 248 | :load-type 'ede-cpp-root-load |
| 249 | :class-sym 'ede-cpp-root | 249 | :class-sym 'ede-cpp-root-project |
| 250 | :new-p nil | 250 | :new-p nil |
| 251 | :safe-p t) | 251 | :safe-p t) |
| 252 | ;; When a user creates one of these, it should override any other project | 252 | ;; When a user creates one of these, it should override any other project |
| @@ -272,10 +272,12 @@ ROOTPROJ is nil, since there is only one project." | |||
| 272 | ;; level include paths, and PreProcessor macro tables. | 272 | ;; level include paths, and PreProcessor macro tables. |
| 273 | 273 | ||
| 274 | (defclass ede-cpp-root-target (ede-target) | 274 | (defclass ede-cpp-root-target (ede-target) |
| 275 | () | 275 | ((project :initform nil |
| 276 | :initarg :project)) | ||
| 276 | "EDE cpp-root project target. | 277 | "EDE cpp-root project target. |
| 277 | All directories need at least one target.") | 278 | All directories need at least one target.") |
| 278 | 279 | ||
| 280 | ;;;###autoload | ||
| 279 | (defclass ede-cpp-root-project (ede-project eieio-instance-tracker) | 281 | (defclass ede-cpp-root-project (ede-project eieio-instance-tracker) |
| 280 | ((tracking-symbol :initform 'ede-cpp-root-project-list) | 282 | ((tracking-symbol :initform 'ede-cpp-root-project-list) |
| 281 | (include-path :initarg :include-path | 283 | (include-path :initarg :include-path |
| @@ -339,6 +341,15 @@ The function symbol must take two arguments: | |||
| 339 | It should return the fully qualified file name passed in from NAME. If that file does not | 341 | It should return the fully qualified file name passed in from NAME. If that file does not |
| 340 | exist, it should return nil." | 342 | exist, it should return nil." |
| 341 | ) | 343 | ) |
| 344 | (compile-command :initarg :compile-command | ||
| 345 | :initform nil | ||
| 346 | :type (or null string function) | ||
| 347 | :documentation | ||
| 348 | "Compilation command that will be used for this project. | ||
| 349 | It could be string or function that will accept proj argument and should return string. | ||
| 350 | The string will be passed to 'compuile' function that will be issued in root | ||
| 351 | directory of project." | ||
| 352 | ) | ||
| 342 | ) | 353 | ) |
| 343 | "EDE cpp-root project class. | 354 | "EDE cpp-root project class. |
| 344 | Each directory needs a project file to control it.") | 355 | Each directory needs a project file to control it.") |
| @@ -366,7 +377,7 @@ Each directory needs a project file to control it.") | |||
| 366 | (when (or (not (file-exists-p f)) | 377 | (when (or (not (file-exists-p f)) |
| 367 | (file-directory-p f)) | 378 | (file-directory-p f)) |
| 368 | (delete-instance this) | 379 | (delete-instance this) |
| 369 | (error ":file for ede-cpp-root must be a file")) | 380 | (error ":file for ede-cpp-root-project must be a file")) |
| 370 | (oset this :file f) | 381 | (oset this :file f) |
| 371 | (oset this :directory (file-name-directory f)) | 382 | (oset this :directory (file-name-directory f)) |
| 372 | (ede-project-directory-remove-hash (file-name-directory f)) | 383 | (ede-project-directory-remove-hash (file-name-directory f)) |
| @@ -404,7 +415,8 @@ If one doesn't exist, create a new one for this directory." | |||
| 404 | :name (file-name-nondirectory | 415 | :name (file-name-nondirectory |
| 405 | (directory-file-name dir)) | 416 | (directory-file-name dir)) |
| 406 | :path dir | 417 | :path dir |
| 407 | :source nil)) | 418 | :source nil |
| 419 | :project proj)) | ||
| 408 | (object-add-to-list proj :targets ans) | 420 | (object-add-to-list proj :targets ans) |
| 409 | ) | 421 | ) |
| 410 | ans)) | 422 | ans)) |
| @@ -481,15 +493,6 @@ This is for project include paths and spp source files." | |||
| 481 | 493 | ||
| 482 | filename)) | 494 | filename)) |
| 483 | 495 | ||
| 484 | (defmethod ede-set-project-variables ((project ede-cpp-root-project) &optional buffer) | ||
| 485 | "Set variables local to PROJECT in BUFFER. | ||
| 486 | Also set up the lexical preprocessor map." | ||
| 487 | (call-next-method) | ||
| 488 | (when (and (featurep 'semantic/bovine/c) (featurep 'semantic/lex-spp)) | ||
| 489 | (setq semantic-lex-spp-project-macro-symbol-obarray | ||
| 490 | (semantic-lex-make-spp-table (oref project spp-table))) | ||
| 491 | )) | ||
| 492 | |||
| 493 | (defmethod ede-system-include-path ((this ede-cpp-root-project)) | 496 | (defmethod ede-system-include-path ((this ede-cpp-root-project)) |
| 494 | "Get the system include path used by project THIS." | 497 | "Get the system include path used by project THIS." |
| 495 | (oref this system-include-path)) | 498 | (oref this system-include-path)) |
| @@ -506,11 +509,18 @@ Also set up the lexical preprocessor map." | |||
| 506 | (table (when expfile | 509 | (table (when expfile |
| 507 | (semanticdb-file-table-object expfile))) | 510 | (semanticdb-file-table-object expfile))) |
| 508 | ) | 511 | ) |
| 509 | (if (not table) | 512 | (cond |
| 510 | (message "Cannot find file %s in project." F) | 513 | ((not (file-exists-p expfile)) |
| 514 | (message "Cannot find file %s in project." F)) | ||
| 515 | ((string= expfile (buffer-file-name)) | ||
| 516 | ;; Don't include this file in it's own spp table. | ||
| 517 | ) | ||
| 518 | ((not table) | ||
| 519 | (message "No db table available for %s." expfile)) | ||
| 520 | (t | ||
| 511 | (when (semanticdb-needs-refresh-p table) | 521 | (when (semanticdb-needs-refresh-p table) |
| 512 | (semanticdb-refresh-table table)) | 522 | (semanticdb-refresh-table table)) |
| 513 | (setq spp (append spp (oref table lexical-table)))))) | 523 | (setq spp (append spp (oref table lexical-table))))))) |
| 514 | (oref this spp-files)) | 524 | (oref this spp-files)) |
| 515 | spp)) | 525 | spp)) |
| 516 | 526 | ||
| @@ -522,6 +532,29 @@ Also set up the lexical preprocessor map." | |||
| 522 | "Get the pre-processor map for project THIS." | 532 | "Get the pre-processor map for project THIS." |
| 523 | (ede-preprocessor-map (ede-target-parent this))) | 533 | (ede-preprocessor-map (ede-target-parent this))) |
| 524 | 534 | ||
| 535 | (defmethod project-compile-project ((proj ede-cpp-root-project) &optional command) | ||
| 536 | "Compile the entire current project PROJ. | ||
| 537 | Argument COMMAND is the command to use when compiling." | ||
| 538 | ;; we need to be in the proj root dir for this to work | ||
| 539 | (let* ((cmd (oref proj :compile-command)) | ||
| 540 | (ov (oref proj :local-variables)) | ||
| 541 | (lcmd (when ov (cdr (assoc 'compile-command ov)))) | ||
| 542 | (cmd-str (cond | ||
| 543 | ((stringp cmd) cmd) | ||
| 544 | ((functionp cmd) (funcall cmd proj)) | ||
| 545 | ((stringp lcmd) lcmd) | ||
| 546 | ((functionp lcmd) (funcall lcmd proj))))) | ||
| 547 | (when cmd-str | ||
| 548 | (let ((default-directory (ede-project-root-directory proj))) | ||
| 549 | (compile cmd-str))))) | ||
| 550 | |||
| 551 | (defmethod project-compile-target ((obj ede-cpp-root-target) &optional command) | ||
| 552 | "Compile the current target OBJ. | ||
| 553 | Argument COMMAND is the command to use for compiling the target." | ||
| 554 | (when (oref obj :project) | ||
| 555 | (project-compile-project (oref obj :project) command))) | ||
| 556 | |||
| 557 | |||
| 525 | ;;; Quick Hack | 558 | ;;; Quick Hack |
| 526 | (defun ede-create-lots-of-projects-under-dir (dir projfile &rest attributes) | 559 | (defun ede-create-lots-of-projects-under-dir (dir projfile &rest attributes) |
| 527 | "Create a bunch of projects under directory DIR. | 560 | "Create a bunch of projects under directory DIR. |