Recently, when trying to install the PHP intl extension for a Symfony2 based web project using Homebrew to following error message kept showing up:
/usr/local/bin/brew: /usr/local/Library/brew.rb: /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby: bad interpreter: No such file or directory /usr/local/bin/brew: line 23: /usr/local/Library/brew.rb: Undefined error: 0
This post steps explains what is needed to install PHP intl extension using Homebrew on XAMPP.
Reinstall required?
Trying to do a quick re-install did not succeed:
bash-3.2$ ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”
It appears Homebrew is already installed. If your intent is to reinstall you should do the following before running this installer again:
bash-3.2$ rm -rf /usr/local/Cellar /usr/local/.git && brew cleanup
So, basically it’s advised to remove existing files and re-start the installer which resulted in
rm: /usr/local/Cellar/libmemcached/1.0.18/AUTHORS: Permission denied
rm: /usr/local/Cellar/libmemcached/1.0.18/bin/memcapable: Permission denied
rm: /usr/local/Cellar/libmemcached/1.0.18/bin/memcat: Permission denied
… and many more errors
Sudo to the rescue?
Ok, so let’s remove the files using sudo:
bash-3.2$ sudo rm -rf /usr/local/Cellar /usr/local/.git && brew cleanup
Password: *****
/usr/local/bin/brew: /usr/local/Library/brew.rb: /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby: bad interpreter: No such file or directory
/usr/local/bin/brew: line 23: /usr/local/Library/brew.rb: Undefined error: 0
Well, this is kind of embarrassing 🙂
Since the folder have been successfully removed it might just be the brew cleanup command that causes the problems?
bash-3.2$ sudo brew cleanup
/usr/local/bin/brew: /usr/local/Library/brew.rb: /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby: bad interpreter: No such file or directory
/usr/local/bin/brew: line 23: /usr/local/Library/brew.rb: Undefined error: 0
It’s not 🙂 So, after manually removing these directories again it’s time for another attempt to call the brew installer:
bash-3.2$ ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”
==> This script will install:
/usr/local/bin/brew
/usr/local/Library/…
/usr/local/share/man/man1/brew.1
==> The following directories will be made group writable:
/usr/local/sbin
/usr/local/share/man/man7
Press RETURN to continue or any other key to abort
==> /usr/bin/sudo /bin/chmod g+rwx /usr/local/sbin /usr/local/share/man/man7
==> /usr/bin/sudo /bin/mkdir /Library/Caches/Homebrew
==> /usr/bin/sudo /bin/chmod g+rwx /Library/Caches/Homebrew
==> Downloading and installing Homebrew…
remote: Counting objects: 3580, done.
remote: Compressing objects: 100% (3426/3426), done.
remote: Total 3580 (delta 35), reused 1458 (delta 18), pack-reused 0
Receiving objects: 100% (3580/3580), 2.74 MiB | 963.00 KiB/s, done.
Resolving deltas: 100% (35/35), done.
From https://github.com/Homebrew/homebrew
* [new branch] master -> origin/master
error: unable to unlink old ‘Library/Homebrew/extend/ENV/shared.rb’ (Permission denied)
error: unable to unlink old ‘Library/Homebrew/extend/ENV/std.rb’ (Permission denied)
error: unable to unlink old ‘Library/Homebrew/extend/ENV/super.rb’ (Permission denied)
error: unable to unlink old ‘Library/Homebrew/hooks/bottles.rb’ (Permission denied)
error: unable to create file Library/Homebrew/language/go.rb (Permission denied)
error: unable to unlink old ‘Library/Homebrew/language/haskell.rb’ (Permission denied)
error: unable to create file Library/Homebrew/language/java.rb (Permission denied)
error: unable to unlink old ‘Library/Homebrew/language/python.rb’ (Permission denied)
error: unable to create file Library/Homebrew/utils/fork.rb (Permission denied)
error: unable to unlink old ‘Library/Homebrew/utils/inreplace.rb’ (Permission denied)
error: unable to unlink old ‘Library/Homebrew/utils/json.rb’ (Permission denied)
error: unable to create file Library/Homebrew/utils/popen.rb (Permission denied)
error: unable to unlink old ‘Library/Homebrew/vendor/okjson.rb’ (Permission denied)
Checking out files: 100% (3584/3584), done.
fatal: Could not reset index file to revision ‘origin/master’.
Failed during: git reset –hard origin/master
Almost! As you can see we also need to manually remove the Library/Homebrew folder and finally it works:
bash-3.2$ ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”
==> This script will install:
/usr/local/bin/brew
/usr/local/Library/…
/usr/local/share/man/man1/brew.1
Press RETURN to continue or any other key to abort
==> Downloading and installing Homebrew…
remote: Counting objects: 3580, done.
remote: Compressing objects: 100% (3426/3426), done.
remote: Total 3580 (delta 35), reused 1458 (delta 18), pack-reused 0
Receiving objects: 100% (3580/3580), 2.74 MiB | 502.00 KiB/s, done.
Resolving deltas: 100% (35/35), done.
From https://github.com/Homebrew/homebrew
* [new branch] master -> origin/master
HEAD is now at f45116a swiftlint: add 0.1.0 bottle.
==> Installation successful!
==> Next steps
Run `brew help` to get started
bash-3.2$ brew help
Example usage:
brew [info | home | options ] [FORMULA…]
brew install FORMULA…
brew uninstall FORMULA…
brew search [foo]
brew list [FORMULA…]
brew update
brew upgrade [–all | FORMULA…]
brew pin/unpin [FORMULA…]
Troubleshooting:
brew doctor
brew install -vd FORMULA
brew [–env | config]
Brewing:
brew create [URL [–no-fetch]]
brew edit [FORMULA…]
open https://github.com/Homebrew/homebrew/blob/master/share/doc/homebrew/Formula-Cookbook.md
Further help:
man brew
brew home
Pretty easy, right? 😉 Now it’s time to actually install the PHP intl extension.
Install PHP intl extension using Homebrew
To actually install the PHP intl extension we can use Homebrew, thanks to Gigamike for the tip:
bash-3.2$ brew install icu4c
==> Downloading https://homebrew.bintray.com/bottles/icu4c-55.1.yosemite.bottle.tar.gz
######################################################################## 100,0%
==> Pouring icu4c-55.1.yosemite.bottle.tar.gz
==> Caveats
This formula is keg-only, which means it was not symlinked into /usr/local.
Mac OS X already provides this software and installing another version in
parallel can cause all kinds of trouble.
OS X provides libicucore.dylib (but nothing else).
Generally there are no consequences of this for you. If you build your
own software and it requires this formula, you’ll need to add to your
build variables:
LDFLAGS: -L/usr/local/opt/icu4c/lib
CPPFLAGS: -I/usr/local/opt/icu4c/include
==> Summary
🍺 /usr/local/Cellar/icu4c/55.1: 244 files, 66M
And then finally install intl:
bash-3.2$ sudo /Applications/XAMPP/xamppfiles/bin/pecl install intl
Cannot find autoconf phpize failed
In case you get an error Cannot find autoconf
bash-3.2$ sudo /Applications/XAMPP/xamppfiles/bin/pecl install intl
downloading intl-3.0.0.tgz …
Starting to download intl-3.0.0.tgz (248,200 bytes)
…………………………………………….done: 248,200 bytes
150 source files, building
running: phpize
Configuring for:
PHP Api Version: 20121113
Zend Module Api No: 20121212
Zend Extension Api No: 220121212
Cannot find autoconf. Please check your autoconf installation and the
$PHP_AUTOCONF environment variable. Then, rerun this script.
ERROR: `phpize’ failed
make sure that autoconf is installed and PHP_AUTOCONF is set correctly (which is not set by default when using XAMPP).
You can easily install autoconf through Homebrew too:
bash-3.2$ brew install autoconf
==> Downloading https://homebrew.bintray.com/bottles/autoconf-2.69.yosemite.bottle.1.tar.gz
######################################################################## 100,0%
==> Pouring autoconf-2.69.yosemite.bottle.1.tar.gz
Warning: This keg was marked linked already, continuing anyway
🍺 /usr/local/Cellar/autoconf/2.69: 70 files, 3,1M
Next, make sure that PHP_AUTOCONF is in your path by checking the path to autoconf:
bash-3.2$ which autoconf
/usr/local/bin/autoconf
Now set PHP_AUTOCONF:
bash-3.2$ export PHP_AUTOCONF=/usr/local/bin/autoconf
and start the intl installation through PECL again:
bash-3.2$ sudo /Applications/XAMPP/xamppfiles/bin/pecl install intl
downloading intl-3.0.0.tgz …
Starting to download intl-3.0.0.tgz (248,200 bytes)
…………………………………………….done: 248,200 bytes
150 source files, building
running: phpize
Configuring for:
PHP Api Version: 20121113
Zend Module Api No: 20121212
Zend Extension Api No: 220121212
Specify where ICU libraries and headers can be found [DEFAULT] :
building in /private/tmp/pear/temp/pear-build-rootlnRgnx/intl-3.0.0
running: /private/tmp/pear/temp/intl/configure –with-icu-dir=DEFAULT
checking for grep that handles long lines and -e… /usr/bin/grep
checking for egrep… /usr/bin/grep -E
checking for a sed that does not truncate output… /usr/bin/sed
checking for cc… cc
checking whether the C compiler works… yes
checking for C compiler default output file name… a.out
checking for suffix of executables…
checking whether we are cross compiling… no
checking for suffix of object files… o
checking whether we are using the GNU C compiler… yes
checking whether cc accepts -g… yes
checking for cc option to accept ISO C89… none needed
checking how to run the C preprocessor… cc -E
checking for icc… no
checking for suncc… no
checking whether cc understands -c and -o together… yes
checking for system library directory… lib
checking if compiler supports -R… no
checking if compiler supports -Wl,-rpath,… yes
checking build system type… x86_64-apple-darwin14.3.0
checking host system type… x86_64-apple-darwin14.3.0
checking target system type… x86_64-apple-darwin14.3.0
checking for PHP prefix… /Applications/XAMPP/xamppfiles
checking for PHP includes… -I/Applications/XAMPP/xamppfiles/include/php -I/Applications/XAMPP/xamppfiles/include/php/main -I/Applications/XAMPP/xamppfiles/include/php/TSRM -I/Applications/XAMPP/xamppfiles/include/php/Zend -I/Applications/XAMPP/xamppfiles/include/php/ext -I/Applications/XAMPP/xamppfiles/include/php/ext/date/lib
checking for PHP extension directory… /Applications/XAMPP/xamppfiles/lib/php/extensions/no-debug-non-zts-20121212
checking for PHP installed headers prefix… /Applications/XAMPP/xamppfiles/include/php
checking if debug is enabled… no
checking if zts is enabled… no
…
… a lot more messages and compile output and finally:
…
———————————————————————-
Libraries have been installed in:
/private/tmp/pear/temp/pear-build-rootlnRgnx/intl-3.0.0/modules
If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR’
flag during linking and do at least one of the following:
– add LIBDIR to the `DYLD_LIBRARY_PATH’ environment variable
during execution
See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
———————————————————————-
Build complete.
Don’t forget to run ‘make test’.
running: make INSTALL_ROOT=”/private/tmp/pear/temp/pear-build-rootlnRgnx/install-intl-3.0.0″ install
Installing shared extensions: /private/tmp/pear/temp/pear-build-rootlnRgnx/install-intl-3.0.0/Applications/XAMPP/xamppfiles/lib/php/extensions/no-debug-non-zts-20121212/
running: find “/private/tmp/pear/temp/pear-build-rootlnRgnx/install-intl-3.0.0” | xargs ls -dils
10839659 0 drwxr-xr-x 3 root wheel 102 19 Mai 14:48 /private/tmp/pear/temp/pear-build-rootlnRgnx/install-intl-3.0.0
10840601 0 drwxr-xr-x 3 root wheel 102 19 Mai 14:48 /private/tmp/pear/temp/pear-build-rootlnRgnx/install-intl-3.0.0/Applications
10840602 0 drwxr-xr-x 3 root wheel 102 19 Mai 14:48 /private/tmp/pear/temp/pear-build-rootlnRgnx/install-intl-3.0.0/Applications/XAMPP
10840603 0 drwxr-xr-x 3 root wheel 102 19 Mai 14:48 /private/tmp/pear/temp/pear-build-rootlnRgnx/install-intl-3.0.0/Applications/XAMPP/xamppfiles
10840604 0 drwxr-xr-x 3 root wheel 102 19 Mai 14:48 /private/tmp/pear/temp/pear-build-rootlnRgnx/install-intl-3.0.0/Applications/XAMPP/xamppfiles/lib
10840605 0 drwxr-xr-x 3 root wheel 102 19 Mai 14:48 /private/tmp/pear/temp/pear-build-rootlnRgnx/install-intl-3.0.0/Applications/XAMPP/xamppfiles/lib/php
10840606 0 drwxr-xr-x 3 root wheel 102 19 Mai 14:48 /private/tmp/pear/temp/pear-build-rootlnRgnx/install-intl-3.0.0/Applications/XAMPP/xamppfiles/lib/php/extensions
10840607 0 drwxr-xr-x 3 root wheel 102 19 Mai 14:48 /private/tmp/pear/temp/pear-build-rootlnRgnx/install-intl-3.0.0/Applications/XAMPP/xamppfiles/lib/php/extensions/no-debug-non-zts-20121212
10840608 856 -rwxr-xr-x 1 root wheel 434572 19 Mai 14:48 /private/tmp/pear/temp/pear-build-rootlnRgnx/install-intl-3.0.0/Applications/XAMPP/xamppfiles/lib/php/extensions/no-debug-non-zts-20121212/intl.so
Build process completed successfully
Installing ‘/Applications/XAMPP/xamppfiles/lib/php/extensions/no-debug-non-zts-20121212/intl.so’
install ok: channel://pecl.php.net/intl-3.0.0
configuration option “php_ini” is not set to php.ini location
You should add “extension=intl.so” to php.ini
Activate intl Extension in php.ini
Finally, make sure to add
extension=intl.so
to your php.ini and restart Apache. If everything is set up correctly you will see the intl information using phpinfo():
You are all set to go!
Leave a Reply