diff --git a/Library/Homebrew/build.rb b/Library/Homebrew/build.rb index b432fdca82..5ee369389a 100644 --- a/Library/Homebrew/build.rb +++ b/Library/Homebrew/build.rb @@ -127,9 +127,10 @@ class Build formula.update_head_version formula.brew( - fetch: false, - keep_tmp: args.keep_tmp?, - interactive: args.interactive?, + fetch: false, + keep_tmp: args.keep_tmp?, + debug_symbols: args.debug_symbols?, + interactive: args.interactive?, ) do with_env( # For head builds, HOMEBREW_FORMULA_PREFIX should include the commit, diff --git a/Library/Homebrew/cli/args.rbi b/Library/Homebrew/cli/args.rbi index 32b1cd8e6e..af6802f6ac 100644 --- a/Library/Homebrew/cli/args.rbi +++ b/Library/Homebrew/cli/args.rbi @@ -87,6 +87,9 @@ module Homebrew sig { returns(T::Boolean) } def keep_tmp?; end + sig { returns(T::Boolean) } + def debug_symbols?; end + sig { returns(T::Boolean) } def overwrite?; end diff --git a/Library/Homebrew/cmd/install.rb b/Library/Homebrew/cmd/install.rb index cff794979e..6848e982b5 100644 --- a/Library/Homebrew/cmd/install.rb +++ b/Library/Homebrew/cmd/install.rb @@ -91,6 +91,11 @@ module Homebrew [:switch, "--keep-tmp", { description: "Retain the temporary files created during installation.", }], + [:switch, "--debug-symbols", { + depends_on: "--build-from-source", + description: "Generates debugging symbols during build. Source will be in temporary directory " \ + "which is retained. (see --keep-tmp)", + }], [:switch, "--build-bottle", { description: "Prepare the formula for eventual bottling during installation, skipping any " \ "post-install steps.", @@ -232,6 +237,7 @@ module Homebrew git: args.git?, interactive: args.interactive?, keep_tmp: args.keep_tmp?, + debug_symbols: args.debug_symbols?, force: args.force?, overwrite: args.overwrite?, debug: args.debug?, @@ -247,6 +253,7 @@ module Homebrew build_from_source_formulae: args.build_from_source_formulae, interactive: args.interactive?, keep_tmp: args.keep_tmp?, + debug_symbols: args.debug_symbols?, force: args.force?, debug: args.debug?, quiet: args.quiet?, diff --git a/Library/Homebrew/cmd/reinstall.rb b/Library/Homebrew/cmd/reinstall.rb index bc6bca5053..bb8b4844cc 100644 --- a/Library/Homebrew/cmd/reinstall.rb +++ b/Library/Homebrew/cmd/reinstall.rb @@ -57,6 +57,11 @@ module Homebrew [:switch, "--keep-tmp", { description: "Retain the temporary files created during installation.", }], + [:switch, "--debug-symbols", { + depends_on: "--build-from-source", + description: "Generates debugging symbols during build. Source will be in temporary directory " \ + "which is retained. (see --keep-tmp)", + }], [:switch, "--display-times", { env: :display_install_times, description: "Print install times for each formula at the end of the run.", @@ -115,6 +120,7 @@ module Homebrew build_from_source_formulae: args.build_from_source_formulae, interactive: args.interactive?, keep_tmp: args.keep_tmp?, + debug_symbols: args.debug_symbols?, force: args.force?, debug: args.debug?, quiet: args.quiet?, @@ -132,6 +138,7 @@ module Homebrew build_from_source_formulae: args.build_from_source_formulae, interactive: args.interactive?, keep_tmp: args.keep_tmp?, + debug_symbols: args.debug_symbols?, force: args.force?, debug: args.debug?, quiet: args.quiet?, diff --git a/Library/Homebrew/cmd/upgrade.rb b/Library/Homebrew/cmd/upgrade.rb index ec7520a7c3..3496c7274b 100644 --- a/Library/Homebrew/cmd/upgrade.rb +++ b/Library/Homebrew/cmd/upgrade.rb @@ -68,6 +68,11 @@ module Homebrew [:switch, "--keep-tmp", { description: "Retain the temporary files created during installation.", }], + [:switch, "--debug-symbols", { + depends_on: "--build-from-source", + description: "Generates debugging symbols during build. Source will be in temporary directory " \ + "which is retained. (see --keep-tmp)", + }], [:switch, "--display-times", { env: :display_install_times, description: "Print install times for each package at the end of the run.", @@ -185,6 +190,7 @@ module Homebrew build_from_source_formulae: args.build_from_source_formulae, interactive: args.interactive?, keep_tmp: args.keep_tmp?, + debug_symbols: args.debug_symbols?, force: args.force?, debug: args.debug?, quiet: args.quiet?, @@ -200,6 +206,7 @@ module Homebrew build_from_source_formulae: args.build_from_source_formulae, interactive: args.interactive?, keep_tmp: args.keep_tmp?, + debug_symbols: args.debug_symbols?, force: args.force?, debug: args.debug?, quiet: args.quiet?, diff --git a/Library/Homebrew/extend/ENV/shared.rb b/Library/Homebrew/extend/ENV/shared.rb index 381ceccfdb..bccd15aaf5 100644 --- a/Library/Homebrew/extend/ENV/shared.rb +++ b/Library/Homebrew/extend/ENV/shared.rb @@ -315,6 +315,9 @@ module SharedEnvExtension sig { void } def permit_arch_flags; end + sig { void } + def debug_symbols; end + # @private sig { params(cc: T.any(Symbol, String)).returns(T::Boolean) } def compiler_any_clang?(cc = compiler) diff --git a/Library/Homebrew/extend/os/mac/keg.rb b/Library/Homebrew/extend/os/mac/keg.rb index a6c03b82d7..a1fde91b14 100644 --- a/Library/Homebrew/extend/os/mac/keg.rb +++ b/Library/Homebrew/extend/os/mac/keg.rb @@ -67,7 +67,7 @@ class Keg binary_executable_or_library_files.each do |file| odebug "Extracting symbols #{file}" - result = system_command("dsymutil", args: [file]) + result = system_command("dsymutil", args: [file], print_stderr: false) next if result.success? # If it fails again, error out diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb index 17488e0ed1..87084de97d 100644 --- a/Library/Homebrew/formula.rb +++ b/Library/Homebrew/formula.rb @@ -1273,11 +1273,11 @@ class Formula # Yields |self,staging| with current working directory set to the uncompressed tarball # where staging is a {Mktemp} staging context. # @private - def brew(fetch: true, keep_tmp: false, interactive: false) + def brew(fetch: true, keep_tmp: false, debug_symbols: false, interactive: false) @prefix_returns_versioned_prefix = true active_spec.fetch if fetch stage(interactive: interactive) do |staging| - staging.retain! if keep_tmp + staging.retain! if keep_tmp || debug_symbols prepare_patches fetch_patches if fetch diff --git a/Library/Homebrew/formula_installer.rb b/Library/Homebrew/formula_installer.rb index 611ec46643..52e1e9881c 100644 --- a/Library/Homebrew/formula_installer.rb +++ b/Library/Homebrew/formula_installer.rb @@ -59,6 +59,7 @@ class FormulaInstaller git: false, interactive: false, keep_tmp: false, + debug_symbols: false, cc: nil, options: Options.new, force: false, @@ -72,8 +73,7 @@ class FormulaInstaller @force = force @overwrite = overwrite @keep_tmp = keep_tmp - # Just for this proof of concept - @debug_symbols = keep_tmp + @debug_symbols = debug_symbols @link_keg = !formula.keg_only? || link_keg @show_header = show_header @ignore_deps = ignore_deps @@ -691,6 +691,7 @@ class FormulaInstaller include_test_formulae: @include_test_formulae, build_from_source_formulae: @build_from_source_formulae, keep_tmp: keep_tmp?, + debug_symbols: debug_symbols?, force: force?, debug: debug?, quiet: quiet?, @@ -744,6 +745,7 @@ class FormulaInstaller include_test_formulae: @include_test_formulae, build_from_source_formulae: @build_from_source_formulae, keep_tmp: keep_tmp?, + debug_symbols: debug_symbols?, force: force?, debug: debug?, quiet: quiet?, @@ -877,6 +879,9 @@ class FormulaInstaller args << "--debug" if debug? args << "--cc=#{@cc}" if @cc args << "--keep-tmp" if keep_tmp? + args << "--debug-symbols" if debug_symbols? + # Avoids dependecy error on flag + args << "--build-from-source" if build_from_source? && debug_symbols? if @env.present? args << "--env=#{@env}" diff --git a/Library/Homebrew/install.rb b/Library/Homebrew/install.rb index 9ab565d431..3d838dac3e 100644 --- a/Library/Homebrew/install.rb +++ b/Library/Homebrew/install.rb @@ -269,6 +269,7 @@ module Homebrew git: false, interactive: false, keep_tmp: false, + debug_symbols: false, force: false, overwrite: false, debug: false, @@ -293,6 +294,7 @@ module Homebrew git: git, interactive: interactive, keep_tmp: keep_tmp, + debug_symbols: debug_symbols, force: force, overwrite: overwrite, debug: debug, diff --git a/Library/Homebrew/reinstall.rb b/Library/Homebrew/reinstall.rb index 2c9c0ee430..f260d041b7 100644 --- a/Library/Homebrew/reinstall.rb +++ b/Library/Homebrew/reinstall.rb @@ -16,6 +16,7 @@ module Homebrew build_from_source_formulae: [], interactive: false, keep_tmp: false, + debug_symbols: false, force: false, debug: false, quiet: false, @@ -48,6 +49,7 @@ module Homebrew git: git, interactive: interactive, keep_tmp: keep_tmp, + debug_symbols: debug_symbols, force: force, debug: debug, quiet: quiet, diff --git a/Library/Homebrew/upgrade.rb b/Library/Homebrew/upgrade.rb index c9f0acc576..54e3223c18 100644 --- a/Library/Homebrew/upgrade.rb +++ b/Library/Homebrew/upgrade.rb @@ -24,6 +24,7 @@ module Homebrew build_from_source_formulae: [], interactive: false, keep_tmp: false, + debug_symbols: false, force: false, debug: false, quiet: false, @@ -61,6 +62,7 @@ module Homebrew build_from_source_formulae: build_from_source_formulae, interactive: interactive, keep_tmp: keep_tmp, + debug_symbols: debug_symbols, force: force, debug: debug, quiet: quiet, @@ -128,6 +130,7 @@ module Homebrew build_from_source_formulae: [], interactive: false, keep_tmp: false, + debug_symbols: false, force: false, debug: false, quiet: false, @@ -161,6 +164,7 @@ module Homebrew build_from_source_formulae: build_from_source_formulae, interactive: interactive, keep_tmp: keep_tmp, + debug_symbols: debug_symbols, force: force, debug: debug, quiet: quiet, @@ -254,6 +258,7 @@ module Homebrew build_from_source_formulae: [], interactive: false, keep_tmp: false, + debug_symbols: false, force: false, debug: false, quiet: false, @@ -339,6 +344,7 @@ module Homebrew build_from_source_formulae: build_from_source_formulae, interactive: interactive, keep_tmp: keep_tmp, + debug_symbols: debug_symbols, force: force, debug: debug, quiet: quiet, @@ -407,6 +413,7 @@ module Homebrew build_from_source_formulae: build_from_source_formulae + [formula.full_name], interactive: interactive, keep_tmp: keep_tmp, + debug_symbols: debug_symbols, force: force, debug: debug, quiet: quiet,