Function: ede-proj-configure-synchronize

ede-proj-configure-synchronize is a byte-compiled function defined in pconf.el.gz.

Signature

(ede-proj-configure-synchronize ARG &rest ARGS)

Implementations

(ede-proj-configure-synchronize (THIS ede-proj-project)) in `ede/pconf.el'.

Synchronize what we know about project THIS into configure.ac.

Source Code

;; Defined in /usr/src/emacs/lisp/cedet/ede/pconf.el.gz
(cl-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 -f -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))

	    ;; FIXME: Use `compilation-finish-functions' or similar to
	    ;; avoid relying on exact format of `mode-line-process'.
            (when (not (string= (car 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))))

	  ))))