unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
blob d9811ce52f9762e4a0a4640bef8f553ab32bc246 3212 bytes (raw)
name: lisp/cedet/ede/make.el 	 # note: path name is non-authoritative(*)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
 
;;; ede/make.el --- General information about "make"  -*- lexical-binding: t -*-

;;; Copyright (C) 2009-2021 Free Software Foundation, Inc.

;; Author: Eric M. Ludlam <zappo@gnu.org>

;; 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 <https://www.gnu.org/licenses/>.

;;; Commentary:
;;
;; This file needs to choose the version of "make" it wants to use.
;; Whenever an executable "gmake" is available, we prefer that since
;; it usually means GNU Make.  If it doesn't exist, use "make".
;;
;; Run tests on make --version to be sure it is GNU make so that
;; logical error messages can be provided.

;;; Code:

(defsubst ede--find-executable (exec)
  "Return an expanded file name for a program EXEC on the exec path."
  (declare (obsolete locate-file "28.1"))
  (locate-file exec exec-path))

(defvar ede-make-min-version "3.0"
  "Minimum version of GNU make required.")

(defcustom ede-make-command (cond ((executable-find "gmake")
				   "gmake")
				  (t "make")) ;; What to do?
  "The MAKE command to use for EDE when compiling.
The makefile generated by EDE for C files uses syntax that depends on GNU Make,
so this should be set to something that can execute GNU Make files."
  :group 'ede
  :type 'string)

;;;###autoload
(defun ede-make-check-version (&optional noerror)
  "Check the version of GNU Make installed.
The check passes if the MAKE version is no high enough, or if it
is not GNU make.
If NOERROR is non-nil, return t for success, nil for failure.
If NOERROR is nil, then throw an error on failure.  Return t otherwise."
  (interactive)
  (let ((b (get-buffer-create "*EDE Make Version*"))
	(cd default-directory)
	(rev nil)
        (ans nil))
    (with-current-buffer b
      ;; Setup, and execute make.
      (setq default-directory cd)
      (erase-buffer)
      (call-process ede-make-command nil b nil
		    "--version")
      ;; Check the buffer for the string
      (goto-char (point-min))
      (when (looking-at "GNU Make\\(?: version\\)? \\([0-9][^,[:space:]]+\\),?")
	(setq rev (match-string 1))
        (setq ans (not (version< rev ede-make-min-version))))

      ;; Answer reporting.
      (when (and (called-interactively-p 'interactive) ans)
	(message "GNU Make version %s.  Good enough for CEDET." rev))

      (when (and (not noerror) (not ans))
        (error "EDE requires GNU Make version %s or later (found %s).  Configure `ede-make-command' to fix"
               ede-make-min-version
               rev))
      ans)))

(provide 'ede/make)

;; Local variables:
;; generated-autoload-file: "loaddefs.el"
;; generated-autoload-load-name: "ede/make"
;; End:

;;; ede/make.el ends here

debug log:

solving d9811ce52f ...
found d9811ce52f in https://git.savannah.gnu.org/cgit/emacs.git

(*) Git path names are given by the tree(s) the blob belongs to.
    Blobs themselves have no identifier aside from the hash of its contents.^

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).