72 Commits

Author SHA1 Message Date
Jack Nagel
169aa1ac39 Use correct basename when updating dylib IDs 2014-04-13 14:57:11 -05:00
Jack Nagel
dd9b253b44 Always return a string from dylib_id_for 2014-04-13 14:57:11 -05:00
Jack Nagel
f7f200591c Fall back to open/write when atomic_write fails
Fixes Homebrew/homebrew#28190.
2014-04-06 00:28:15 -05:00
Jack Nagel
be46fc3a48 Relocate files in share/pkgconfig too 2014-03-29 22:18:48 -05:00
Jack Nagel
3ddd7b8ebb Calling find on nonexistent directories only works on 1.8 2014-03-29 22:18:48 -05:00
Jack Nagel
685bf070d1 Fix class definition so we can require files first 2014-03-27 22:34:22 -05:00
Jack Nagel
b25156ca4a Only write files if we actually made a change 2014-03-27 21:42:09 -05:00
Jack Nagel
cb9ee747e0 Fix Keg#find so we don't have to deal with it everywhere
lol inheritance
2014-03-27 17:06:05 -05:00
Jack Nagel
ad7911bb75 Replace files atomically when relocating, take two 2014-03-27 14:23:49 -05:00
Jack Nagel
0c99e64851 Revert "Replace files atomically when relocating"
There are some weird interactions with ensure_writable and atomic_write
that need to be sorted out.

Fixes Homebrew/homebrew#27917.

This reverts commit 41c21e6ea5647823a9e589a56f0494b622e26fb2.
2014-03-27 13:45:37 -05:00
Jack Nagel
91d31ae1f4 Replace files atomically when relocating 2014-03-26 16:07:49 -05:00
Jack Nagel
da0df8eabe Expose some keg methods 2014-03-23 16:01:44 -05:00
Mike McQuaid
3f1cd069c4 keg_fix_install_names: gsub shebangd bottle files.
Closes Homebrew/homebrew#27126.

Signed-off-by: Mike McQuaid <mike@mikemcquaid.com>
2014-03-03 12:31:25 +00:00
Misty De Meo
edf474cb63 C++ stdlib check: don't check executables for deps
This avoids some possible false positives, as happens with, e.g., qt4.
2014-02-02 11:04:30 -08:00
Mike McQuaid
30503cebaa Revert "detect_cxx_stdlibs: ignore executables."
This reverts commit 1cd636d368c66d1346adc1c38633c8f204c759f4.
2014-01-08 07:33:32 +00:00
Mike McQuaid
44d23c8d40 detect_cxx_stdlibs: ignore executables. 2014-01-07 08:49:37 +00:00
Jack Nagel
e29cbc5a48 Drop unnecessary Pathname creation 2013-12-27 16:09:31 -06:00
Jack Nagel
a6602740f8 bottle: extract method for enumerating files that match a string
This brings a (small) performance improvement as we yield the files as
they are output by fgrep rather than waiting until fgrep is done to do
any work.
2013-12-17 21:13:23 -06:00
Jack Nagel
ce19fa2223 Unify install name parsing 2013-12-14 09:35:58 -06:00
Jack Nagel
de20814162 keg: use start_with? instead of regexp match 2013-12-14 09:35:58 -06:00
Jack Nagel
c6c7b9b165 Extract HOMEBREW_TEMP constant 2013-12-14 09:35:58 -06:00
Jack Nagel
f458fa9e9a keg: add debug output to install name machinery 2013-12-14 09:35:58 -06:00
Jack Nagel
c31512fe33 keg: the argument to find_dylib is already a Pathname 2013-12-14 09:35:58 -06:00
Jack Nagel
3662a2765d keg: combine loops in relocate_install_names 2013-12-14 09:35:58 -06:00
Jack Nagel
f6979cccb2 keg: eliminate reject_proc, make callers determine which names to fix 2013-12-14 09:35:58 -06:00
Jack Nagel
25632546a4 keg: yield install names successively instead of all at once
Every caller of install_names_for loops over the yielded array. Now that
we have separated the dylib id calculation and update, we can eliminate
the need for a separate loop and yield each install name individually.

Rename this method to "each_install_name_for" for clarity.
2013-12-14 09:35:57 -06:00
Jack Nagel
b86e98426e keg: decouple dylib id changes from install name changes
The dylib id calculation does not use any information gathered in
install_names_for, so we can pull the logic out completely and only
yield the install names.
2013-12-14 09:35:57 -06:00
Jack Nagel
f4618f0147 keg: factor out dylib id calculation 2013-12-14 09:35:57 -06:00
Jack Nagel
7a10493387 keg: try to avoid disk IO when possible
Calling Pathname#text_executable? reads in the first 1024 bytes of the
file, so try the basename check (which requires no filesystem access)
first.
2013-12-14 09:35:57 -06:00
Jack Nagel
24d8791dfb keg: use lib helper 2013-12-14 09:35:57 -06:00
Jack Nagel
935091cd8e Pathname#extname returns a string 2013-12-14 09:35:57 -06:00
Elliot Saba
3d76a2c8df Relocate libtool (.la) files as well as pkgconfig (.pc)
Ignore quotes, just do a global substitution on cellar and prefix.

Closes Homebrew/homebrew#24894.

Signed-off-by: Jack Nagel <jacknagel@gmail.com>
2013-12-04 22:37:58 -06:00
Jack Nagel
2e89175eef relocate_install_names: only one substitution is needed 2013-12-04 22:37:58 -06:00
Jack Nagel
ca01b0ad97 relocate_install_names: use a single ensure_writable block 2013-12-04 22:37:57 -06:00
Jack Nagel
cf4e159d53 relocate_install_names: yielded names are already strings 2013-12-04 22:37:57 -06:00
Jack Nagel
e3bd9b2607 Let fix_install_names fix up placeholders too 2013-12-04 22:37:57 -06:00
Jack Nagel
f2aaa5f0ac Teach installer about prefix and cellar placeholders 2013-12-04 22:37:57 -06:00
Jack Nagel
2b5e57a4bd Remove special handling for relocatable pkgconfig files 2013-12-04 22:37:57 -06:00
Jack Nagel
76153e9780 Insert placeholders for prefix and cellar in relocatable bottles 2013-12-04 22:37:57 -06:00
Jack Nagel
94ebe8e747 relocate_install_names: rewrite cellar names before prefix names
The cellar may overlap with the prefix, so if we replace the prefix
first, we will end up with paths like "@@HOMEBREW_PREFIX@@/Cellar"
instead of "@@HOMEBREW_CELLAR@@", which will break on installations
where the cellar and prefix are disjoint.
2013-12-04 22:37:57 -06:00
Jack Nagel
98cc0b3022 fix_install_names: extract change_dylib_id 2013-12-04 22:37:57 -06:00
Jack Nagel
e7633d876e fix_install_names: extract change_install_name 2013-12-04 22:37:57 -06:00
Jack Nagel
4a972e5f41 Ensure cellar path is replace correctly for relocatable bottles 2013-12-01 17:05:02 -06:00
Jack Nagel
d6a94eb452 Skip path replacement when it would be a no-op 2013-12-01 17:05:02 -06:00
Jack Nagel
0224bce9f6 Extract repeated regexp to a method 2013-12-01 17:05:02 -06:00
Elliot Saba
0ece9135eb Add support for relocating pkgconfig files for bottles
* Finds pkg-config files such as "lib/pkgconfig/libfoo.pc" and "bin/libfoo-config"
 * Does inreplace on paths in such files to allow for better bottle relocation ability

Closes Homebrew/homebrew#23825.

Signed-off-by: Jack Nagel <jacknagel@gmail.com>
2013-11-13 18:49:16 -06:00
Misty De Meo
0e6df1c3bf detect_cxx_stdlibs: use mach_o_files 2013-10-26 21:54:30 -07:00
Jack Nagel
c511d7d2f4 Add OS.mac? and OS.linux? 2013-10-18 12:56:51 -05:00
Misty De Meo
a5f68bb874 detect_cxx_stdlibs: Only detect for dylibs
Fixes Homebrew/homebrew#23115.
2013-10-08 09:04:21 -07:00
Misty De Meo
74ab023422 Only track C++ stdlibs for C++ code
After a formula is built, scan all mach-o files for dynamic links
to see if any of them point to a C++ stdlib (libc++ or libstdc++).
If one of them is linked, record that information in the formula's tab.

This replaces the old behaviour where all files were assumed to be C++
code, and stdlibs were always tracked regardless of whether they were
actually linked against.

This also modifies the way that tabs are written - now tabs are written
with the stdlib field null, and values are only written if an stdlib
is detected.
2013-10-06 19:26:06 -07:00