0

I have installed the latest development version of Emacs on my Mac from the source by cloning the Git repository here ('Emacs source repository' under 'Anonymous clone'), and then executing make in the repo's top directory.

It didn't go smoothly, but only because I didn't have some prerequisites installed (namely, Autoconf and gnutls, and the OS X command-line tools). Once I'd installed the prerequisites (Autoconf and gnutls with Homebrew, and the OS X command-line tools by running xcode-select --install), the make script completed successfully.

However, when I open the Emacs GUI (<installation directory>/nextstep/Emacs), there's no splash screen, and instead of the usual *GNU Emacs* buffer, the *scratch* buffer opens initially.

More importantly, when I try to inspect variables by executing C-h v, the following error message appears in the echo buffer:

Cannot open load file: No such file or directory, help-fns

Why doesn't the C-h v command work, and how can I view and set a variable's value as well as inspect the info about a variable?


I run macOS Sierra version 10.12.5 (the latest release as of today).

  • Can you evaluate: (mapconcat 'identity load-path "\n") and post the output here? This should show where Emacs will look for Emacs Lisp source files. – wvxvw Jul 18 '17 at 12:31
  • @wvxvw: /Users/evanaad/Documents/emacs/nextstep/Emacs.app/Contents/Resources/lisp – Evan Aad Jul 18 '17 at 12:46
  • Does this directory exist and is readable? If you try find /Users/evanaad/Documents/emacs/nextstep/Emacs.app/Contents/R‌​esources/lisp -exec grep 'help-fns' {} + does this find any results? Hopefully, something like (provide 'help-fns). – wvxvw Jul 18 '17 at 12:58
  • 3
    Also, I've never built / installed Emacs on Mac, but, typically, just running make isn't enough, you also need make install. Did you also do that? – wvxvw Jul 18 '17 at 13:00
  • @wvxvw: 1. Executing find /Users/evanaad/Documents/emacs/nextstep/Emacs.app/Contents/Resources/lisp yields No such file or directory. 2. No, I did not run make install. I'll run it now and try again. – Evan Aad Jul 18 '17 at 13:05
2

make is a program often used to automate life-cycle of another program. Compiling, testing, packaging and installing would be examples of events in a program's life-cycle managed by make. Usually, it uses a configuration file, typically called Makefile, to describe what should happen during each event in the program's life-cycle. These descriptions are called "recipes", or, sometimes "targets".

When called with a name of a recipe, make will execute that recipe's description, similar to other programs, make can also be controlled by environment variables and command-line arguments. Thus, it makes sense to separate the life-cycle of the program into units: so that each unit can be executed with (possibly) different settings.

Thus, for example, it makes sense to first execute

make

and then

make install

Because often make install can be controlled by --prefix argument specifying where to install the program. Or, perhaps, because you wanted to first execute make test, and only after that install the program. Or, perhaps, you didn't want to install it at all, but, instead, you wanted to package it in a way that a package manager of an (other) operating system could install the program at a later time.

Specifically, the script that defines how Emacs is built will compile the C source, the Emacs Lisp source, Texinfo and possibly some other sources, but will not copy the compiled files into directories where Emacs will be looking for them when it's run. This is why you need to also call make install, which does precisely that--it copies the compiled artifacts to the locations expected by the running program.

  • Thanks. You wrote a very clear explanation, and I appreciate the background material. – Evan Aad Jul 19 '17 at 6:52

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.