mirror of
https://github.com/jimeh/build-emacs-for-macos.git
synced 2026-02-19 13:06:38 +00:00
Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
c55bf68e61
|
|||
| 26ce446226 | |||
|
ca2d4c38f6
|
|||
|
bd81870659
|
|||
|
5cd9d1c5fa
|
|||
| 6ae14b597c | |||
|
deda28e5ad
|
15
CHANGELOG.md
15
CHANGELOG.md
@@ -2,6 +2,21 @@
|
||||
|
||||
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
||||
|
||||
### [0.4.16](https://github.com/jimeh/build-emacs-for-macos/compare/0.4.15...0.4.16) (2021-06-07)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **compiling:** improve portability of builds ([ca2d4c3](https://github.com/jimeh/build-emacs-for-macos/commit/ca2d4c38f69c434c77c266594104bfbf34ad5221))
|
||||
* **native_comp:** crash on launch when gcc homebrew package was not installed ([bd81870](https://github.com/jimeh/build-emacs-for-macos/commit/bd8187065928b9f79de8b14222c98f8dc34bfe5f))
|
||||
|
||||
### [0.4.15](https://github.com/jimeh/build-emacs-for-macos/compare/0.4.14...0.4.15) (2021-05-31)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **github:** perform authenticated GitHub API requests when GITHUB_TOKEN env var is set ([deda28e](https://github.com/jimeh/build-emacs-for-macos/commit/deda28e5aded2817bcc7956f377378576372816f))
|
||||
|
||||
### [0.4.14](https://github.com/jimeh/build-emacs-for-macos/compare/0.4.13...0.4.14) (2021-05-22)
|
||||
|
||||
|
||||
|
||||
@@ -74,10 +74,12 @@ Options:
|
||||
--git-sha SHA Override detected git SHA of specified branch allowing builds of old commits
|
||||
--[no-]xwidgets Enable/disable XWidgets if supported (default: enabled)
|
||||
--[no-]native-comp Enable/disable native-comp (default: enabled if supported)
|
||||
--[no-]native-march Enable/disable -march=native CFLAG(default: disabled)
|
||||
--[no-]native-full-aot Enable/disable NATIVE_FULL_AOT / Ahead of Time compilation (default: disabled)
|
||||
--[no-]rsvg Enable/disable SVG image support via librsvg (default: enabled)
|
||||
--no-titlebar Apply no-titlebar patch (default: disabled)
|
||||
--no-frame-refocus Apply no-frame-refocus patch (default: disabled)
|
||||
--[no-]github-auth Make authenticated GitHub API requests if GITHUB_TOKEN environment variable is set.(default: enabled)
|
||||
--work-dir DIR Specify a working directory where tarballs, sources, and builds will be stored and worked with
|
||||
--plan FILE Follow given plan file, instead of using given git ref/sha
|
||||
```
|
||||
|
||||
@@ -71,9 +71,8 @@ end
|
||||
class Build
|
||||
include Output
|
||||
|
||||
DOWNLOAD_URL = 'https://github.com/emacs-mirror/emacs/tarball/%s'
|
||||
LATEST_URL = 'https://api.github.com/repos/emacs-mirror/emacs/commits/%s'
|
||||
NATIVE_COMP_REF_REGEXP = %r{^feature/native-comp}.freeze
|
||||
EMACS_MIRROR_REPO = 'emacs-mirror/emacs'
|
||||
DOWNLOAD_URL = 'https://api.github.com/repos/emacs-mirror/emacs/tarball/%s'
|
||||
|
||||
attr_reader :root_dir
|
||||
attr_reader :source_dir
|
||||
@@ -162,8 +161,20 @@ class Build
|
||||
|
||||
info 'Downloading tarball from GitHub. This could take a while, ' \
|
||||
'please be patient.'
|
||||
result = run_cmd('curl', '-L', url, '-o', target)
|
||||
err 'Download failed.' unless result
|
||||
|
||||
args = ['curl', '-L', url, '-o', target]
|
||||
log_args = args.clone
|
||||
|
||||
if options[:github_auth] && ENV['GITHUB_TOKEN']
|
||||
args = [args[0]] +
|
||||
['-H', "Authorization: Token #{ENV['GITHUB_TOKEN']}"] + args[1..-1]
|
||||
log_args = [log_args[0]] +
|
||||
['-H', '"Authorization: Token $GITHUB_TOKEN"'] +
|
||||
log_args[1..-1]
|
||||
end
|
||||
|
||||
out "CMD: #{log_args.join(' ')}"
|
||||
system(*args) || err("Exit code: #{$CHILD_STATUS.exitstatus}")
|
||||
|
||||
target
|
||||
end
|
||||
@@ -256,7 +267,7 @@ class Build
|
||||
"-I#{File.join(gcc_info.root_dir, 'include')}",
|
||||
"-I#{File.join(gcc_info.libgccjit_root_dir, 'include')}",
|
||||
'-O2',
|
||||
'-march=native',
|
||||
(options[:native_march] ? '-march=native' : nil),
|
||||
ENV['CFLAGS']
|
||||
].compact.join(' ')
|
||||
|
||||
@@ -442,8 +453,9 @@ class Build
|
||||
|
||||
ref_sha = options[:git_sha] || ref
|
||||
info "Fetching info for git ref: #{ref_sha}"
|
||||
url = format(LATEST_URL, ref_sha)
|
||||
commit_json = http_get(url)
|
||||
commit_json = github_api_get(
|
||||
"/repos/#{EMACS_MIRROR_REPO}/commits/#{ref_sha}"
|
||||
)
|
||||
err "Failed to get commit info about: #{ref_sha}" if commit_json.nil?
|
||||
|
||||
commit = JSON.parse(commit_json)
|
||||
@@ -456,8 +468,18 @@ class Build
|
||||
@meta = meta
|
||||
end
|
||||
|
||||
def http_get(url)
|
||||
response = Net::HTTP.get_response(URI.parse(url))
|
||||
def github_api_get(uri)
|
||||
uri = URI.join('https://api.github.com/', uri)
|
||||
|
||||
http = Net::HTTP.new(uri.hostname, uri.port)
|
||||
http.use_ssl = true if uri.scheme == 'https'
|
||||
|
||||
request = Net::HTTP::Get.new(uri)
|
||||
if options[:github_auth] && ENV['GITHUB_TOKEN']
|
||||
request['Authorization'] = "Token #{ENV['GITHUB_TOKEN']}"
|
||||
end
|
||||
|
||||
response = http.request(request)
|
||||
return unless response.code == '200'
|
||||
|
||||
response.body
|
||||
@@ -630,11 +652,35 @@ class LibEmbedder < AbstractEmbedder
|
||||
FileUtils.cd(File.dirname(app)) do
|
||||
copy_libs(binary)
|
||||
copy_extra_libs(extra_libs, binary) if extra_libs.any?
|
||||
if eln_files.any?
|
||||
info "Embedding libraries for #{eln_files.size} *.eln files " \
|
||||
'within Emacs.app'
|
||||
rel_path = Pathname.new(lib_dir).relative_path_from(
|
||||
Pathname.new(File.dirname(binary))
|
||||
).to_s
|
||||
eln_files.each { |f| copy_libs(f, rel_path) }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def eln_files
|
||||
@eln_files ||= Dir[
|
||||
File.join(
|
||||
app, 'Contents', 'Resources', 'native-lisp', '**', '*.eln'
|
||||
),
|
||||
File.join(
|
||||
app, 'Contents', 'MacOS', 'lib', 'emacs', '**',
|
||||
'native-lisp', '**', '*.eln'
|
||||
),
|
||||
File.join(
|
||||
app, 'Contents', 'MacOS', 'libexec', 'emacs', '**',
|
||||
'eln-cache', '**', '*.eln'
|
||||
)
|
||||
]
|
||||
end
|
||||
|
||||
def copy_libs(exe, rel_path = nil)
|
||||
exe_file = File.basename(exe)
|
||||
rel_path ||= Pathname.new(lib_dir).relative_path_from(
|
||||
@@ -858,9 +904,11 @@ if __FILE__ == $PROGRAM_NAME
|
||||
cli_options = {
|
||||
work_dir: File.expand_path(__dir__),
|
||||
native_full_aot: false,
|
||||
native_march: false,
|
||||
parallel: Etc.nprocessors,
|
||||
rsvg: true,
|
||||
xwidgets: true
|
||||
xwidgets: true,
|
||||
github_auth: true
|
||||
}
|
||||
|
||||
begin
|
||||
@@ -898,6 +946,12 @@ if __FILE__ == $PROGRAM_NAME
|
||||
cli_options[:native_comp] = v
|
||||
end
|
||||
|
||||
opts.on('--[no-]native-march',
|
||||
'Enable/disable -march=native CFLAG' \
|
||||
'(default: disabled)') do |v|
|
||||
cli_options[:native_march] = v
|
||||
end
|
||||
|
||||
opts.on('--[no-]native-full-aot',
|
||||
'Enable/disable NATIVE_FULL_AOT / Ahead of Time compilation ' \
|
||||
'(default: disabled)') do |v|
|
||||
@@ -919,6 +973,13 @@ if __FILE__ == $PROGRAM_NAME
|
||||
cli_options[:no_frame_refocus] = true
|
||||
end
|
||||
|
||||
opts.on('--[no-]github-auth',
|
||||
'Make authenticated GitHub API requests if GITHUB_TOKEN ' \
|
||||
'environment variable is set.' \
|
||||
'(default: enabled)') do |v|
|
||||
cli_options[:github_auth] = v
|
||||
end
|
||||
|
||||
opts.on('--work-dir DIR',
|
||||
'Specify a working directory where tarballs, sources, and ' \
|
||||
'builds will be stored and worked with') do |v|
|
||||
|
||||
Reference in New Issue
Block a user