Skip to content

Commit 2318855

Browse files
committed
feat(package): produce and include configure output log
Useful for debugging build issues, and for people who simply want more details about the build environment and process for Emacs.
1 parent 0d0e1e6 commit 2318855

File tree

2 files changed

+51
-6
lines changed

2 files changed

+51
-6
lines changed

build-emacs-for-macos

Lines changed: 39 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ require 'fileutils'
99
require 'json'
1010
require 'logger'
1111
require 'net/http'
12+
require 'open3'
1213
require 'optparse'
1314
require 'pathname'
1415
require 'time'
@@ -81,13 +82,42 @@ end
8182
module System
8283
include Output
8384

84-
def run_cmd(*args)
85+
def run_cmd(*args, output_file: nil)
8586
debug "executing: #{args.join(' ')}"
86-
cmd(*args)
87+
cmd(*args, output_file: output_file)
8788
end
8889

89-
def cmd(*args)
90-
system(*args) || fatal("Exit code: #{$CHILD_STATUS.exitstatus}")
90+
def cmd(*args, output_file: nil)
91+
if output_file.nil?
92+
return system(*args) || fatal("Exit code: #{$CHILD_STATUS.exitstatus}")
93+
end
94+
95+
# Handle output to both terminal and file
96+
File.open(output_file, 'w') do |file|
97+
Open3.popen3(*args) do |_stdin, stdout, stderr, wait_thread|
98+
stdout_thread = Thread.new do
99+
while (line = stdout.gets)
100+
puts line
101+
file.puts line
102+
file.flush
103+
end
104+
end
105+
106+
stderr_thread = Thread.new do
107+
while (line = stderr.gets)
108+
$stderr.puts line # rubocop:disable Style/StderrPuts
109+
file.puts line
110+
file.flush
111+
end
112+
end
113+
114+
[stdout_thread, stderr_thread, wait_thread].map(&:join)
115+
status = wait_thread.value
116+
return true if status.success?
117+
118+
fatal("Exit code: #{status.exitstatus}")
119+
end
120+
end
91121
end
92122
end
93123

@@ -628,7 +658,10 @@ class Build
628658
configure_flags << '--without-rsvg' if options[:rsvg] == false
629659
configure_flags << '--without-dbus' if options[:dbus] == false
630660

631-
run_cmd './configure', *configure_flags.compact
661+
run_cmd(
662+
'./configure', *configure_flags.compact,
663+
output_file: 'configure_output.txt'
664+
)
632665

633666
# Disable aligned_alloc on Mojave and below. See issue:
634667
# https://github.com/daviderestivo/homebrew-emacs-head/issues/15
@@ -1745,7 +1778,7 @@ if __FILE__ == $PROGRAM_NAME
17451778
fd_setsize: 10_000,
17461779
github_src_repo: nil,
17471780
github_auth: true,
1748-
dist_include: ['COPYING'],
1781+
dist_include: ['COPYING', 'configure_output.txt'],
17491782
self_sign: true,
17501783
archive: true,
17511784
archive_keep: false,

pkg/dmg/dmg.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,18 @@ func Create(ctx context.Context, opts *Options) (string, error) {
110110
})
111111
}
112112

113+
configureOutputFile := filepath.Join(sourceDir, "configure_output.txt")
114+
fi, err = os.Stat(configureOutputFile)
115+
if err != nil && !os.IsNotExist(err) {
116+
return "", err
117+
} else if err == nil && fi.Mode().IsRegular() {
118+
settings.Files = append(settings.Files, &dmgbuild.File{
119+
Path: configureOutputFile,
120+
PosX: 340,
121+
PosY: 756,
122+
})
123+
}
124+
113125
if opts.Output != nil {
114126
settings.Stdout = opts.Output
115127
settings.Stderr = opts.Output

0 commit comments

Comments
 (0)