Homebrew-core: `mu --with-emacs` compile fails on macOS Sierra 10.12.3

Created on 22 Mar 2017  Â·  16Comments  Â·  Source: Homebrew/homebrew-core

Bug report:

Default Troubleshooting

  • [x] Ran brew update and retried your prior step?
  • [x] Ran brew doctor, fixed as many issues as possible and retried your prior step?
  • [x] Confirmed this is a problem with specific formulae and not Homebrew/brew? If it's a general Homebrew/brew problem please file this issue at https://github.com/Homebrew/brew/issues/new

Expected Behavior

I expected brew install mu --with-emacs to install without error.

Actual Behavior

brew install mu --with-emacs fails on macOS Sierra 10.12.3. In contrast, brew install mu works just fine.

Attempted Diagnosis

The build logs may be difficult to follow, so here's what I did.

Initially, the install failed with this error:

Package guile-2.0 was not found in the pkg-config search path.
Perhaps you should add the directory containing `guile-2.0.pc'
to the PKG_CONFIG_PATH environment variable

Installing guile did not fix the problem, so I edited the formula to disable guile. I also disabled gtk & webkit for good measure. In short, I changed this:

    system "./configure", "--disable-dependency-tracking",
                          "--prefix=#{prefix}",
                          "--with-lispdir=#{elisp}"

to this:

    system "./configure", "--disable-dependency-tracking",
                          "--prefix=#{prefix}",
                          "--with-lispdir=#{elisp}",
                          "--disable-gtk",
                          "--disable-guile",
                          "--disable-webkit"

I've put my (failed) additions on my own branch.

The build log is here.

I tried this both with the standard emacs formula and emacs-plus, but got the same result from both. I also set $EMACS to /usr/local/bin/emacs without success.

Related Issues

I failed to compile mu manually and filed an issue with mu itself.

gist-logs

Here are the gist-logs.

My brew config output

HOMEBREW_VERSION: 1.1.11-132-g17cc40f1
ORIGIN: https://github.com/Homebrew/brew
HEAD: 17cc40f112cbb7e5da5ef6d8eb3e3d5afbbd43e5
Last commit: 18 hours ago
Core tap ORIGIN: https://github.com/Homebrew/homebrew-core
Core tap HEAD: 51d046569a1fc72d835449e705f60a7528081280
Core tap last commit: 3 hours ago
HOMEBREW_PREFIX: /usr/local
HOMEBREW_REPOSITORY: /usr/local/Homebrew
HOMEBREW_CELLAR: /usr/local/Cellar
HOMEBREW_BOTTLE_DOMAIN: https://homebrew.bintray.com
CPU: quad-core 64-bit haswell
Homebrew Ruby: 2.0.0-p648
Clang: 8.0 build 800
Git: 2.12.1 => /usr/local/bin/git
Perl: /usr/local/bin/perl => /usr/local/Cellar/perl/5.24.1/bin/perl
Python: /usr/local/bin/python => /usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/bin/python2.7
Ruby: /usr/local/bin/ruby => /usr/local/Cellar/ruby/2.4.0/bin/ruby
Java: 1.8.0_102, 1.8.0_66
macOS: 10.12.3-x86_64
Xcode: 8.2.1
CLT: 8.2.0.0.1.1480973914
X11: 2.7.9 => /opt/X11

My brew doctor output

Your system is ready to brew.

user configuration

Most helpful comment

Solution without Mono

Here is recipe to build it without Mono - https://gist.github.com/KryDos/d306d6453ad0f30b55468aecc8eb09a3
Nothing is changed except def install => resource("gmime") section

Description

I didn't try solution by @neurolit since Mono is pretty big dependency as for me. But thanks anyway!

I never dived into how Homebrew works but here I noticed brew edit command which is really great :)

So, I researched a bit and found that gmime package (required by mu) can be compiled with --disable-mono option (and actually it was compiled with this option before 3.0.0 version). At this stage it compiles but mu isn't working because something wrong with linker.
But if I manually set GMIME_LIBS and GMIME_CFLAGS then it works.

Would you accept pull request for this? But I'm actually not sure what I fixed and I don't even know what is pkgconfig which is probably something related

All 16 comments

FWIW, the maintainer of mu responded to my issue about mu not compiling (this is without homebrew). Apparently, gawk, not awk, needed to be installed _and linked_ to fix the compile issue.

I had to use gmake rather than make. The current homebrew formula uses make.

I cannot reproduce this issue, I'm afraid, but it sounds like you've got it sorted out.

Same issue today. mu4e worked yesterday, today gave an error 6, tried reinstall. came here.

really want to revert to HEAD-9798d1f can't

brew install mu --with-emacs

or install from source. totally stuck

Using brew edit mu, I added the following lines:

ENV.append_path "C_INCLUDE_PATH", "#{prefix}/gmime/include/gmime-2.6"
ENV.append_path "CMAKE_INCLUDE_PATH", "#{prefix}/gmime/include/gmime-2.6"
ENV.append_path "CMAKE_LIBRARY_PATH", "#{prefix}/gmime/lib"

to the formula starting on line 44 (in the install section for gmime), and got a successful compilation. The formula is manually installing the needed version of gmime, but isn't pointing clang to it properly during compilation.

(I'm not sure if the first line I added is strictly necessary, but unfortunately I don't have time to keep playing around this morning now that I've gotten it to work.)

I think I made the changes correctly. Thank you for the detailed

brew edit mu

command, I hadn't used that one before.

def install
 resource("gmime").stage do
   system "./configure", "--prefix=#{prefix}/gmime", "--disable-introspection"
   system "make", "install"
   ENV.append_path "PKG_CONFIG_PATH", "#{prefix}/gmime/lib/pkgconfig"
   ENV.append_path "C_INCLUDE_PATH", "#{prefix}/gmime/include/gmime-2.6"
   ENV.append_path "CMAKE_INCLUDE_PATH", "#{prefix}/gmime/include/gmime-2.6"
   ENV.append_path "CMAKE_LIBRARY_PATH", "#{prefix}/gmime/lib"
 end
system "autoreconf", "-ivf"
system "./configure", "--disable-dependency-tracking",
                      "--prefix=#{prefix}",
                      "--with-lispdir=#{elisp}",
                      "--disable-guile",
                      "--disable-gtk",
                      "--disable-webkit"
system "make"

Still getting an error.

checking for mcs... /usr/local/bin/mcs
checking whether /usr/local/bin/mcs is GNU Mono... yes 
checking for gacutil... /usr/local/bin/gacutil
checking for GLIB_SHARP... no

configure: error: Package requirements (glib-sharp-2.0 >= 2.4.0) were not met:

I can't replicate this either; could you post brew config and brew doctor, please?

HOMEBREW_VERSION: 1.2.0-43-g29429df9d
ORIGIN: https://github.com/Homebrew/brew
HEAD: 29429df9da748570a5046a99b683ebc3979531a4
Last commit: 19 hours ago
Core tap ORIGIN: https://github.com/Homebrew/homebrew-core
Core tap HEAD: 7b946aed229ef7afee843d55591b8e20070a47ca
Core tap last commit: 9 hours ago
HOMEBREW_PREFIX: /usr/local
HOMEBREW_REPOSITORY: /usr/local/Homebrew
HOMEBREW_CELLAR: /usr/local/Cellar
HOMEBREW_BOTTLE_DOMAIN: https://homebrew.bintray.com
CPU: octa-core 64-bit ivybridge
Homebrew Ruby: 2.0.0-p648
Clang: 8.1 build 802
Git: 2.12.2 => /usr/local/bin/git
Perl: /usr/bin/perl
Python: /usr/local/bin/python => /usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/bin/python2.7
Ruby: /Users/id/.rvm/rubies/ruby-2.3.1/bin/ruby
Java: 1.8.0_65
macOS: 10.12.5-x86_64
Xcode: N/A
CLT: 8.3.2.0.1.1492020469
X11: 2.7.112 => /opt/X11

Warning: "config" scripts exist outside your system or Homebrew directories.
./configure scripts often look for *-config scripts to determine if
software packages are installed, and what additional flags to use when
compiling and linking.

Having additional scripts in your path can confuse software installed via
Homebrew if the config script overrides a system or Homebrew provided
script of the same name. We found the following "config" scripts:
/Library/Frameworks/GDAL.framework/Programs/gdal-config

Warning: Python is installed at /Library/Frameworks/Python.framework

Homebrew only supports building against the System-provided Python or a
brewed Python. In particular, Pythons installed to /Library can interfere
with other software installs.

Warning: Unbrewed dylibs were found in /usr/local/lib.
If you didn't put them there on purpose they could cause problems when
building Homebrew formulae, and may need to be deleted.

Unexpected dylibs:
/usr/local/lib/libcrypto.1.1.dylib
/usr/local/lib/libjasper.4.dylib
/usr/local/lib/libssl.1.1.dylib
/usr/local/lib/libtcl8.6.dylib
/usr/local/lib/libtk8.6.dylib
/usr/local/lib/libusb-1.0.dylib

Warning: Unbrewed header files were found in /usr/local/include.
If you didn't put them there on purpose they could cause problems when
building Homebrew formulae, and may need to be deleted.

Unexpected header files:
/usr/local/include/fakemysql.h
/usr/local/include/fakepq.h
/usr/local/include/fakesql.h
/usr/local/include/itcl.h
/usr/local/include/itcl2TclOO.h
/usr/local/include/itclDecls.h
/usr/local/include/itclInt.h
/usr/local/include/itclIntDecls.h
/usr/local/include/itclMigrate2TclCore.h
/usr/local/include/itclTclIntStubsFcn.h
/usr/local/include/mysqlStubs.h
/usr/local/include/odbcStubs.h
/usr/local/include/openssl/aes.h
/usr/local/include/openssl/asn1.h
/usr/local/include/openssl/asn1_mac.h
/usr/local/include/openssl/asn1t.h
/usr/local/include/openssl/async.h
/usr/local/include/openssl/bio.h
/usr/local/include/openssl/blowfish.h
/usr/local/include/openssl/bn.h
/usr/local/include/openssl/buffer.h
/usr/local/include/openssl/camellia.h
/usr/local/include/openssl/cast.h
/usr/local/include/openssl/cmac.h
/usr/local/include/openssl/cms.h
/usr/local/include/openssl/comp.h
/usr/local/include/openssl/conf.h
/usr/local/include/openssl/conf_api.h
/usr/local/include/openssl/crypto.h
/usr/local/include/openssl/ct.h
/usr/local/include/openssl/des.h
/usr/local/include/openssl/dh.h
/usr/local/include/openssl/dsa.h
/usr/local/include/openssl/dtls1.h
/usr/local/include/openssl/e_os2.h
/usr/local/include/openssl/ebcdic.h
/usr/local/include/openssl/ec.h
/usr/local/include/openssl/ecdh.h
/usr/local/include/openssl/ecdsa.h
/usr/local/include/openssl/engine.h
/usr/local/include/openssl/err.h
/usr/local/include/openssl/evp.h
/usr/local/include/openssl/hmac.h
/usr/local/include/openssl/idea.h
/usr/local/include/openssl/kdf.h
/usr/local/include/openssl/lhash.h
/usr/local/include/openssl/md2.h
/usr/local/include/openssl/md4.h
/usr/local/include/openssl/md5.h
/usr/local/include/openssl/mdc2.h
/usr/local/include/openssl/modes.h
/usr/local/include/openssl/obj_mac.h
/usr/local/include/openssl/objects.h
/usr/local/include/openssl/ocsp.h
/usr/local/include/openssl/opensslconf.h
/usr/local/include/openssl/opensslv.h
/usr/local/include/openssl/ossl_typ.h
/usr/local/include/openssl/pem.h
/usr/local/include/openssl/pem2.h
/usr/local/include/openssl/pkcs12.h
/usr/local/include/openssl/pkcs7.h
/usr/local/include/openssl/rand.h
/usr/local/include/openssl/rc2.h
/usr/local/include/openssl/rc4.h
/usr/local/include/openssl/rc5.h
/usr/local/include/openssl/ripemd.h
/usr/local/include/openssl/rsa.h
/usr/local/include/openssl/safestack.h
/usr/local/include/openssl/seed.h
/usr/local/include/openssl/sha.h
/usr/local/include/openssl/srp.h
/usr/local/include/openssl/srtp.h
/usr/local/include/openssl/ssl.h
/usr/local/include/openssl/ssl2.h
/usr/local/include/openssl/ssl3.h
/usr/local/include/openssl/stack.h
/usr/local/include/openssl/symhacks.h
/usr/local/include/openssl/tls1.h
/usr/local/include/openssl/ts.h
/usr/local/include/openssl/txt_db.h
/usr/local/include/openssl/ui.h
/usr/local/include/openssl/whrlpool.h
/usr/local/include/openssl/x509.h
/usr/local/include/openssl/x509_vfy.h
/usr/local/include/openssl/x509v3.h
/usr/local/include/pqStubs.h
/usr/local/include/tcl.h
/usr/local/include/tclDecls.h
/usr/local/include/tclOO.h
/usr/local/include/tclOODecls.h
/usr/local/include/tclPlatDecls.h
/usr/local/include/tclThread.h
/usr/local/include/tclTomMath.h
/usr/local/include/tclTomMathDecls.h
/usr/local/include/tdbc.h
/usr/local/include/tdbcDecls.h
/usr/local/include/tdbcInt.h
/usr/local/include/tk.h
/usr/local/include/tkDecls.h
/usr/local/include/tkPlatDecls.h

Warning: Unbrewed .pc files were found in /usr/local/lib/pkgconfig.
If you didn't put them there on purpose they could cause problems when
building Homebrew formulae, and may need to be deleted.

Unexpected .pc files:
/usr/local/lib/pkgconfig/jasper.pc
/usr/local/lib/pkgconfig/libcrypto.pc
/usr/local/lib/pkgconfig/libssl.pc
/usr/local/lib/pkgconfig/openssl.pc
/usr/local/lib/pkgconfig/tcl.pc
/usr/local/lib/pkgconfig/tk.pc

Warning: Unbrewed static libraries were found in /usr/local/lib.
If you didn't put them there on purpose they could cause problems when
building Homebrew formulae, and may need to be deleted.

Unexpected static libraries:
/usr/local/lib/libcrypto.a
/usr/local/lib/libjasper.a
/usr/local/lib/libssl.a
/usr/local/lib/libtclstub8.6.a
/usr/local/lib/libtkstub8.6.a

Warning: Some keg-only formula are linked into the Cellar.
Linking a keg-only formula, such as gettext, into the cellar with
brew link <formula> will cause other formulae to detect them during
the ./configure step. This may cause problems when compiling those
other formulae.

Binaries provided by keg-only formulae may override system binaries
with other strange results.

You may wish to brew unlink these brews:
gettext
libffi
➜ ~ brew unlink gettext libffi
Unlinking /usr/local/Cellar/gettext/0.19.8.1... 194 symlinks removed
Unlinking /usr/local/Cellar/libffi/3.2.1... 10 symlinks removed

~ brew install mu --with-emacs
configure: error: Package requirements (glib-sharp-2.0 >= 2.4.0) were not met:
No package 'glib-sharp-2.0' found
https://github.com/Homebrew/homebrew-core/issues/13213

Brew upgrade also failed to upgrade mu --with-emacs for me with the original error as well.

@academikuser if you could take care of those warnings it would help to debug.

Hi! As I said in another issue, installing Mono should solve @academikuser problem.

Solution without Mono

Here is recipe to build it without Mono - https://gist.github.com/KryDos/d306d6453ad0f30b55468aecc8eb09a3
Nothing is changed except def install => resource("gmime") section

Description

I didn't try solution by @neurolit since Mono is pretty big dependency as for me. But thanks anyway!

I never dived into how Homebrew works but here I noticed brew edit command which is really great :)

So, I researched a bit and found that gmime package (required by mu) can be compiled with --disable-mono option (and actually it was compiled with this option before 3.0.0 version). At this stage it compiles but mu isn't working because something wrong with linker.
But if I manually set GMIME_LIBS and GMIME_CFLAGS then it works.

Would you accept pull request for this? But I'm actually not sure what I fixed and I don't even know what is pkgconfig which is probably something related

Just tried to install it again on another computer and noticed it doesn't work with --HEAD option 😞
But without the option everything is fine...

Thank you so much for documenting this @KryDos I've been going crazy trying to figure this out.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

yuna9 picture yuna9  Â·  4Comments

faraazkhan picture faraazkhan  Â·  3Comments

tejasmanohar picture tejasmanohar  Â·  3Comments

gregvirgin picture gregvirgin  Â·  3Comments

ghost picture ghost  Â·  3Comments