mirror of
https://github.com/jimeh/build-emacs-for-macos.git
synced 2026-02-19 08:26:39 +00:00
Merge pull request #61 from jimeh/refactor-file-operations
This commit is contained in:
@@ -26,7 +26,7 @@ module Output
|
||||
if newline
|
||||
warn "==> #{msg}"
|
||||
else
|
||||
STDERR.print "==> #{msg}"
|
||||
$stderr.print "==> #{msg}"
|
||||
end
|
||||
end
|
||||
|
||||
@@ -35,6 +35,19 @@ module Output
|
||||
end
|
||||
end
|
||||
|
||||
module System
|
||||
include Output
|
||||
|
||||
def run_cmd(*args)
|
||||
out("CMD: #{args.join(' ')}")
|
||||
cmd(*args)
|
||||
end
|
||||
|
||||
def cmd(*args)
|
||||
system(*args) || err("Exit code: #{$CHILD_STATUS.exitstatus}")
|
||||
end
|
||||
end
|
||||
|
||||
class OS
|
||||
def self.version
|
||||
@version ||= OSVersion.new
|
||||
@@ -71,6 +84,7 @@ end
|
||||
|
||||
class Build
|
||||
include Output
|
||||
include System
|
||||
|
||||
EMACS_MIRROR_REPO = 'emacs-mirror/emacs'
|
||||
DOWNLOAD_URL = 'https://github.com/emacs-mirror/emacs/tarball/%s'
|
||||
@@ -400,13 +414,13 @@ class Build
|
||||
info "Copying \"#{app_name}\" to: #{target_dir}"
|
||||
|
||||
FileUtils.mkdir_p(target_dir)
|
||||
FileUtils.cp_r(app, target_dir)
|
||||
cmd('cp', '-a', app, target_dir)
|
||||
|
||||
options[:dist_include]&.each do |filename|
|
||||
src = File.join(source_dir, filename)
|
||||
if File.exist?(src)
|
||||
info "Copying \"#{filename}\" to: #{target_dir}"
|
||||
FileUtils.cp_r(src, target_dir)
|
||||
cmd('cp', '-pRL', src, target_dir)
|
||||
else
|
||||
info "Warning: #{filename} does not exist in #{source_dir}"
|
||||
end
|
||||
@@ -431,7 +445,7 @@ class Build
|
||||
info 'Creating symlinks within Emacs.app needed for native-comp'
|
||||
|
||||
if !File.exist?('lisp') && File.exist?('Resources/lisp')
|
||||
FileUtils.ln_s('Resources/lisp', 'lisp')
|
||||
run_cmd('ln', '-s', 'Resources/lisp', 'lisp')
|
||||
end
|
||||
|
||||
# Check for folder name containing two dots (.), as this causes Apple's
|
||||
@@ -453,7 +467,7 @@ class Build
|
||||
new_name = File.join(parent, base.gsub(/\.(.+)\./, '-\\1-'))
|
||||
|
||||
info "Renaming: #{old_name} --> #{new_name}"
|
||||
FileUtils.mv(old_name, new_name)
|
||||
cmd('mv', old_name, new_name)
|
||||
end
|
||||
|
||||
base = File.basename(parent)
|
||||
@@ -477,7 +491,7 @@ class Build
|
||||
end
|
||||
|
||||
target = File.basename(source)
|
||||
FileUtils.ln_s(source, target) unless File.exist?(target)
|
||||
run_cmd('ln', '-s', source, target) unless File.exist?(target)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -600,11 +614,6 @@ class Build
|
||||
response.body
|
||||
end
|
||||
|
||||
def run_cmd(*args)
|
||||
out "CMD: #{args.join(' ')}"
|
||||
system(*args) || err("Exit code: #{$CHILD_STATUS.exitstatus}")
|
||||
end
|
||||
|
||||
def effective_version
|
||||
@effective_version ||= begin
|
||||
case ref
|
||||
@@ -750,6 +759,7 @@ end
|
||||
|
||||
class AbstractEmbedder
|
||||
include Output
|
||||
include System
|
||||
|
||||
attr_reader :app
|
||||
|
||||
@@ -786,11 +796,11 @@ class CLIHelperEmbedder < AbstractEmbedder
|
||||
target = File.join(bin_dir, 'emacs')
|
||||
dir = File.dirname(target)
|
||||
|
||||
info "Adding \"emacs\" CLI helper to #{dir}"
|
||||
info 'Adding "emacs" CLI helper to Emacs.app'
|
||||
|
||||
FileUtils.mkdir_p(dir)
|
||||
FileUtils.cp(source, target)
|
||||
FileUtils.chmod('+w', target)
|
||||
run_cmd('cp', '-pRL', source, target)
|
||||
run_cmd('chmod', '+w', target)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -816,7 +826,7 @@ class CSourcesEmbedder < AbstractEmbedder
|
||||
rel = f[src_dir.size + 1..-1]
|
||||
target = File.join(resources_dir, 'src', rel)
|
||||
FileUtils.mkdir_p(File.dirname(target))
|
||||
FileUtils.cp(f, target)
|
||||
cmd('cp', '-pRL', f, target)
|
||||
end
|
||||
|
||||
return if File.exist?(site_start_el_file) &&
|
||||
@@ -906,7 +916,7 @@ class LibEmbedder < AbstractEmbedder
|
||||
next if match[2] == exe_file || File.exist?(File.join(lib_dir, match[2]))
|
||||
|
||||
FileUtils.mkdir_p(lib_dir)
|
||||
FileUtils.cp(match[1], lib_dir)
|
||||
cmd('cp', '-pRL', match[1], lib_dir)
|
||||
copy_libs(File.join(lib_dir, match[2].to_s), rel_path)
|
||||
end
|
||||
end
|
||||
@@ -921,7 +931,7 @@ class LibEmbedder < AbstractEmbedder
|
||||
target = "#{lib_dir}/#{lib_file}"
|
||||
unless File.exist?(target)
|
||||
FileUtils.mkdir_p(lib_dir)
|
||||
FileUtils.cp(lib, lib_dir)
|
||||
cmd('cp', '-pRL', lib, lib_dir)
|
||||
end
|
||||
|
||||
while_writable(target) do
|
||||
@@ -938,7 +948,7 @@ class LibEmbedder < AbstractEmbedder
|
||||
File.chmod(0o775, file)
|
||||
yield
|
||||
ensure
|
||||
File.chmod(mode, file)
|
||||
File.chmod(mode, file) if File.exist?(file)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -963,11 +973,11 @@ class GccLibEmbedder < AbstractEmbedder
|
||||
end
|
||||
|
||||
FileUtils.mkdir_p(File.dirname(target_dir))
|
||||
FileUtils.cp_r(source_dir, target_dir)
|
||||
run_cmd('cp', '-pRL', source_dir, target_dir)
|
||||
FileUtils.rm(Dir[File.join(target_dir, '**', '.DS_Store')], force: true)
|
||||
FileUtils.chmod_R('u+w', target_dir)
|
||||
run_cmd('chmod', '-R', 'u+w', target_dir)
|
||||
if source_darwin_dir != target_darwin_dir
|
||||
FileUtils.mv(source_darwin_dir, target_darwin_dir)
|
||||
run_cmd('mv', source_darwin_dir, target_darwin_dir)
|
||||
end
|
||||
|
||||
env_setup = ERB.new(NATIVE_COMP_ENV_VAR_TPL).result(gcc_info.get_binding)
|
||||
|
||||
Reference in New Issue
Block a user