Ecco un altro esempio:
Dallo slackbuild di seamonkey di pat per current:
- Codice: Seleziona tutto
if gcc --version | grep -q "gcc (GCC) 4.7.0" ; then
# Enable compiling with gcc-4.7.0:
sed -i '/fcntl.h/a#include <unistd.h>' \
mozilla/ipc/chromium/src/base/{file_util_linux,message_pump_libevent,process_util_posix}.cc &&
sed -i '/sys\/time\.h/a#include <unistd.h>' mozilla/ipc/chromium/src/base/time_posix.cc &&
sed -i 's#\"PRIxPTR#\" PRIxPTR#g' mozilla/layout/base/tests/TestPoisonArea.cpp &&
sed -i 's#\"CRLF#\" CRLF#g' mailnews/base/search/src/nsMsgSearchAdapter.cpp &&
sed -i 's#\"CRLF#\" CRLF#g' mailnews/base/src/nsMsgFolderCompactor.cpp &&
sed -i 's#\"CRLF#\" CRLF#g' mailnews/compose/src/nsSmtpProtocol.cpp &&
sed -i 's#\"CRLF#\" CRLF#g' mailnews/imap/src/nsImapMailFolder.cpp &&
sed -i 's#\"CRLF#\" CRLF#g' mailnews/imap/src/nsImapProtocol.cpp &&
sed -i 's#\"CRLF#\" CRLF#g' mailnews/imap/src/nsImapServerResponseParser.cpp &&
sed -i 's#\"CRLF#\" CRLF#g' mailnews/local/src/nsPop3Protocol.cpp &&
sed -i 's#\"CRLF#\" CRLF#g' mailnews/mime/src/mimedrft.cpp &&
sed -i 's#\"MSG_LINEBREAK#\" MSG_LINEBREAK#g' mailnews/mime/src/mimemult.cpp &&
sed -i 's#\"MSG_LINEBREAK#\" MSG_LINEBREAK#g' mailnews/base/src/nsMsgFolderCompactor.cpp &&
sed -i 's# ""##' mozilla/browser/base/Makefile.in
fi
A proposito di seamonkey credo di aver trovato un bug, o meglio, una discrepanza tra lo slackbuild e quello che trovo in /var/log/{packages,script}
A tal scopo mi sto scaricando lo sb di seamonkey e ricompilarlo passo passo per indagare.
EDIT:
Confermo il bug dello slackbuild di seamonkey 2.9
Fino a seamonkey 2.0.x il make install installava le nss-include in /usr/include/seamonkey-*/nss
Dal seamonkey 2.1 il make install installa le nss-include in /usr/include/seamonkey-*/ e non crea la directory nss. Visto che alcuni software continuano a cercare queste include in nss e lo stesso pkgconfig segnala ancora ../nss, lo slackbuild crea il link /usr/include/seamonkey-*/nss -> /usr/include/seamonkey-* (ln -s . nss)
A quanto pare però in seamonkey 2.9 il make install CREA la directory nss ma la lascia vuota. Ovviamente fallisce la creazione del link, quindi gli applicativi in quel percorso non trovano nulla e falliscono la compilazione.
EDIT2:
Continuando la compilazione di chromium, sono arrivato finora a questi workaround:
- Codice: Seleziona tutto
build/gyp_chromium -f make build/all.gyp --depth=. \
-Drelease_extra_cflags="${CFLAGS} -I/usr/include/seamonkey/" \
-Dlibraries_for_target="-lnssutils3" \
...
CFLAGS=" $SLKCFLAGS" \
CXXFLAGS="-include /usr/include/expat.h -include unistd.h $SLKCFLAGS" \
make chrome chrome_sandbox BUILDTYPE=Release
il -I/usr/include/seamonkey/ è per il bug di seamonkey sopradescritto
il -include unistd.h è per il problema di gcc4.7 che non se lo prende in automatico
il -include /usr/include/expat.h è perchè l'include path è -I/usr/include/seamonkey/ -I/usr/include/ e non viceversa, così si prende expat.h di seamonkey che non matcha con expat installato sul sistema.
il -lnssutil3 è perchè uno dei simboli durante il linking è definito in libnssutil3.so che è una dipendenza di libnss3.so e il linker punta solo a quest'ultimo, ma gcc4.7 sembrerebbe non risolvere la dipendenze implicita ma la vuole implicita.
Ma non è ancora finita!!!
EDIT3: erratacorrige su nssutil3. Il problema non è di gcc4.7 ma di seamonkey >=2.8 ; questo infatti, a differenza dei precedenti, crea nssutil3 che prima non esisteva proprio. Purtroppo non è stato aggiornato il relativo /usr/lib64/pkgconfig/nss.pc
Come workaround al momento ho aggiornato questo file, ma lo saprò tra qualche ora se ha funzionato (ho dovuto rilanciare la compilazione da 0)
Con la sintassi di cui sopra ( -Dlibraries_for_target="-lnssutils3" \ ) sovrascrive tutte le librerie e ci lascia solo questa.. poco utile
