PHP 7.3 auf Mavericks installieren
Bei der Installation von PHP 7.3 mittels Homebrew auf OS X 10.9 Mavericks gibt es ein paar Hürden zu meistern. Da für die meisten Pakete keine Bottles mehr bereitgestellt werden, werden einige Abhänigkeiten benötigt, um PHP manuell zu bauen. Dabei kommt es beim Kompilieren von nghttp2 und von glib zu Problemen, die sich jedoch lösen lassen.
nghttp2
Bei nghttp2 werden einige Funktionen nicht gefunden.
make[3]: *** [util.o] Error 1
./memchunk.h:130:16: error: no member named 'exchange' in namespace 'std'
len = std::exchange(other.len, 0);
~~~~~^
./memchunk.h:336:18: error: no member named 'exchange' in namespace 'std'
cur{std::exchange(other.cur, nullptr)},
~~~~~^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
20 errors generated.
make[3]: *** [nghttp.o] Error 1
Wer manuell ./configure
ausführt, kann erkennen, dass das Skript Probleme hat, die C++14-Unterstützung für Clang++ zu aktivieren:
checking whether clang++ supports C++14 features with -std=c++14... no
checking whether clang++ supports C++14 features with +std=c++14... no
checking whether clang++ supports C++14 features with -h std=c++14... no
checking whether clang++ supports C++14 features with -std=c++1y... no
checking whether clang++ supports C++14 features with +std=c++1y... no
checking whether clang++ supports C++14 features with -h std=c++1y... no
configure: No compiler with C++14 support was found
Der korrekte Parameter würde -std=c++1y
lauten, wird aber nicht angewendet. Daher wird es ohne den Parameter ausgeführt, verwendet nicht die C++14-Unterstützung und kann daher nicht kompilieren.
Der Fehler lässt sich dadurch lösen, die CXXFLAGS
-Variable manuell mit dem Parameter zu versehen. Standardmäßig werden hier die Parameter -g
und -O2
verwendet, so dass diese auch mit in die Variable aufgenommen werden müssen.
Das kann man entweder über den interaktiven Modus machen oder indem man die Formel bearbeitet.
Formel bearbeiten
Mit brew edit nghttp2
kann man den Code der Formel aufrufen. In der Methode install
nach der Zeile ENV.cxx11
eine weitere Zeile mit ENV["CXXFLAGS"] = "-g -O2 -std=c++1y"
hinzufügen.
+
Interaktiver Modus
glib
Bei der Installation von glib ist die Abhängigkeit zu gtk-doc vorhanden, welches source-highlight benötigt, welches wiederum boost benötigt. Boost mag jedoch nicht mit Clang kompilieren, sondern benötigt GCC. Allerdings ist die Abhängigkeit zu gtk-doc eigentlich unnötig, so dass man diese einfach aus der Formel entfernen kann.
Dazu ruft man mit brew edit glib
den Formelcode von glib auf und löscht entweder die Zeile depends_on "gtk-doc" => :build
oder kommentiert die Zeile mit einem #
am Anfang der Zeile aus.
-
+
Update 7. März 2019 (PHP 7.3.2)
Während das Problem mit der glib-Formel bereits gelöst wurde, kommt es nun zu einem anderen Fehler bei nghttp2:
shrpx_client_handler.cc:1166:10: error: no viable conversion from
'unique_ptr<class shrpx::HttpDownstreamConnection, default_delete<class
shrpx::HttpDownstreamConnection>>' to 'unique_ptr<class
shrpx::DownstreamConnection, default_delete<class
shrpx::DownstreamConnection>>'
return dconn;
^~~~~
Wie im MacPorts Trac beschrieben, ist dies
ein Bug in Clang. Praktischerweise kann man gleich den Fix
von dort verwenden, indem man ihn vor der install
-Methode einfügt. Die oben
genannte Anpassung ist auch weiterhin notwendig.
Die Formel sollte mit brew edit nghttp2
folgendermaßen bearbeitet werden, damit
der Patch angewendet wird:
+
+
+
+
+
Die Formelcodes sind ein Git-Repository und werden dementsprechend auch mit Git aktualisiert. Die Änderungen bleiben also bei Aktualisierungen üblicherweise erhalten.
Wenn man den Formelcode zurücksetzen möchte, kann man dies im Verzeichnis /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula
mit Git tun, in dem die Formeln liegen. Mit git status
kann man überprüfen, welche Formeln bearbeitet wurden, mit git diff <datei>
kann man die Änderungen anzeigen und mit git checkout -- <datei>
kann man die Änderungen wieder zurücksetzen.