Giter Site home page Giter Site logo

jimeh / emacs-builds Goto Github PK

View Code? Open in Web Editor NEW
312.0 8.0 7.0 388 KB

Self-contained Emacs.app builds for macOS, with native-compilation support.

Home Page: https://github.com/jimeh/emacs-builds/releases

Go 100.00%
emacs nightly nightly-build binary download macos macos-app

emacs-builds's Introduction

Logo

Emacs Builds

GitHub release (stable) GitHub release (pretest) GitHub release (nightly) GitHub release (monthly) GitHub release (known good nightly) GitHub issues GitHub pull requests GitHub all releases

Self-contained Emacs.app builds for macOS, with native-compilation support.

Features

  • Self-contained Emacs.app application bundle, with no external dependencies.
  • Native compilation (gccemacs), only in Emacs 28.x and later builds.
  • Native JSON parsing via libjansson.
  • SVG rendering via librsvg.
  • Various image formats are supported via macOS native image APIs.
  • Xwidget-webkit support is enabled, allowing access to a embedded WebKit-based browser with M-x xwidget-webkit-browse-url.
  • Native XML parsing via libxml2.
  • Dynamic module loading.
  • Includes the fix-window-role, system-appearance, and round-undecorated-frame patches from the excellent emacs-plus project.
  • Emacs source is fetched from the emacs-mirror/emacs GitHub repository.
  • Build creation is transparent and public through the use of GitHub Actions, allowing anyone to inspect git commit SHAs, full source code, and exact commands used to produce a build.
  • Emacs.app is signed with a developer certificate and notarized by Apple.
  • Uses build-emacs-for-macos to build the self-contained application bundle.

System Requirements

  • macOS 13 Ventura or later for Apple Silicon builds.
  • macOS 12 Monterey or later for Intel builds, which can run on Apple Silicon via Rosetta2.
  • Xcode Command Line Tools to use native compilation in Emacs, available since 28.x.

Installation

Manual Download

See the Releases page to download latest builds, or here for the latest stable release.

Nightly builds of Emacs are for the most part just fine, but if you don't like living too close to the edge, see issue #7 Known Good Nightly Builds for a list of recent nightly builds which have been actively used by a living being for at least a day or two without any obvious issues.

Homebrew Cask

  1. Install the jimeh/emacs-builds Homebrew tap:
    brew tap jimeh/emacs-builds
    
  2. Install one of the available casks:
    • emacs-app — Latest stable release of Emacs.
      brew install --cask emacs-app
      
    • emacs-app-pretest — Latest pretest build of Emacs.
      brew install --cask emacs-app-pretest
      
    • emacs-app-nightly — Build of Emacs from the master branch, updated every night.
      brew install --cask emacs-app-nightly
      
    • emacs-app-monthly — Build of Emacs from the master branch, updated on the 1st of each month. These includes native Apple Silicon support.
      brew install --cask emacs-app-monthly
      
    • emacs-app-good for the latest known good nightly build listed on #7:
      brew install --cask emacs-app-good
      

Apple Silicon

Native builds for Apple Silicon is supported, but currently GitHub's M1-based Actions Runners are prohibitively expensive for nightly builds. Intel builds though do work on Apple Silicon machines via Rosetta2, with a minor performance impact.

Due to the costs, Apple Silicon builds are for now only scheduled for the 1st of each month. The emacs-app-monthly Homebrew Cask will always be pointing at a release that includes Intel and Apple Silicon builds.

Builds for stable releases of Emacs will also include both Intel and Apple Silicon builds.

Costs

At time of writing (2023-11-21), an average Apple Silicon build uses around 17 minutes of billable time, at a cost of $0.16 USD per minute, that comes out to around $2.72 per build. I am considering enabling sponsorship on this repository in an effort to cover the costs for more frequent Apple Silicon builds, and will update here if/when I have any news.

Use Emacs.app as emacs CLI Tool

Installed via Homebrew Cask

The cask installation method sets up CLI usage automatically by exposing a emacs command. However it will launch Emacs into GUI mode. To instead have emacs in your terminal open a terminal instance of Emacs, add the following alias to your shell setup:

alias emacs="emacs -nw"

Installed Manually

Builds come with a custom emacs shell script launcher for use from the command line, located next to emacsclient in Emacs.app/Contents/MacOS/bin.

The custom emacs script makes sure to use the main Emacs.app/Contents/MacOS/Emacs executable from the correct path, ensuring it finds all the relevant dependencies within the Emacs.app bundle, regardless of if it's exposed via PATH or symlinked from elsewhere.

To use it, simply add Emacs.app/Contents/MacOS/bin to your PATH. For example, if you place Emacs.app in /Applications:

if [ -d "/Applications/Emacs.app/Contents/MacOS/bin" ]; then
  export PATH="/Applications/Emacs.app/Contents/MacOS/bin:$PATH"
  alias emacs="emacs -nw" # Always launch "emacs" in terminal mode.
fi

If you want emacs in your terminal to launch a GUI instance of Emacs, don't use the alias from the above example.

Build Process

Building Emacs is done using the jimeh/build-emacs-for-macos build script, executed within a GitHub Actions workflow. This is why macOS 11.x (Big Sur) or later is required, as it's the oldest version of macOS available in GitHub Actions.

Full history for all builds is available on GitHub Actions here. Build logs are only retained by GitHub for 90 days though.

Nightly builds are scheduled for 23:00 UTC every night, based on the latest commit from the master branch of the emacs-mirror/emacs repository. This means a nightly build will only be produced if there have been new commits since the last nightly build.

Application Signing / Trust

As of June 21st, 2021, all builds are fully signed and notarized. The signing certificate used is: Developer ID Application: Jim Myhrberg (5HX66GF82Z)

To verify the application signature and notarization, you can use spctl:

$ spctl -vvv --assess --type exec /Applications/Emacs.app
/Applications/Emacs.app: accepted
source=Notarized Developer ID
origin=Developer ID Application: Jim Myhrberg (5HX66GF82Z)

All builds also come with a SHA256 checksum file, which itself can be double checked against the SHA256 checksum log output from the packaging step of the GitHub Actions workflow run which produced the build.

Issues / To-Do

Please see Issues for details of things to come, or to report issues.

News / Recent Changes

2023-11-22 — Apple Silicon builds, drop macOS 11 support

Apple Silicon builds are now available, but limited to stable releases, and nightly builds on the 1st of each month due to the cost of using M1-based runners on GitHub Actions. Apple Silicon builds also require macOS 13 Ventura, as that is the oldest macOS version available on M1-based runners.

Additionally, Intel builds minimum required macOS version has been increased from macOS 11 Big Sur, to macOS 12 Monterey. This was needed as Homebrew no longer supports Big Sur, leading to very lengthy and error prone builds as all Homebrew dependencies had to be installed from source.

If dropping support for macOS 11 turns out to be a big issue, it may be possible to offer macOS 11 compatible builds on a less frequent schedule similar to what we're doing with Apple Silicon.

emacs-builds's People

Contributors

deviant-logic avatar jimeh avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

emacs-builds's Issues

Homebrew Cask formula

When #1, #2, and #3 are done, I think it would be handy to provide a
automatically updated set of Homebrew Casks through a custom Homebrew Tap repo.

Cannot find /usr/local/lib/gcc/11/libgcc_s.1.dylib

This issue occurred since the *.dmg version.

Start Emacs.app, error messages are:

Native elisp load failed: "/Users/allendang/.emacs.d/.local/cache/eln/28.0.50-b01b8d59/subr--trampoline-6d657373616765_message_0.eln", "dlopen(/Users/allendang/.emacs.d/.local/cache/eln/28.0.50-b01b8d59/subr--trampoline-6d657373616765_message_0.eln, 1): Library not loaded: /usr/local/lib/gcc/11/libgcc_s.1.dylib
  Referenced from: /Users/allendang/.emacs.d/.local/cache/eln/28.0.50-b01b8d59/subr--trampoline-6d657373616765_message_0.eln
  Reason: image not found"

I found libgcc_s.1.dylib at /Applications/Emacs.app/Contents/MacOS/lib/libgcc_s.1.dylib, seems the reference is wrong.

Incorrect path to own Emacs.app in the built output!?

I've just installed the builds you've published here, tried the latest (2021-05-17) and last known good according to #7 - 2021-05-10 but both fail for me in a similar way when run from a terminal:

kll@mbp13:~$ emacs
Warning: arch-dependent data dir '/Users/runner/work/emacs-builds/emacs-builds/sources/emacs-mirror-emacs-28bed06/nextstep/Emacs.app/Contents/MacOS/libexec/': No such file or directory
Warning: arch-independent data dir '/Users/runner/work/emacs-builds/emacs-builds/sources/emacs-mirror-emacs-28bed06/nextstep/Emacs.app/Contents/Resources/etc/': No such file or directory
Warning: Lisp directory '/Users/runner/work/emacs-builds/emacs-builds/sources/emacs-mirror-emacs-28bed06/nextstep/Emacs.app/Contents/Resources/lisp': No such file or directory
Error: /Users/runner/work/emacs-builds/emacs-builds/sources/emacs-mirror-emacs-28bed06/nextstep/Emacs.app/Contents/Resources/etc/charsets: No such file or directory
Emacs will not function correctly without the character map files.
Please check your installation!

IIRC /Users/runner is used by GitHub Actions, so is it possible that some path used during the build seeps over into the final build. I naturally do not have this directory. If I create it, like so:

mkdir -p /Users/runner/work/emacs-builds/emacs-builds/sources/emacs-mirror-emacs-28bed06/nextstep/
sudo ln -s /Applications/Emacs.app /Users/runner/work/emacs-builds/emacs-builds/sources/emacs-mirror-emacs-28bed06/nextstep/

then emacs works just fine!

Is this something wrong on my machine? I only have a single Mac so difficult to test...

Compilation errors with auctex using recent nightly builds

With recent nightly builds installed view Homebrew, if i start emacs with emacs -Q, and then run (in the *scratch* buffer)

(use-package tex
  :ensure auctex)

auctex gets downloaded and installed fine, but then a few seconds later I start getting compilation errors:

⛔ Warning (comp): libgccjit.so: error: error invoking gcc driver
⛔ Warning (comp): /Users/stanton/.emacs.d/elpa/auctex-14.0.4/toolbar-x.el: Error Internal native compiler error: "failed to compile", "/Users/stanton/.emacs.d/eln-cache/30_0_50-313b7fc4/toolbar-x-54db8775-f5ae28c4.eln", "error invoking gcc driver"
⛔ Warning (comp): libgccjit.so: error: error invoking gcc driver
⛔ Warning (comp): /Users/stanton/.emacs.d/elpa/auctex-14.0.4/latex-flymake.el: Error Internal native compiler error: "failed to compile", "/Users/stanton/.emacs.d/eln-cache/30_0_50-313b7fc4/latex-flymake-518b7c4f-b18f1335.eln", "error invoking gcc driver"
⛔ Warning (comp): libgccjit.so: error: error invoking gcc driver
⛔ Warning (comp): /Users/stanton/.emacs.d/elpa/auctex-14.0.4/texmathp.el: Error Internal native compiler error: "failed to compile", "/Users/stanton/.emacs.d/eln-cache/30_0_50-313b7fc4/texmathp-4dd5ba31-56a5df13.eln", "error invoking gcc driver"
⛔ Warning (comp): libgccjit.so: error: error invoking gcc driver
⛔ Warning (comp): /Users/stanton/.emacs.d/elpa/auctex-14.0.4/plain-tex.el: Error Internal native compiler error: "failed to compile", "/Users/stanton/.emacs.d/eln-cache/30_0_50-313b7fc4/plain-tex-5593a92a-ac9e1cc9.eln", "error invoking gcc driver"
⛔ Warning (comp): libgccjit.so: error: error invoking gcc driver
⛔ Warning (comp): /Users/stanton/.emacs.d/elpa/auctex-14.0.4/tex-site.el: Error Internal native compiler error: "failed to compile", "/Users/stanton/.emacs.d/eln-cache/30_0_50-313b7fc4/tex-site-bebad54c-a8b2c40b.eln", "error invoking gcc driver"
⛔ Warning (comp): libgccjit.so: error: error invoking gcc driver
⛔ Warning (comp): /Users/stanton/.emacs.d/elpa/auctex-14.0.4/context.el: Error Internal native compiler error: "failed to compile", "/Users/stanton/.emacs.d/eln-cache/30_0_50-313b7fc4/context-6579b730-c0123630.eln", "error invoking gcc driver"
⛔ Warning (comp): libgccjit.so: error: error invoking gcc driver
⛔ Warning (comp): /Users/stanton/.emacs.d/elpa/auctex-14.0.4/latex.el: Error Internal native compiler error: "failed to compile", "/Users/stanton/.emacs.d/eln-cache/30_0_50-313b7fc4/latex-a7b69797-43457c02.eln", "error invoking gcc driver"
⛔ Warning (comp): libgccjit.so: error: error invoking gcc driver
⛔ Warning (comp): /Users/stanton/.emacs.d/elpa/auctex-14.0.4/tex.el: Error Internal native compiler error: "failed to compile", "/Users/stanton/.emacs.d/eln-cache/30_0_50-313b7fc4/tex-4e9de5b8-c0b056e3.eln", "error invoking gcc driver"

Any idea how to stop this?

Thanks.

Recently nightly master builds are missing native-compilation

Due to a recent change in Emacs' master branch, native compilation detection was broken in the build script we use. More details here: jimeh/build-emacs-for-macos#76

This means that recent nightly master builds all lack native-compilation support. The affected releases are:

The build script has been fixed already, and updated in commit 54ff01d. Future nightly master builds should include native-compilation again.

I'll leave this issue open until a new nightly master build with native-compilation is available.

Enable relative path for Emacs.app

I use Doom and seem to be running into an issue when running doom sync which I believe generates the autoload files that emacs needs to start. Seems that there are some hardcoded items from the build machine:

doom doctorWarning: arch-dependent data dir '/Users/runner/work/emacs-builds/emacs-builds/sources/emacs-mirror-emacs-5784b42/nextstep/Emacs.app/Contents/MacOS/libexec/': No such file or directoryWarning: arch-independent data dir '/Users/runner/work/emacs-builds/emacs-builds/sources/emacs-mirror-emacs-5784b42/nextstep/Emacs.app/Contents/Resources/etc/': No such file or directoryWarning: Lisp directory '/Users/runner/work/emacs-builds/emacs-builds/sources/emacs-mirror-emacs-5784b42/nextstep/Emacs.app/Contents/Resources/lisp': No such file or directoryError: /Users/runner/work/emacs-builds/emacs-builds/sources/emacs-mirror-emacs-5784b42/nextstep/Emacs.app/Contents/Resources/etc/charsets: No such file or directoryEmacs will not function correctly without the character map files.Please check your installation!\

Could these be turned into relative paths to enable items requiring these locations to run as expected please?

Known Good Nightly Builds

Nightly builds from the master branch of Emacs aren't always stable.

Hence I maintain this list of nightly builds which I have personally used for at
least 1-2 days with my personal config without noticing any issues.

I offer no guarantee of how frequently this list will be updated, but I can say
that I typically update to the latest nightly build somewhere between daily to
once every 1-2 weeks.

Homebrew Cask

To install the latest known good nightly build via Homebrew, install the
emacs-app-good cask from the jimeh/emacs-builds tap:

brew tap jimeh/emacs-builds
brew install --cask emacs-app-good

The emacs-app-good cask is automatically updated once a day against the below
list.

Known Good Nightly Builds

Error with 29.3

Hi, after installing the new 29.3 version, I got this problem if I want to sync in doom.

I haven't had these errors on 29.2.

$ sh ~/.emacs.d/bin/doom sync -u

Error: doom-core-error ("/Users/maikol/.emacs.d/lisp/doom-cli.el" (native-compiler-error (lambda (arg3 &rest arg4) (let ((f #'message)) (apply f arg3 arg4))) "Compiling /Users/maikol/.emacs.d/.local/cache/eln/29_3-6a5f6b0e/subr--trampoline-6d657373616765_message_0.eln...
ld: library not found for -lemutls_w
libgccjit.so: error: error invoking gcc driver
Internal native compiler error: \"failed to compile\", \"/Users/maikol/.emacs.d/.local/cache/eln/29_3-6a5f6b0e/subr--trampoline-6d657373616765_message_0.eln\", \"error invoking gcc driver\"

Error: native-ice (\"failed to compile\" \"/Users/maikol/.emacs.d/.local/cache/eln/29_3-6a5f6b0e/subr--trampoline-6d657373616765_message_0.eln\" \"error invoking gcc driver\")
  mapbacktrace(#f(compiled-function (evald func args flags) #<bytecode -0xd1f2f239c512f81>))
  debug-early-backtrace()
  debug-early(error (native-ice \"failed to compile\" \"/Users/maikol/.emacs.d/.local/cache/eln/29_3-6a5f6b0e/subr--trampoline-6d657373616765_message_0.eln\" \"error invoking gcc driver\"))
  comp--compile-ctxt-to-file(\"/Users/maikol/.emacs.d/.local/cache/eln/29_3-6a5f6b0e/subr--trampoline-6d657373616765_message_0.eln\")
  comp-compile-ctxt-to-file(\"/Users/maikol/.emacs.d/.local/cache/eln/29_3-6a5f6b0e/subr--trampoline-6d657373616765_message_0.eln\")
  comp-final1()
  load-with-code-conversion(\"/private/var/folders/4d/qj4qr8zx1n36td0hlt0p7x_h0000gn/T/emacs-int-comp-subr--trampoline-6d657373616765_message_0-Howewe.el\" \"/private/var/folders/4d/qj4qr8zx1n36td0hlt0p7x_h0000gn/T/emacs-int-comp-subr--trampoline-6d657373616765_message_0-Howewe.el\" nil t)
  command-line-1((\"-l\" \"/var/folders/4d/qj4qr8zx1n36td0hlt0p7x_h0000gn/T/emacs-int-comp-subr--trampoline-6d657373616765_message_0-Howewe.el\"))
  command-line()
  normal-top-level()
"))
  mapbacktrace(#f(compiled-function (evald func args flags) #<bytecode -0xd1f2f239c512f81>))
  debug-early-backtrace()
  debug-early(error (doom-core-error "/Users/maikol/.emacs.d/lisp/doom-cli.el" (native-compiler-error (lambda (arg3 &rest arg4) (let ((f #'message)) (apply f arg3 arg4))) "Compiling /Users/maikol/.emacs.d/.local/cache/eln/29_3-6a5f6b0e/subr--trampoline-6d657373616765_message_0.eln...\nld: library not found for -lemutls_w\nlibgccjit.so: error: error invoking gcc driver\nInternal native compiler error: \"failed to compile\", \"/Users/maikol/.emacs.d/.local/cache/eln/29_3-6a5f6b0e/subr--trampoline-6d657373616765_message_0.eln\", \"error invoking gcc driver\"\n\nError: native-ice (\"failed to compile\" \"/Users/maikol/.emacs.d/.local/cache/eln/29_3-6a5f6b0e/subr--trampoline-6d657373616765_message_0.eln\" \"error invoking gcc driver\")\n  mapbacktrace(#f(compiled-function (evald func args flags) #<bytecode -0xd1f2f239c512f81>))\n  debug-early-backtrace()\n  debug-early(error (native-ice \"failed to compile\" \"/Users/maikol/.emacs.d/.local/cache/eln/29_3-6a5f6b0e/subr--trampoline-6d657373616765_message_0.eln\" \"error invoking gcc driver\"))\n  comp--compile-ctxt-to-file(\"/Users/maikol/.emacs.d/.local/cache/eln/29_3-6a5f6b0e/subr--trampoline-6d657373616765_message_0.eln\")\n  comp-compile-ctxt-to-file(\"/Users/maikol/.emacs.d/.local/cache/eln/29_3-6a5f6b0e/subr--trampoline-6d657373616765_message_0.eln\")\n  comp-final1()\n  load-with-code-conversion(\"/private/var/folders/4d/qj4qr8zx1n36td0hlt0p7x_h0000gn/T/emacs-int-comp-subr--trampoline-6d657373616765_message_0-Howewe.el\" \"/private/var/folders/4d/qj4qr8zx1n36td0hlt0p7x_h0000gn/T/emacs-int-comp-subr--trampoline-6d657373616765_message_0-Howewe.el\" nil t)\n  command-line-1((\"-l\" \"/var/folders/4d/qj4qr8zx1n36td0hlt0p7x_h0000gn/T/emacs-int-comp-subr--trampoline-6d657373616765_message_0-Howewe.el\"))\n  command-line()\n  normal-top-level()\n")))
  signal(doom-core-error ("/Users/maikol/.emacs.d/lisp/doom-cli.el" (native-compiler-error (lambda (arg3 &rest arg4) (let ((f #'message)) (apply f arg3 arg4))) "Compiling /Users/maikol/.emacs.d/.local/cache/eln/29_3-6a5f6b0e/subr--trampoline-6d657373616765_message_0.eln...\nld: library not found for -lemutls_w\nlibgccjit.so: error: error invoking gcc driver\nInternal native compiler error: \"failed to compile\", \"/Users/maikol/.emacs.d/.local/cache/eln/29_3-6a5f6b0e/subr--trampoline-6d657373616765_message_0.eln\", \"error invoking gcc driver\"\n\nError: native-ice (\"failed to compile\" \"/Users/maikol/.emacs.d/.local/cache/eln/29_3-6a5f6b0e/subr--trampoline-6d657373616765_message_0.eln\" \"error invoking gcc driver\")\n  mapbacktrace(#f(compiled-function (evald func args flags) #<bytecode -0xd1f2f239c512f81>))\n  debug-early-backtrace()\n  debug-early(error (native-ice \"failed to compile\" \"/Users/maikol/.emacs.d/.local/cache/eln/29_3-6a5f6b0e/subr--trampoline-6d657373616765_message_0.eln\" \"error invoking gcc driver\"))\n  comp--compile-ctxt-to-file(\"/Users/maikol/.emacs.d/.local/cache/eln/29_3-6a5f6b0e/subr--trampoline-6d657373616765_message_0.eln\")\n  comp-compile-ctxt-to-file(\"/Users/maikol/.emacs.d/.local/cache/eln/29_3-6a5f6b0e/subr--trampoline-6d657373616765_message_0.eln\")\n  comp-final1()\n  load-with-code-conversion(\"/private/var/folders/4d/qj4qr8zx1n36td0hlt0p7x_h0000gn/T/emacs-int-comp-subr--trampoline-6d657373616765_message_0-Howewe.el\" \"/private/var/folders/4d/qj4qr8zx1n36td0hlt0p7x_h0000gn/T/emacs-int-comp-subr--trampoline-6d657373616765_message_0-Howewe.el\" nil t)\n  command-line-1((\"-l\" \"/var/folders/4d/qj4qr8zx1n36td0hlt0p7x_h0000gn/T/emacs-int-comp-subr--trampoline-6d657373616765_message_0-Howewe.el\"))\n  command-line()\n  normal-top-level()\n")))
  (condition-case e (load path noerror 'nomessage) ((debug doom-error) (signal (car e) (cdr e))) ((debug error) (setq path (locate-file path load-path (get-load-suffixes))) (signal (cond ((not (and path (featurep 'doom))) 'error) ((file-in-directory-p path (expand-file-name "cli" doom-core-dir)) 'doom-cli-error) ((file-in-directory-p path doom-core-dir) 'doom-core-error) ((file-in-directory-p path doom-user-dir) 'doom-user-error) ((file-in-directory-p path doom-profile-dir) 'doom-profile-error) ((file-in-directory-p path doom-modules-dir) 'doom-module-error) ('doom-error)) (list path e))))
  doom-load("doom-cli" nil)
  (or (featurep feature subfeature) (doom-load (if subfeature (file-name-concat doom-core-dir (string-remove-prefix "doom-" (symbol-name feature)) (symbol-name filename)) (symbol-name feature)) noerror))
  (let ((subfeature (if (symbolp filename) filename))) (or (featurep feature subfeature) (doom-load (if subfeature (file-name-concat doom-core-dir (string-remove-prefix "doom-" (symbol-name feature)) (symbol-name filename)) (symbol-name feature)) noerror)))
  doom-require(doom-cli)
  (if (let ((load-suffixes '(".elc" ".el"))) (condition-case _ (load (expand-file-name "lisp/doom" user-emacs-directory) nil (not init-file-debug) nil 'must-suffix) ((debug file-missing) (prog1 (defalias 'startup--load-user-init-file@reroute-to-profile #'(lambda (args) (list #'(lambda nil (expand-file-name "init.el" user-emacs-directory)) nil (nth 2 args)))) (advice-add 'startup--load-user-init-file :filter-args #'startup--load-user-init-file@reroute-to-profile)) (setq user-init-file (expand-file-name "early-init" user-emacs-directory)) (setq load-prefer-newer t) (setq gc-cons-threshold (* 16 1024 1024)) nil))) (doom-require (if noninteractive 'doom-cli 'doom-start)))
  (let (file-name-handler-alist) (let ((command-line-args (if noninteractive nil command-line-args)) (profile (or (car (cdr (member "--profile" command-line-args))) (getenv-internal "DOOMPROFILE")))) (if (null profile) (let ((init-dir (or (car (cdr (member "--init-directory" command-line-args))) (getenv-internal "EMACSDIR")))) (if (null init-dir) (if noninteractive (progn (setq user-emacs-directory (file-name-directory (file-truename load-file-name))))) (setq command-switch-alist (cons (cons "--init-directory" #'(lambda (_) (car-safe (prog1 argv (setq argv (cdr argv)))))) command-switch-alist)) (setq user-emacs-directory (expand-file-name init-dir)))) (setq command-switch-alist (cons (cons "--profile" #'(lambda (_) (car-safe (prog1 argv (setq argv (cdr argv)))))) command-switch-alist)) (setenv "DOOMPROFILE" profile) (or (load (expand-file-name (format (let ((lfile (getenv-internal "DOOMPROFILELOADFILE"))) (if lfile (concat (let ((suffix ".el")) (if (string-suffix-p suffix lfile) (substring lfile 0 (- (length lfile) (length suffix))) lfile)) ".%d.elc") "profiles/load.%d.elc")) emacs-major-version) user-emacs-directory) 'noerror (not init-file-debug) 'nosuffix) (user-error "Profiles not initialized yet; run 'doom sync' first")))) (if (let ((load-suffixes '(".elc" ".el"))) (condition-case _ (load (expand-file-name "lisp/doom" user-emacs-directory) nil (not init-file-debug) nil 'must-suffix) ((debug file-missing) (prog1 (defalias 'startup--load-user-init-file@reroute-to-profile #'(lambda (args) (list #'(lambda nil (expand-file-name "init.el" user-emacs-directory)) nil (nth 2 args)))) (advice-add 'startup--load-user-init-file :filter-args #'startup--load-user-init-file@reroute-to-profile)) (setq user-init-file (expand-file-name "early-init" user-emacs-directory)) (setq load-prefer-newer t) (setq gc-cons-threshold (* 16 1024 1024)) nil))) (doom-require (if noninteractive 'doom-cli 'doom-start))))
  (or (let (file-name-handler-alist) (let ((command-line-args (if noninteractive nil command-line-args)) (profile (or (car (cdr (member "--profile" command-line-args))) (getenv-internal "DOOMPROFILE")))) (if (null profile) (let ((init-dir (or (car (cdr (member "--init-directory" command-line-args))) (getenv-internal "EMACSDIR")))) (if (null init-dir) (if noninteractive (progn (setq user-emacs-directory (file-name-directory (file-truename load-file-name))))) (setq command-switch-alist (cons (cons "--init-directory" #'(lambda (_) (car-safe (prog1 argv (setq argv (cdr argv)))))) command-switch-alist)) (setq user-emacs-directory (expand-file-name init-dir)))) (setq command-switch-alist (cons (cons "--profile" #'(lambda (_) (car-safe (prog1 argv (setq argv (cdr argv)))))) command-switch-alist)) (setenv "DOOMPROFILE" profile) (or (load (expand-file-name (format (let ((lfile (getenv-internal "DOOMPROFILELOADFILE"))) (if lfile (concat (let ((suffix ".el")) (if (string-suffix-p suffix lfile) (substring lfile 0 (- (length lfile) (length suffix))) lfile)) ".%d.elc") "profiles/load.%d.elc")) emacs-major-version) user-emacs-directory) 'noerror (not init-file-debug) 'nosuffix) (user-error "Profiles not initialized yet; run 'doom sync' first")))) (if (let ((load-suffixes '(".elc" ".el"))) (condition-case _ (load (expand-file-name "lisp/doom" user-emacs-directory) nil (not init-file-debug) nil 'must-suffix) ((debug file-missing) (prog1 (defalias 'startup--load-user-init-file@reroute-to-profile #'(lambda (args) (list #'(lambda nil (expand-file-name "init.el" user-emacs-directory)) nil (nth 2 args)))) (advice-add 'startup--load-user-init-file :filter-args #'startup--load-user-init-file@reroute-to-profile)) (setq user-init-file (expand-file-name "early-init" user-emacs-directory)) (setq load-prefer-newer t) (setq gc-cons-threshold (* 16 1024 1024)) nil))) (doom-require (if noninteractive 'doom-cli 'doom-start)))) (load user-init-file 'noerror (not init-file-debug) nil 'must-suffix))
  load-with-code-conversion("/Users/maikol/.emacs.d/early-init.el" "/Users/maikol/.emacs.d/early-init.el" nil t)
  load("/Users/maikol/.emacs.d/early-init.el" nil nomessage nosuffix)
  (and (load init-file nil 'nomessage 'nosuffix) (featurep 'doom))
  (or (and (load init-file nil 'nomessage 'nosuffix) (featurep 'doom)) (user-error "Failed to load Doom from %s" init-file))
  (let* ((bin-dir (file-name-directory (file-truename load-file-name))) (init-file (expand-file-name "../early-init.el" bin-dir))) (or (and (load init-file nil 'nomessage 'nosuffix) (featurep 'doom)) (user-error "Failed to load Doom from %s" init-file)))
  (condition-case e (let* ((bin-dir (file-name-directory (file-truename load-file-name))) (init-file (expand-file-name "../early-init.el" bin-dir))) (or (and (load init-file nil 'nomessage 'nosuffix) (featurep 'doom)) (user-error "Failed to load Doom from %s" init-file))) (user-error (message "Error: %s" (car (cdr e))) (kill-emacs 2)))
  load-with-code-conversion("/Users/maikol/.emacs.d/bin/doom" "/Users/maikol/.emacs.d/bin/doom" nil t)
  command-line-1(("--load" "/Users/maikol/.emacs.d/bin/doom" "--" "sync" "-u"))
  command-line()
  normal-top-level()
Unexpected error in Doom’s core: "/Users/maikol/.emacs.d/lisp/doom-cli.el", (native-compiler-error (lambda (arg3 &rest arg4) (let ((f #'message)) (apply f arg3 arg4))) "Compiling /Users/maikol/.emacs.d/.local/cache/eln/29_3-6a5f6b0e/subr--trampoline-6d657373616765_message_0.eln...
ld: library not found for -lemutls_w
libgccjit.so: error: error invoking gcc driver
Internal native compiler error: \"failed to compile\", \"/Users/maikol/.emacs.d/.local/cache/eln/29_3-6a5f6b0e/subr--trampoline-6d657373616765_message_0.eln\", \"error invoking gcc driver\"

Error: native-ice (\"failed to compile\" \"/Users/maikol/.emacs.d/.local/cache/eln/29_3-6a5f6b0e/subr--trampoline-6d657373616765_message_0.eln\" \"error invoking gcc driver\")
  mapbacktrace(#f(compiled-function (evald func args flags) #<bytecode -0xd1f2f239c512f81>))
  debug-early-backtrace()
  debug-early(error (native-ice \"failed to compile\" \"/Users/maikol/.emacs.d/.local/cache/eln/29_3-6a5f6b0e/subr--trampoline-6d657373616765_message_0.eln\" \"error invoking gcc driver\"))
  comp--compile-ctxt-to-file(\"/Users/maikol/.emacs.d/.local/cache/eln/29_3-6a5f6b0e/subr--trampoline-6d657373616765_message_0.eln\")
  comp-compile-ctxt-to-file(\"/Users/maikol/.emacs.d/.local/cache/eln/29_3-6a5f6b0e/subr--trampoline-6d657373616765_message_0.eln\")
  comp-final1()
  load-with-code-conversion(\"/private/var/folders/4d/qj4qr8zx1n36td0hlt0p7x_h0000gn/T/emacs-int-comp-subr--trampoline-6d657373616765_message_0-Howewe.el\" \"/private/var/folders/4d/qj4qr8zx1n36td0hlt0p7x_h0000gn/T/emacs-int-comp-subr--trampoline-6d657373616765_message_0-Howewe.el\" nil t)
  command-line-1((\"-l\" \"/var/folders/4d/qj4qr8zx1n36td0hlt0p7x_h0000gn/T/emacs-int-comp-subr--trampoline-6d657373616765_message_0-Howewe.el\"))
  command-line()
  normal-top-level()
")

For the moment, I reinstalled 29.2.

mu4e is missing in the builded app

I installed your latest nightly from the emacs-28 and I got this error at startup

Warning (initialization): An error occurred while loading ‘/Users/maikol/.emacs.d/init.el’:

Error in private config: config.el, (file-missing Cannot open load file No such file or directory mu4e)

The temporary solution is to add this to the config

(add-to-list 'load-path "/usr/local/share/emacs/site-lisp/mu/mu4e")

I think that loading mu4e should be loading directly by the app instead of the user.

Best.

DBus support

Is there any reason for not adding DBus support (--with-dbus flag)? It could be a useful addition with no real downsides. I don't know if there are any other feature flags that are left out but I think it would be wise to include them all (unless they have some really apparent downsides) in a pre-built version so that everyone can enjoy.

Also thanks a lot, this project saved me quite a lot of time! DBus support would be a cherry on top.

Emacs nightly 28 produces unaligned menus

Hi! I installed this build from your repo

brew info emacs-app-nightly-28
emacs-app-nightly-28: 2021-12-06.da23e60.emacs-28

When I run

emacsclient -c -n -a ''

and pressing SPC in doom, I get unaligned menus

image

image

Thanks.

Provide builds for various Linux distros

This is a decent bit off, as it first requires a build script for Linux.

The build-emacs-for-macos script used at the moment is macOS specific for
obvious reasons. But I am planning a rewrite of it in Go, which allow me more
flexibility, potentially opening the door for Linux support without too much
effort. Time will tell.

Automate stable and pretest builds

Right now I need to manually trigger the build GitHub Actions workflow with the
relevant git tag ref to create a stable or pretest build.

This should be automated by checking the list of git tags in the
emacs-mirror/emacs repository nightly, and automatically triggering builds
for any new stable or pretest builds.

For each matching tag found, I think it would be reasonable to simply check if
the expected GitHub release exists for it, and if not, trigger the workflow.

A minimum version for stable and pretest builds should also set, as I don't
believe there's any point in building anything before Emacs 27.1.

Can't find emacs in your PATH

Build 6-26 and 6-27 failed to start.

Run doom sync reports can't find emacs in your path.

Run emacs from terminal reports

Error using execdir /Applications/Emacs.app/Contents/MacOS/:
emacs: dlopen(/Applications/Emacs.app/Contents/MacOS/../native-lisp/28.0.50-b01b8d59/preloaded/window-0d1b8b93-63c191c3.eln, 1): image not found

Add build for Emacs 28 branch

Thanks for this nice project! The emacs-28 branch was just created and the master branch has version 29.0.50. It would be nice to have separate build for Emacs 28 branch.

Improve GitHub Releases (description, extra assets)

Some of the things I'd like to add to each release:

  • Summary of what was built, potentially the plan.yml file contains
    everything needed.
  • Arguments passed to both ./configure and make. This will require
    changes in the build script.
  • Capture ./configure output and upload it as a release asset.
  • Add a code block to description with SHA256 sums for all attached assets.
    Potentially generated by simply combining the content of each *.sha256
    asset.
  • Upload the Emacs source tarball downloaded by the build script as a asset
    on each release.

For now these should all be relatively easy to deal with as each release will
only have a single build for macOS 10.15 on x86_64. Once we get another OS or
architecture the process will need to be able to deal with two concurrent builds
attaching different assets and updating relevant parts of the description.

Cannot boot Emacs v29.1

Thank you for releasing the new version of Emacs v29.1. I installed it and tried to start it, but it crashed. The following message was displayed when it crashed. It seems that libwebp.7.dylib is not included.

-------------------------------------
Translated Report (Full Report Below)
-------------------------------------

Process:               Emacs [34400]
Path:                  /Applications/Emacs.app/Contents/MacOS/Emacs
Identifier:            org.gnu.Emacs
Version:               Version 29.1 (9.0)
Code Type:             X86-64 (Native)
Parent Process:        launchd [1]
User ID:               502

Date/Time:             2023-08-01 09:51:40.8008 +0900
OS Version:            macOS 13.5 (22G74)
Report Version:        12
Bridge OS Version:     7.6 (20P6072)
Anonymous UUID:        A35E0312-1AB0-F326-5C51-540A97F51DF2

Sleep/Wake UUID:       73C7992D-25C9-4289-8152-E3A075BC67FC

Time Awake Since Boot: 260000 seconds
Time Since Wake:       40506 seconds

System Integrity Protection: enabled

Crashed Thread:        0

Exception Type:        EXC_CRASH (SIGABRT)
Exception Codes:       0x0000000000000000, 0x0000000000000000

Termination Reason:    Namespace DYLD, Code 1 Library missing
Library not loaded: @rpath/libwebp.7.dylib
Referenced from: <8623BFA7-B61B-3445-A97E-06282809AC5A> /Applications/Emacs.app/Contents/Frameworks/libwebpdemux.2.dylib
Reason: tried: '/Applications/Emacs.app/Contents/Frameworks/../lib/libwebp.7.dylib' (no such file), '/Applications/Emacs.app/Contents/Frameworks/libwebp.7.dylib' (no such file), '/Applications/Emacs.app/Contents/Frameworks/libwebp.7.dylib' (no such file), '/usr/lib/libwebp.7.dylib' (no such file, not in dyld cache)
(terminated at launch; ignore backtrace)

Thread 0 Crashed:
0   dyld                          	    0x7ff80462bc52 __abort_with_payload + 10
1   dyld                          	    0x7ff804645fd7 abort_with_payload_wrapper_internal + 82
2   dyld                          	    0x7ff804646009 abort_with_payload + 9
3   dyld                          	    0x7ff8045ca8f0 dyld4::halt(char const*) + 375
4   dyld                          	    0x7ff8045c7b71 dyld4::prepare(dyld4::APIs&, dyld3::MachOAnalyzer const*) + 4526
5   dyld                          	    0x7ff8045c63bd start + 1805


∴ gfind /Applications/Emacs.app -type f -name '*webp*' 
/Applications/Emacs.app/Contents/Frameworks/libwebpdemux.2.dylib
/Applications/Emacs.app/Contents/Frameworks/libwebpdecoder.3.dylib

Apple Silicon Native Builds

Update (2023-11-23): Native Apple Silicon builds are now available. However, due to the high cost of M1-based GitHub-hosted Actions Runners at the moment, they are limited to stable releases, one nightly build per month (on the 1st of each month).

Ways to install native Apple Silicon builds:

  • Latest 29.1 release, which can be installed manually, or via homebrew: brew install --cask jimeh/emacs-builds/emacs-app
  • New monthly Homebrew Cask that only tracks nightly builds from the 1st of each month: brew install --cask jimeh/emacs-builds/emacs-app-monthly

Looking forward, I want to do Apple Silicon builds more frequently, and I'm hoping M1-based runners come down in price, or even become free like the base Intel-based macOS runners are. Until then though, I plan to look into GitHub's sponsorship feature, to see if I could use that to cover build costs, and start doing weekly or maybe even daily Apple Silicon builds.


Update (2021-11-30): Apple Silicon builds now purely depends on GitHub Actions having Apple Silicon based GitHub-hosted runners:

actions/runner-images#2187


Main blocker for this right now is the lack of Apple Silicon support in GitHub Actions, as from what I understand it's not possible to build Emacs for Apple Silicon on an Intel machine. There is always the option of buying a Apple Silicon machine, but that'd go against my goal of keeping everything public and transparent, as I would be producing builds from custom self-hosted hardware, instead of GitHub hosted runners.

The secondary semi-blocker is that GCC and libgccjit are as of writing not yet available for Apple Silicon, meaning even if I had a Apple Silicon environment to produce builds from, native-comp would not be available.

Error message when starting: "1"

I am absolutely willing to finally give native compilation a run. For this very reason, I fetched the latest "known working build" (2021-07-12 by the time of me writing this) and installed it on my Big Sur (Intel) MacBook. I renamed my init.el first so nothing could interfere with it yet. (I used other builds until today, but they don't have native compilation yet.)

Anyway, I can't start Emacs.app.

Bildschirmfoto 2021-07-15 um 13 33 48

Why?

Provide builds of stable Emacs releases

Once #1 is done, stable builds for Emacs 26.x and 27.x releases would be a good
idea. Either just as a manual run, or through some automated means which
monitors for new stable releases via git tags, or some other means.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.