mirror of
https://github.com/jimeh/build-emacs-for-macos.git
synced 2026-02-19 13:06:38 +00:00
Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
f3a289b11c
|
|||
|
9019e73d60
|
|||
|
28930381a8
|
|||
|
df25e54ef7
|
|||
|
6d21d1bef4
|
|||
|
99aa76b398
|
|||
|
b60ca528f8
|
|||
|
23b8236e0a
|
23
CHANGELOG.md
23
CHANGELOG.md
@@ -2,6 +2,29 @@
|
||||
|
||||
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.6.5](https://github.com/jimeh/build-emacs-for-macos/compare/v0.6.4...v0.6.5) (2021-07-01)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **native_comp:** improve handling of *.eln files in .app bundle ([9019e73](https://github.com/jimeh/build-emacs-for-macos/commit/9019e73d606f0379f988f46d6008770f8f3f7a51))
|
||||
|
||||
### [0.6.4](https://github.com/jimeh/build-emacs-for-macos/compare/v0.6.3...v0.6.4) (2021-06-30)
|
||||
|
||||
### [0.6.3](https://github.com/jimeh/build-emacs-for-macos/compare/v0.6.2...v0.6.3) (2021-06-29)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **patches:** correctly set ref when loading a build plan YAML ([99aa76b](https://github.com/jimeh/build-emacs-for-macos/commit/99aa76b3985195c310a20bafa19a8c7a4c8558fd))
|
||||
|
||||
### [0.6.2](https://github.com/jimeh/build-emacs-for-macos/compare/v0.6.1...v0.6.2) (2021-06-29)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **native_comp:** patch Emacs.pdmp for customized native-lisp paths ([23b8236](https://github.com/jimeh/build-emacs-for-macos/commit/23b8236e0a66fb09810e8422bedf02f7192a53e4))
|
||||
|
||||
### [0.6.1](https://github.com/jimeh/build-emacs-for-macos/compare/v0.6.0...v0.6.1) (2021-06-28)
|
||||
|
||||
|
||||
|
||||
@@ -117,9 +117,10 @@ class Build
|
||||
def load_plan(filename)
|
||||
plan = YAML.safe_load(File.read(filename), [:Time])
|
||||
|
||||
@ref = plan.dig('source', 'ref')
|
||||
@meta = {
|
||||
sha: plan.dig('source', 'commit', 'sha'),
|
||||
ref: plan.dig('source', 'ref'),
|
||||
ref: @ref,
|
||||
date: plan.dig('source', 'commit', 'date')
|
||||
}
|
||||
|
||||
@@ -411,20 +412,17 @@ class Build
|
||||
contents_dir = File.join(app, 'Contents')
|
||||
|
||||
FileUtils.cd(contents_dir) do
|
||||
# Skip creation of symlinks if *.eln files are located under
|
||||
# Resources/native-lisp. Emacs is capable of finding lisp sources and
|
||||
# *.eln cache files without symlinks.
|
||||
return if Dir['Resources/native-lisp/**/*.eln'].any?
|
||||
|
||||
info 'Creating symlinks within Emacs.app needed for native-comp'
|
||||
|
||||
FileUtils.ln_s('Resources/lisp', 'lisp') unless File.exist?('lisp')
|
||||
|
||||
source = Dir['MacOS/libexec/emacs/**/eln-cache',
|
||||
'MacOS/lib/emacs/**/native-lisp'].first
|
||||
|
||||
if source.nil?
|
||||
err 'Failed to find native-lisp cache directory for symlink creation.'
|
||||
# Skip creation of symlinks if *.eln files are not located in a location
|
||||
# known to be used by builds which need symlinks and other tweaks.
|
||||
return if source.nil?
|
||||
|
||||
info 'Creating symlinks within Emacs.app needed for native-comp'
|
||||
|
||||
if !File.exist?('lisp') && File.exist?('Resources/lisp')
|
||||
FileUtils.ln_s('Resources/lisp', 'lisp')
|
||||
end
|
||||
|
||||
# Check for folder name containing two dots (.), as this causes Apple's
|
||||
@@ -434,10 +432,9 @@ class Build
|
||||
# The workaround for now is to rename the folder replacing the dots with
|
||||
# hyphens (-), and create the native-lisp symlink pointing to the new
|
||||
# location.
|
||||
if source.match(%r{/.+\..+\..+/})
|
||||
# Dig deeper into native-lisp directory
|
||||
eln_dir = File.dirname(Dir[File.join(source, '**', '*.eln')].first)
|
||||
eln_dir = File.dirname(Dir[File.join(source, '**', '*.eln')].first)
|
||||
|
||||
if eln_dir.match(%r{/.+\..+\..+/})
|
||||
base = File.basename(eln_dir)
|
||||
parent = File.dirname(eln_dir)
|
||||
|
||||
@@ -454,6 +451,13 @@ class Build
|
||||
parent = File.dirname(parent)
|
||||
end
|
||||
|
||||
eln_parts = eln_dir.match(
|
||||
%r{/(\d+\.\d+\.\d+)/native-lisp/(\d+\.\d+\.\d+-\w+)(?:/.+)?$}i
|
||||
)
|
||||
if eln_parts
|
||||
patch_dump_native_lisp_paths(app, eln_parts[1], eln_parts[2])
|
||||
end
|
||||
|
||||
# Find native-lisp directory again after it has been renamed.
|
||||
source = Dir['MacOS/libexec/emacs/**/eln-cache',
|
||||
'MacOS/lib/emacs/**/native-lisp'].first
|
||||
@@ -468,6 +472,29 @@ class Build
|
||||
end
|
||||
end
|
||||
|
||||
def patch_dump_native_lisp_paths(app, emacs_version, eln_version)
|
||||
sanitized_emacs_version = emacs_version.gsub('.', '-')
|
||||
sanitized_eln_version = eln_version.gsub('.', '-')
|
||||
|
||||
contents_dir = File.join(app, 'Contents')
|
||||
FileUtils.cd(contents_dir) do
|
||||
filename = Dir['MacOS/Emacs.pdmp', 'MacOS/libexec/Emacs.pdmp'].first
|
||||
err "no Emacs.pdmp file found in #{app}" unless filename
|
||||
info 'patching Emacs.pdmp to point at new native-lisp paths'
|
||||
|
||||
content = File.read(filename, mode: 'rb').gsub(
|
||||
"lib/emacs/#{emacs_version}/native-lisp/#{eln_version}/",
|
||||
"lib/emacs/#{sanitized_emacs_version}/" \
|
||||
"native-lisp/#{sanitized_eln_version}/"
|
||||
).gsub(
|
||||
"../native-lisp/#{eln_version}/",
|
||||
"../native-lisp/#{sanitized_eln_version}/"
|
||||
)
|
||||
|
||||
File.open(filename, 'w') { |f| f.write(content) }
|
||||
end
|
||||
end
|
||||
|
||||
def add_cli_helper(app)
|
||||
source = File.join(__dir__, 'helper', 'emacs-cli.bash')
|
||||
target = File.join(app, 'Contents', 'MacOS', 'bin', 'emacs')
|
||||
|
||||
@@ -117,42 +117,24 @@ func signCLIHelper(ctx context.Context, appBundle string, opts *Options) error {
|
||||
}
|
||||
|
||||
// elnFiles finds all native-compilation *.eln files within a Emacs.app bundle,
|
||||
// based on expected paths they might be stored in.
|
||||
// excluding any *.eln which should be automatically located by codesign when
|
||||
// signing the Emacs.app bundle itself with the --deep flag. Essentially this
|
||||
// only returns *.eln files which must be individually signed before signing the
|
||||
// app bundle itself.
|
||||
func elnFiles(emacsApp string) ([]string, error) {
|
||||
dirs := []string{
|
||||
// Current *.eln location.
|
||||
filepath.Join(emacsApp, "Contents", "Resources", "native-lisp"),
|
||||
// Legacy *.eln location.
|
||||
filepath.Join(emacsApp, "Contents", "MacOS", "lib", "emacs"),
|
||||
}
|
||||
|
||||
var files []string
|
||||
walkDirFunc := func(path string, _d fs.DirEntry, _err error) error {
|
||||
if strings.HasSuffix(path, ".eln") {
|
||||
walkDirFunc := func(path string, d fs.DirEntry, _err error) error {
|
||||
if d.Type().IsRegular() && strings.HasSuffix(path, ".eln") &&
|
||||
!strings.Contains(path, ".app/Contents/Frameworks/") {
|
||||
files = append(files, path)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
for _, dir := range dirs {
|
||||
fi, err := os.Stat(dir)
|
||||
if err != nil {
|
||||
if os.IsNotExist(err) {
|
||||
continue
|
||||
}
|
||||
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if !fi.IsDir() {
|
||||
continue
|
||||
}
|
||||
|
||||
err = filepath.WalkDir(dir, walkDirFunc)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
err := filepath.WalkDir(filepath.Join(emacsApp, "Contents"), walkDirFunc)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return files, nil
|
||||
|
||||
Reference in New Issue
Block a user