765 Commits

Author SHA1 Message Date
Carlo Cabrera
478e42d536
linux/linkage_checker: remove gcc from undeclared_deps 2022-08-10 19:04:35 +08:00
Carlo Cabrera
fa26b5a06d
linux/super: add unversioned GCC lib directory to RPATH
This adds GCC's runtime lib directory to the RPATH of every build on
Linux (unconditionally!).

This is useful for three things:

1. It fixes versioned GCC linkage for formulae that users build from
   source instead of pouring from a bottle. We currently only handle
   bottle installs. See #13633.

2. It helps minimise the GCC dependency explosion. When a formula has a
   Linux-only GCC dependency, then all its dependents that link with
   some GCC runtime library (typically `libstdc++`) must, before this
   change, also adopt a GCC dependency. This is a consequence of our
   injecting GCC's runtime library directory into RPATH only when a
   formula is built with GCC (this is done through the specs file). We
   can avoid the need to do this by always injecting this path instead.

3. This enables us to automatically install Homebrew GCC whenever the
   user's GCC is too old and the formula may need it. Without this
   change, auto-installing GCC is not that useful because formulae that
   need it may not know to look for our GCC, unless the formula already
   happened to be built with our GCC. With this change, these formulae
   will always be able to find our GCC when it is installed. This is
   particularly useful for when we start building with a version of GCC
   that is much closer to the latest than we currently do.

This approach comes with at least two drawbacks:

1. We will see spurious linkage warnings in CI about an undeclared
   dependency with linkage as soon as Homebrew GCC is installed, because
   formulae will link with our GCC instead of the host's. Users will
   also see a similar complaint if they do `brew linkage`.

2. This leans _very_ heavily on GCC delivering backward compatibility of
   their runtime libraries. If they do not, we could see different
   behaviour across different CI runs for the same formula depending on
   whether Homebrew GCC is installed.

It's worth noting that item 3 in the "useful" list above may rely on
features not yet implement in `brew`.
2022-08-06 13:21:18 +08:00
Carlo Cabrera
2d95b9acda
linux/keg_relocate: remove patchelf exemption
I don't think this is needed anymore. We probably needed this when we
used `patchelf` to do `RPATH` rewriting, but this is no longer the case.
2022-08-06 00:26:48 +08:00
Rylan Polster
d4ddfb88df
Merge pull request #13616 from Rylan12/simulate-macos-on-linux
Move `HOMEBREW_SIMULATE_MACOS_ON_LINUX` handling to `SimulateSystem`
2022-08-05 10:23:13 -04:00
Carlo Cabrera
1c0eac7874
Exclude GCC formulae from RPATH modification for GCC 2022-08-02 19:09:38 +08:00
Carlo Cabrera
532460c098
keg_relocate: fix new GCC lib directory
Also add comment explaining what this line does, along with a TODO
suggesting a replacement once we've shipped the GCC PR.
2022-08-02 13:29:14 +08:00
Carlo Cabrera
53fdb64113
keg_relocate (linux): prepend gcc/lib/current to RPATH when needed
This should help keep bottles that require GCC working when
Homebrew/homebrew-core#106755 is merged.

This only works on freshly-poured bottles. Previously installed bottles
will still break on systems with a host GCC older than GCC 11.
2022-08-02 11:02:47 +08:00
Rylan Polster
ea1f2098ac
Move HOMEBREW_SIMULATE_MACOS_ON_LINUX handling to SimulateSystem 2022-07-28 15:04:25 -04:00
Rylan Polster
91cf9f2ad8
Use SimulateSystem for uses_from_macos deps 2022-07-23 03:09:29 +02:00
Rylan Polster
34a1bc6618
Use SimulateSystem for ignore_missing_libraries 2022-07-23 03:09:29 +02:00
danielnachun
47b6492098
extend/os/linux/extend/ENV/super.rb: add homebrew_extra_include_paths 2022-07-17 17:15:06 -07:00
Bo Anderson
01d1f1ecb6
Fix Keg.bottle_dependencies including unneeded build dependencies 2022-06-30 04:11:15 +01:00
Bo Anderson
2ddce84225
Remove Keg.relocation_formulae
We no longer use any formulae for relocation.
2022-06-30 03:39:29 +01:00
Rylan Polster
b538ce7361
Add OnSystem module to generate on_* methods for formulae and casks 2022-06-24 14:37:50 -04:00
Rylan Polster
cff0122fc4
Remove unnecessary HOMEBREW_INSTALL_FROM_API checks 2022-06-15 16:35:50 -04:00
Bo Anderson
75e76361ac
Preliminary macOS 13 support 2022-06-07 02:39:36 +01:00
Bo Anderson
d857c8416d
os/mac: allow fake El Capitan setup for Portable Ruby builds 2022-05-31 17:56:25 +01:00
Michael Cho
b6905fe0f9
superenv: prioritize dependencies' opt_lib in Linux rpath 2022-05-03 23:14:30 -07:00
Bo Anderson
e6cb1f18e7
Merge pull request #13151 from Bo98/libcrypt-1-deprecation
linkage_checker: deprecate linkage to libcrypt.so.1
2022-04-27 16:00:22 +01:00
EricFromCanada
a4590f394e
search: drop Homebrew cask tap names from list
Results in searching a list of tokens from official Homebrew cask taps and fully-qualified tokens from other taps, matching the list when searching formulae.
2022-04-25 22:22:03 -04:00
Bo Anderson
6db3ee6b0a
extend/os/linux/keg_relocate: restore checking only GCC major versions 2022-04-22 01:41:23 +01:00
Bo Anderson
b2a896eec6
Merge pull request #13065 from xxyzz/skip_build_deps
Skip build deps to avoid downloading bottles
2022-04-22 01:33:44 +01:00
Bo Anderson
5d28c5166b
linkage_checker: deprecate linkage to libcrypt.so.1 2022-04-18 16:42:08 +01:00
Daniel Nachun
23cf66df6a
Merge pull request #13114 from danielnachun/move_codesign_patched_binary
Move codesign_patched_binary to extend/os/mac/keg.rb
2022-04-11 17:05:58 -07:00
Bo Anderson
4de9dd0cfa
ENV/super: always set HOMEBREW_DEVELOPER_DIR regardless of macOS version 2022-04-11 15:13:33 +01:00
danielnachun
4c19d67176
extend/os/mac/keg.rb: move codesign_patched_binary here 2022-04-08 18:09:25 -07:00
Mike McQuaid
b4a9182e3f
Merge pull request #13048 from hyuraku/repair_search_casks
repair cask's fuzzy_search in `search_casks`
2022-04-04 13:40:18 +01:00
EricFromCanada
2fdc70c3bf
desc, search: also search cask descriptions 2022-03-30 11:23:55 -04:00
xxyzz
990b61250a
Get gcc version from API to avoid downloading gcc bottles on Linux 2022-03-30 20:37:19 +08:00
Caleb Xu
d9780bd260
diagnostic: skip linuxbrew-core tap check when installing from API 2022-03-28 14:59:32 -04:00
hyuraku
e486c8710b change the operator 2022-03-28 23:57:21 +09:00
hyuraku
0758631d3d remove if condition 2022-03-28 21:41:40 +09:00
hyuraku
94625d51d6 repair search_casks 2022-03-24 23:02:55 +09:00
danielnachun
a9dd3a76eb
extend/os/mac/keg_relocate: change egrep_args 2022-03-09 13:33:50 -08:00
Daniel Nachun
76e4f6bc79
Merge pull request #12890 from danielnachun/add_binary_grep
Add binary grep method to keg_relocate
2022-02-28 11:27:09 -08:00
danielnachun
94e22d49fa
os/mac/keg_relocate.rb: override grep args 2022-02-28 08:59:33 -08:00
Michka Popoff
bc83c39337
debian7: force usage of brewed ca-certificates 2022-02-22 13:26:59 +01:00
Mike McQuaid
a37f24f439
Revert "Binary patching of build prefixes" 2022-02-14 10:55:08 +00:00
danielnachun
ebea3175f1
extend/os/mac/keg_relocate.rb: override egrep_args 2022-02-10 22:48:45 -08:00
Carlo Cabrera
568bc94f3e
os/mac/keg: use MachOFile#delete_rpath instead of MachO::Tools
This will allow us to avoid keeping track of the number of `RPATH`s
while trying to delete duplicates.

See discussion at #12745.
2022-01-19 00:34:39 +08:00
Carlo Cabrera
ffb3c9cff9
Fuse the rpath loops.
We previously looped twice over the `rpath`s, but we actually only need
to do that once.
2022-01-18 19:29:58 +08:00
Carlo Cabrera
57fae524de
extend/os/mac/keg_relocate: fix duplicate RPATH handling
ruby-macho chokes on changing duplicate RPATHs, so we need to strip the
duplicates before trying to relocate them.

This continues #11405. We need this to unblock
Homebrew/homebrew-core#91224.

While we're here, let's get rid of `HOMEBREW_RELOCATE_RPATHS`. We've
been using it for nearly a year with essentially no problems (barring
`pdnsrec`), so I think it is safe to do unconditionally.
2022-01-18 15:21:05 +08:00
Carlo Cabrera
e4e3b8ad2d
Revert "extend/os/mac/keg_relocate: fix relocation of duplicate RPATHs"
Upon reflection, I realised that this is probably a bug in `ruby-macho`,
and should be fixed there instead.

Needs https://github.com/Homebrew/ruby-macho/pull/362.

This reverts commit e8b5eb7e42c925b7cc10c78a029b8c70e4d7965b.
2022-01-18 13:07:44 +08:00
Mike McQuaid
3a709d36b2
Start process to remove Enumerable from Formula and Cask::Cask.
This is the first step to address
https://github.com/Homebrew/brew/issues/11292.
2022-01-03 14:59:10 +00:00
Mike McQuaid
cf0468c88f
Merge pull request #12661 from sjackman/sj/relocate_dynamic_linkage
Patch neither glibc nor glibc@* using patchelf
2022-01-03 13:08:42 +00:00
Shaun Jackman
06bf91fe0b
Use formula_optionally_versioned_regex
Co-authored-by: Carlo Cabrera <30379873+carlocab@users.noreply.github.com>
2022-01-02 17:30:34 -08:00
Shaun Jackman
2ad3f0a089 Patch neither glibc nor glibc@* using patchelf
Patching the dynamic linker of glibc breaks it.
2022-01-02 13:44:13 -08:00
Shaun Jackman
4e68a7b5bc Allow linkage to libnss_files.so.2 on Linux
libnss_nis.so.2 in glibc@2.13 has linkage to libnss_files.so.2.
2021-12-31 16:17:36 -08:00
FX Coudert
56bc22c68a
Blizzard and Avalanche appear to be ARMv8.5-A 2021-12-22 16:31:30 +01:00
FX Coudert
405aeac2d8
Add latest CPUs 2021-12-18 22:39:57 +01:00