Quoting Alexander Shikoff <[email protected]>:

On Wed, Jul 31, 2013 at 03:13:59PM +0300, Sergey V. Dyatko wrote:
ну, ради интереса, попробуй его пересобрать, не clang`ом, поможет ли это

Так, приколы продолжаются.
Выставил WITH_GCC=yes для editors/libreoffice.
Начинаю собирать, отваливается на этапе configure:

# cd /usr/ports/editors/libreoffice
# make clean && make
[...]
checking Python.h usability... no
checking Python.h presence... no
checking for Python.h... no
configure: error: Python headers not found. You probably want to set both the PYTHON_CFLAGS and PYTHON_LIBS environment variables.
===>  Script "configure" failed unexpectedly.
Please report the problem to [email protected] [maintainer] and attach the
"/usr/ports/editors/libreoffice/work/libreoffice-4.0.4.2/config.log" including
the output of the failure of your make command. Also, it might be a good idea
to provide an overview of all packages installed on your system (e.g. a
/usr/local/sbin/pkg-static info -g -Ea).
*** Error code 1

Stop.
make: stopped in /usr/ports/editors/libreoffice
*** Error code 1

Stop.
make: stopped in /usr/ports/editors/libreoffice

Смотрю config.log:

configure:21136: checking Python.h usability
configure:21136: gcc46 -c -O2 -pipe -march=pentium4 -Wl,-rpath=/usr/local/lib/gcc46 -DLDAP_DEPRECATED -fno-strict-aliasing -I/usr/local/include -I/usr/local/include/python2.7 -I/usr/local/include/python2.7 -fno-strict-aliasing -OPT:Olimit=0 -O2 -pipe -march=pentium4 -fno-strict-aliasing -DNDEBUG -O2 -pipe -march=pentium4 -fno-strict-aliasing -I/usr/local/include/pth conftest.c >&5
cc1: error: argument to '-O' should be a non-negative integer

Ищу, откуда в списке опций берется -OPT:Olimit=0.

# /usr/local/bin/python2.7-config --cflags
-I/usr/local/include/python2.7 -I/usr/local/include/python2.7 -fno-strict-aliasing -OPT:Olimit=0 -O2 -pipe -march=pentium4 -fno-strict-aliasing -DNDEBUG -O2 -pipe -march=pentium4 -fno-strict-aliasing -I/usr/local/include/pth

Оказалось, известный баг :
www.freebsd.org/cgi/query-pr.cgi?pr=ports/174525
Предложенный там патч стал некорректно отрабатывать с тех пор, как
бинарники /usr/bin/cc и /usr/bin/clang стали одним и тем же.

Дальнейшие изыскания показали, что clang некорректно обрабатывает опцию
-O:

# clang -OPT:Olevel=0 -c conftest.c || echo $?
error: invalid integral value 'PT:Olevel=0' in '-OPT:Olevel=0'
error: invalid integral value 'PT:Olevel=0' in '-OPT:Olevel=0'
1
- не работает

# clang -O2 -OPT:Olevel=0 -c conftest.c || echo $?
error: invalid integral value 'PT:Olevel=0' in '-OPT:Olevel=0'
error: invalid integral value 'PT:Olevel=0' in '-OPT:Olevel=0'
1
- не работает

# clang -OPT:Olevel=0 -O2 -c conftest.c && echo $?
- работает, хотя не должно.

Чтобы не натыкаться на проблемы при сборке портов, которые зависят от Python,
компилятором GCC, необходимо исправить патч в lang/python27/files/patch-configure,
а именно добавить проверку "$CC" = cc:

--- configure.orig      2013-01-14 13:38:53.000000000 +0000
+++ configure   2013-01-14 13:39:14.000000000 +0000
@@ -5642,8 +5642,8 @@
        BASECFLAGS="$BASECFLAGS $ac_arch_flags"
 fi

-# disable check for icc since it seems to pass, but generates a warning
-if test "$CC" = icc
+# disable check for icc and clang since it seems to pass, but generates a warning
+if test "$CC" = icc -o "$CC" = clang -o "$CC" = cc
 then
   ac_cv_opt_olimit_ok=no
 fi

Кхм.

На момент написания патча для http://www.freebsd.org/cgi/query-pr.cgi?pr=161494&cat=ports ( на который ссылается mva@ в followup к 174525 ) у меня не было под рукой системы с WITH_CLANG_IS_CC для тестирования, так что патч вполне возможно и не полон.
 С другой стороны, предложенное дополнение к патчу фактически
означает, что эта проверка отключена во FreeBSD вне зависимости от используемого компилятора.



Но данный способ всего лишь workaround проблемы с clang.

После исправления патча и пересборки python27, команда python2.7-config --clibs
стала выдавать корректную строку, без -OPT:Olevel=0.

--
MINO-RIPE

Ответить