Правка порта

Проблемы установки, настройки и работы Правильной Операционной Системы

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Andy
ст. лейтенант
Сообщения: 1117
Зарегистрирован: 2007-03-04 7:48:58
Откуда: Mytischi

Правка порта

Непрочитанное сообщение Andy » 2009-02-12 9:31:03

Есть порт, для него нужно внести исправление с целью оптимизации
быстродействия собираемого приложения.
У распакованного порта есть файл global.mk

Код: Выделить всё

 #ADDCFLAGS = \
#       -O4 -pipe -march=$(GCCARCH) -fomit-frame-pointer                        \
#       -std=c99                                                                \
#       -W -Wall -Wextra -Wredundant-decls -Wnested-externs -Wstrict-prototypes \
#       -Wmissing-prototypes -Wpointer-arith -Winline -Wcast-qual               \
#       -Wreturn-type -Wswitch -Wshadow -Wcast-align -Wuninitialized            \
#       -Wchar-subscripts -Wuninitialized -Wbad-function-cast -Wwrite-strings
Вопрос - как sed'ом (@{REINPLACE_CMD}, если быть точнее), убрать символы комментариев
для приведенного куска? По идее s/^ADDCFLAGS а дальше я застрял. Ежели кто порты создавал,
а тут такие есть, я знаю, помогите пожалуйста.
Jul 16 19:37:15 freebsd sshd[4152]: Invalid user idiot from 210.75.200.104

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
manefesto
Группенфюррер
Сообщения: 6934
Зарегистрирован: 2007-07-20 8:27:30
Откуда: Пермь
Контактная информация:

Re: Правка порта

Непрочитанное сообщение manefesto » 2009-02-12 10:05:26

Код: Выделить всё

sed s/^#// <file>
я такой яростный шо аж пиздеЦ
Изображение

_Andy
проходил мимо

Re: Правка порта

Непрочитанное сообщение _Andy » 2009-02-12 14:41:26

manefesto писал(а):

Код: Выделить всё

sed s/^#// <file>
Спасибо, но мне надо не с начала файла. Хотя, впрочем, я попробую.

Аватара пользователя
manefesto
Группенфюррер
Сообщения: 6934
Зарегистрирован: 2007-07-20 8:27:30
Откуда: Пермь
Контактная информация:

Re: Правка порта

Непрочитанное сообщение manefesto » 2009-02-12 14:48:17

хитрый да..
тут без скрипта не раскурить
я такой яростный шо аж пиздеЦ
Изображение

Гость
проходил мимо

Re: Правка порта

Непрочитанное сообщение Гость » 2009-02-12 19:54:31

_Andy писал(а):
manefesto писал(а):

Код: Выделить всё

sed s/^#// <file>
Спасибо, но мне надо не с начала файла. Хотя, впрочем, я попробую.
если после этого куска есть пустая закомментированная строка, состоящая только из знака `#', то

Код: Выделить всё

sed '/^#ADDCFLAGS/,/^#$/s/^#// global.mk
иначе придется ориентироваться на строку без перенос (без `\' в конце)

Код: Выделить всё

sed '/^#ADDCFLAGS/,/^#[^\\]*$/s/^#//' global.mk

_Andy
проходил мимо

Re: Правка порта

Непрочитанное сообщение _Andy » 2009-02-15 11:33:58

Гость писал(а):
_Andy писал(а):
manefesto писал(а):

Код: Выделить всё

sed s/^#// <file>
Спасибо, но мне надо не с начала файла. Хотя, впрочем, я попробую.
если после этого куска есть пустая закомментированная строка, состоящая только из знака `#', то

Код: Выделить всё

sed '/^#ADDCFLAGS/,/^#$/s/^#// global.mk
иначе придется ориентироваться на строку без перенос (без `\' в конце)

Код: Выделить всё

sed '/^#ADDCFLAGS/,/^#[^\\]*$/s/^#//' global.mk
Добавляю в порт:

Код: Выделить всё

@${REINPLACE_CMD} -e 's,PREFIX =,PREFIX ?=, ; s,GCCARCH = i486,GCCARCH = native, ; s,/^#ADDCFLA
GS/,/^#$/s/^#// ' ${WRKSRC}/global.mk
Не получается:

Код: Выделить всё

===>  Applying FreeBSD patches for free-sa-1.5.1
sed: 1: "s,PREFIX =,PREFIX ?=, ; ...": unescaped newline inside substitute pattern
*** Error code 1

Гость
проходил мимо

Re: Правка порта

Непрочитанное сообщение Гость » 2009-02-15 21:49:47

правишь порт, но не осилил заглянуть в make(1)?

Код: Выделить всё

> cat >a.mk
A= sed '/^#ADDCFLAGS/,/^#[^\\]*$/s/^#//' global.mk
B= sed '/^\#ADDCFLAGS/,/^\#[^\\]*$$/s/^\#//' global.mk
^D
> make -fa.mk -V A
sed '/^
> make -fa.mk -V B
sed '/^#ADDCFLAGS/,/^#[^\\]*$/s/^#//' global.mk

_Andy
проходил мимо

Re: Правка порта

Непрочитанное сообщение _Andy » 2009-03-10 19:11:39

Код: Выделить всё

OPTIONS=         FBSD "Build for FreeBSD 6.X" off \
                 NOPORTDOCS  "Build without port documentation" off \

.include <bsd.port.pre.mk>

post-patch:

.if defined(NOPORTDOCS)
EXTRA_PATCHES+= ${FILESDIR}/extra-patch-Makefile
.endif

.if defined(FBSD)
EXTRA_PATCHES+= ${FILESDIR}/extra-patch-global.mk
.endif

.include <bsd.port.post.mk>
После цели make install патчи не накладываются. Кто подскажет почему?

Гость
проходил мимо

Re: Правка порта

Непрочитанное сообщение Гость » 2009-03-10 20:03:04

_Andy, EXTRA_PATCHES должны быть перед `.include <bsd.port.pre.mk>' и не частью цели. Если глянуть в <bsd.port.mk>, то патчи из EXTRA_PATCHES применяются раньше патчей из PATCHDIR.
_Andy писал(а):После цели make install патчи не накладываются. Кто подскажет почему?
а зачем тебе накладывать патчи после установки порта?

_Andy
проходил мимо

Re: Правка порта

Непрочитанное сообщение _Andy » 2009-03-10 20:26:00

Гость писал(а):_Andy, EXTRA_PATCHES должны быть перед `.include <bsd.port.pre.mk>' и не частью цели. Если глянуть в <bsd.port.mk>, то патчи из EXTRA_PATCHES применяются раньше патчей из PATCHDIR.
Мне надо, что бы патчи накладывались после выполнения make. Сразу объясню почему - первая опция компилирует порт с gcc третьей версии,
которая не знает опции "native" у переменной "-march". Вторая - возможность устанавливать порт без документации (решил оставить, ибо мейнтейнер порта не я, но приходится его активно поддерживать)
Гость писал(а):а зачем тебе накладывать патчи после установки порта?
мне до установки надо.

Гость
проходил мимо

Re: Правка порта

Непрочитанное сообщение Гость » 2009-03-10 23:55:56

_Andy писал(а):Мне надо, что бы патчи накладывались после выполнения make. Сразу объясню почему - первая опция компилирует порт с gcc третьей версии,
которая не знает опции "native" у переменной "-march". Вторая - возможность устанавливать порт без документации (решил оставить, ибо мейнтейнер порта не я, но приходится его активно поддерживать)
что за порт? ты дал слишком мало контекста, чтобы понять как решить твою воображаемую проблему правильно.
  • что такое ``после выполнения make''? make может вызываться из родительской папки или meta-портом.
  • зачем ты в порте используешь -march? проблемы жесткой оптимизации должны решаться там же где и создаются, т.е. в make.conf.
  • NOPORTDOCS лучше из OPTIONS убрать, если конечно он не тянет за собой какой-нить огромный багаж типа teTeX или doxygen
_Andy писал(а):
Гость писал(а):а зачем тебе накладывать патчи после установки порта?
мне до установки надо.
(Гость: -20 экспы к дару телепатии)

Andy
ст. лейтенант
Сообщения: 1117
Зарегистрирован: 2007-03-04 7:48:58
Откуда: Mytischi

Re: Правка порта

Непрочитанное сообщение Andy » 2009-03-11 8:11:11

Гость писал(а):что за порт? ты дал слишком мало контекста, чтобы понять как решить твою воображаемую проблему правильно.

Код: Выделить всё

${PORTSDIR}/www/free-sa/
Загляните в Makefile этой программы.
Гость писал(а):
  • что такое ``после выполнения make''? make может вызываться из родительской папки или meta-портом.
Родительская директория, не метапорт.
Гость писал(а):[*]зачем ты в порте используешь -march? проблемы жесткой оптимизации должны решаться там же где и создаются, т.е. в make.conf.
-march используется в программе, а именно задается в global.mk
Гость писал(а):[*]NOPORTDOCS лучше из OPTIONS убрать, если конечно он не тянет за собой какой-нить огромный багаж типа teTeX или doxygen[/list]
Я оставил ее потому, что она сделана автором порта. Раз она была сделана, значит это кому-нибудь надо.
Гость писал(а):(Гость: -20 экспы к дару телепатии)
Jul 16 19:37:15 freebsd sshd[4152]: Invalid user idiot from 210.75.200.104

Гость
проходил мимо

Re: Правка порта

Непрочитанное сообщение Гость » 2009-03-12 19:16:30

лучше поменяй `=' на `+=' в global.mk и будет тогда тебе оптимизация прямо из make.conf(5). Т.е. добавяться дефолтные `-O2 -pipe -fno-strict-aliasing' и добавить `-march=native', если ты указал `CPUTYPE?=native' в make.conf. Те, у кого gcc и так не поддерживает native, не будут его ставить в CPUTYPE, а это пользователи 6-STABLE.

Код: Выделить всё

Index: www/free-sa/Makefile
===================================================================
RCS file: /home/csup/ports/www/free-sa/Makefile,v
retrieving revision 1.13
diff -u -p -r1.13 Makefile
--- www/free-sa/Makefile	30 Dec 2008 23:55:22 -0000	1.13
+++ www/free-sa/Makefile	12 Mar 2009 16:12:08 -0000
@@ -23,6 +23,7 @@ MAN5=	free-sa.conf.5
 
 post-patch:
 	@${REINPLACE_CMD} -e 's,PREFIX =,PREFIX ?=,' ${WRKSRC}/global.mk
+	@${REINPLACE_CMD} -e 's,^CFLAGS =,CFLAGS +=,' ${WRKSRC}/global.mk
 
 .if defined(NOPORTDOCS)
 EXTRA_PATCHES+=	${FILESDIR}/extra-patch-Makefile
Если тебе нужно больше оптимизации, то добавляешь ее в make.conf. Напр,

Код: Выделить всё

.if ${.CURDIR:M*/www/free-sa}
 CFLAGS+=-O3
 CFLAGS+=-combine -fmerge-all-constants
.endif
Агрессивную оптимизацию как например в комментариях в global.mk мейнтейнер скорее всего отвергнет, т.к. она может повлиять на стабильность.

Гость
проходил мимо

Re: Правка порта

Непрочитанное сообщение Гость » 2009-04-01 5:25:57

делать было нечего: ports/133261

Andy
ст. лейтенант
Сообщения: 1117
Зарегистрирован: 2007-03-04 7:48:58
Откуда: Mytischi

Re: Правка порта

Непрочитанное сообщение Andy » 2009-04-04 14:53:17

Гость писал(а):делать было нечего: ports/133261
Переделал по своему, но все равно спасибо за участие. Мне Сергей Осокин подсказал как надо сделать:
Если используется ключ OPTIONS, это значит, что переменные, описанные
в этому ключе будут доступны с префиксом WITH_/WITHOUT_. Соответственно,
в вашем случае это WITH_FBSD, WITHOUT_FBSD, WITH_NOPORTDOCS, WITHOUT_NOPORTDOCS.

http://www.freebsd.org/doc/en_US.ISO885 ... ml#AEN2441
Как это выглядит:

Код: Выделить всё

OPTIONS=         FBSD "Build for FreeBSD 7.X" off \
                 NOPORTDOCS  "Build without port documentation" off \

.include <bsd.port.pre.mk>

post-patch:

.if defined(WITH_NOPORTDOCS)
EXTRA_PATCHES+= ${FILESDIR}/extra-patch-Makefile
.endif

.if defined(WITH_FBSD)
 EXTRA_PATCHES+= ${FILESDIR}/extra-patch-global-native.mk
.else
 EXTRA_PATCHES+= ${FILESDIR}/extra-patch-global-i386.mk
.endif
Jul 16 19:37:15 freebsd sshd[4152]: Invalid user idiot from 210.75.200.104

Гость
проходил мимо

Re: Правка порта

Непрочитанное сообщение Гость » 2009-04-04 15:45:50

Andy писал(а):
Гость писал(а):
  • NOPORTDOCS лучше из OPTIONS убрать, если конечно он не тянет за собой какой-нить огромный багаж типа teTeX или doxygen
Я оставил ее потому, что она сделана автором порта. Раз она была сделана, значит это кому-нибудь надо.
а почему тогда OPTIONS нет в CVS?

Andy
ст. лейтенант
Сообщения: 1117
Зарегистрирован: 2007-03-04 7:48:58
Откуда: Mytischi

Re: Правка порта

Непрочитанное сообщение Andy » 2009-04-04 16:23:47

Гость писал(а):а почему тогда OPTIONS нет в CVS?
Хороший вопрос. А почему она должна там быть? Я не являюсь мейнтейнером данного порта, я всего лишь
поддерживаю его в актуальном состоянии.
P.S: А можно узнать, что там llvm? Программа в нем не собирается вообще?
Jul 16 19:37:15 freebsd sshd[4152]: Invalid user idiot from 210.75.200.104

Гость
проходил мимо

Re: Правка порта

Непрочитанное сообщение Гость » 2009-04-04 22:50:22

Andy писал(а):
Гость писал(а):не уловил тенденции: в чем смысл генерить shar'ы вместо diff'ов? diff'ы меньше размером и читать их легче (сразу видно, что изменено и что нет)
Там надо структуру порта переделать, например файл patch-global.mk нужно удалить.
открой для себя опцию `-N' у diff(1), открой для себя, наконец, CVS и помести в ~/.cvsrc

Код: Выделить всё

cvs -qz6
update -PdA
diff -upN
rdiff -upN
checkout -P
патчик потом легко генерируется по изменениям с помощью cvs diff, а в PR'ах потом создаются удобные ссылки на ,v-файлы вида: /home/csup/ports/x11-fonts/dejavu/Makefile, где
/home/csup/ports/... - путь к моей копии репозитория,
http://www.FreeBSD.org/cgi/cvsweb.cgi/ports/... - ссылку, кою добавляет система PR автоматически
Andy писал(а):
Гость писал(а):BTW, совет pav@'а не трогать `-march' и CFLAGS ты проигнорировал?
Да. Пусть не пальцы не кидает, а толком объясняет.
Гость писал(а):Вот что происходит с WITHOUT_FBSD на amd64

Код: Выделить всё

l_squid_native.c:1: error: CPU you selected does not support x86-64 instruction set
l_squid_native.c:1: error: CPU you selected does not support x86-64 instruction set
Сие из-за -march=i386.
А вот что происходит с WITH_FBSD и CC=ccc (llvm)

Код: Выделить всё

clang-cc: for the -O option: : '4' invalid optimization level!
NOPORTDOCS обычно никто внутрь OPTIONS не пихает
Это под llvm? gcc они убрали?
нет, у меня llvm стоит отдельным портом + в базовой системе от Makefile'ов из ветки llvm-bmake. Я использую для разных портов разные компиляторы и разные CFLAG'и, меняя их в make.conf. Белый список для clang/llvm и черный список для gcc44.
Отсюда вопрос, зачем ты мне усложняешь жизнь кривыми CFLAGS?
Andy писал(а):
Гость писал(а):а почему тогда OPTIONS нет в CVS?
Хороший вопрос. А почему она должна там быть?
в CVS ее нет, в OPTIONS нет, а так она там есть. NOPORTDOCS часто ставиться глобально через make.conf, а OPTIONS такого не умеет.
Вопрос: нафига ты ее в OPTIONS поставил, переменную-то?
Andy писал(а):P.S: А можно узнать, что там llvm? Программа в нем не собирается вообще?
собирается, если не трогать CFLAGS

Гость
проходил мимо

Re: Правка порта

Непрочитанное сообщение Гость » 2009-04-04 22:52:26

Гость писал(а):/home/csup/ports/x11-fonts/dejavu/Makefile, где
/home/csup/ports/... - путь к моей копии репозитория,
http://www.FreeBSD.org/cgi/cvsweb.cgi/ports/... - ссылку, кою добавляет система PR автоматически
пример из ports/133146

Гость
проходил мимо

Re: Правка порта

Непрочитанное сообщение Гость » 2009-04-04 23:01:28

Гость писал(а):собирается, если не трогать CFLAGS
по дефолту добавляются (-O2 -pipe -combine -ftree-vectorize -march=native -fno-strict-aliasing), где
-march=native появляется из-за того, что у мя стоит `CPUTYPE?=native' в make.conf,
а -combine и -ftree-vectorize из-за того, что у мя стоит `CFLAGS+= -combine -ftree-vectorize' в make.conf

на девственно чистой системе без make.conf будет только `-O2 -pipe -fno-strict-aliasing', но поскольку порт www/free-sa кривой и использует `=' вместо `+=', то в нем эти CFLAG'и не добавляются

Гость
проходил мимо

Re: Правка порта

Непрочитанное сообщение Гость » 2009-04-04 23:23:17

Andy писал(а):
Гость писал(а):BTW, совет pav@'а не трогать `-march' и CFLAGS ты проигнорировал?
Да. Пусть не пальцы не кидает, а толком объясняет.
он дело говорит, что
  • все порты должны использовать глобальные CFLAGS из /usr/share/mk/sys.mk + свои, а не только свои. По крайней мере, если на то нет веской причины (напр, баги).
  • -O4 нет в gcc, ни в gcc34, ни в gcc44; -O4 есть в llvm-gcc4 и называется LTO (link time optimization)
    llvm-gcc4(1) писал(а): -O4 Enable LLVM Link Time Optimization. -O4 turns on all LLVM compile time optimizations specified by -O2.
    , но это только в gcc4 frontend'е, в clang'е такого нет

Andy
ст. лейтенант
Сообщения: 1117
Зарегистрирован: 2007-03-04 7:48:58
Откуда: Mytischi

Re: Правка порта

Непрочитанное сообщение Andy » 2009-04-04 23:23:59

Гость писал(а):открой для себя опцию `-N' у diff(1), открой для себя, наконец, CVS и помести в ~/.cvsrc

Код: Выделить всё

cvs -qz6
update -PdA
diff -upN
rdiff -upN
checkout -P
diff с ключами -ruN использую. Я так понял, Вы мне предлагаете в cvs хранить все изменения на локальном компьютере? Так?
Гость писал(а): нет, у меня llvm стоит отдельным портом + в базовой системе от Makefile'ов из ветки llvm-bmake. Я использую для разных портов разные компиляторы и разные CFLAG'и, меняя их в make.conf.
А какой в этом смысл? Или это делается в целях тестирования сборки?
Гость писал(а):Белый список для clang/llvm и черный список для gcc44.
Отсюда вопрос, зачем ты мне усложняешь жизнь кривыми CFLAGS?
Я не понимаю, что есть кривые CFLAGS, на моей машине собирается, как Вы понимаете, я не могу перепробовать все компиляторы,
и все возможные конфигурации. Почему бы не откомпилировать gcc?
Гость писал(а):в CVS ее нет, в OPTIONS нет, а так она там есть. NOPORTDOCS часто ставиться глобально через make.conf, а OPTIONS такого не умеет.
Вопрос: нафига ты ее в OPTIONS поставил, переменную-то?
Повторюсь, опция присутствовала в оригинальном порте. Я решил ее оставить (если присутствует опция ставить без документации, значит это кому-нибудь надо. Я ставлю с доками). В наличии переменной options не вижу ничего плохого. Чем она Вам мешает? Она выполняет свою функцию? Выполняет. Что еще надо? Я не редактирую /etc/make.conf.
Гость писал(а):собирается, если не трогать CFLAGS
Я так понял, что BSD'шники собрались менять gcc на llvm. Если так, то они крепко наступают себе на яйца, впрочем, им не впервой с каменным лицом
в пропасть переть.
Jul 16 19:37:15 freebsd sshd[4152]: Invalid user idiot from 210.75.200.104

Гость
проходил мимо

Re: Правка порта

Непрочитанное сообщение Гость » 2009-04-05 0:18:19

Andy писал(а):diff с ключами -ruN использую.
тогда смысл вот этого
Andy писал(а):Там надо структуру порта переделать, например файл patch-global.mk нужно удалить.
если файл отсутствует/удален, то в diff'е будут одни `+' (плюсы) или одни `-' (минусы).
Andy писал(а):Я так понял, Вы мне предлагаете в cvs хранить все изменения на локальном компьютере? Так?
не обязательно в CVS. VCS позволяет не забыть какие изменения ты в нес, когда и почему.
Andy писал(а):
Гость писал(а):нет, у меня llvm стоит отдельным портом + в базовой системе от Makefile'ов из ветки llvm-bmake. Я использую для разных портов разные компиляторы и разные CFLAG'и, меняя их в make.conf.Белый список для clang/llvm и черный список для gcc44.
А какой в этом смысл? Или это делается в целях тестирования сборки?
у разных людей разная конфигурация. Менять CC и CFLAGS в make.conf - устоявшаяся практика. www/free-sa один из немногих портов, кой игнорирует глобальные CFLAGS. Бывают совсем кривые, кои даже CC игнорируют.
Andy писал(а):
Гость писал(а):Отсюда вопрос, зачем ты мне усложняешь жизнь кривыми CFLAGS?
Я не понимаю, что есть кривые CFLAGS, на моей машине собирается,
а теперь попробуй собрать на amd64, выключив FBSD в опциях. Хотя бы в qemu попробуй. Поскольку FBSD выключен по дефолту, то build cluster тоже натолкнется на сию проблему генерирования 64-битного бинарника с -march=i386.
Andy писал(а):как Вы понимаете, я не могу перепробовать все компиляторы, и все возможные конфигурации.
ну так тебя никто и не просит, но зачем усложнять жизнь другим?
Andy писал(а):Почему бы не откомпилировать gcc?
чем большим кол-вом компиляторов порт может компилироваться, тем лучше. Или ты другого мнения?
Andy писал(а):Повторюсь, опция присутствовала в оригинальном порте.
Где? Ни в одной ревизии не было. Посмотри сам начиная с 1.1. NOPORTDOCS появилась в 1.8, но в OPTIONS ее нет.
Andy писал(а):В наличии переменной options не вижу ничего плохого. Чем она Вам мешает?
  • имеет две приставки `with' и `no'
  • игнориует NOPORTDOCS=yes в make.conf, ибо требует с приставкой `with' или `without'
Если так хочешь ее оставить, то переименуй ее. Напр

Код: Выделить всё

OPTIONS=	DOCS

.if defined(NOPORTDOCS) || defined(WITHOUT_DOCS)
EXTRA_PATCHES+= ${FILESDIR}/extra-patch-Makefile
.endif
Andy писал(а):Она выполняет свою функцию? Выполняет.
неа, она ломает изменения мейнтейнера в 1.8. После твоих изменений NOPORTDOCS=yes игнорируется.
Andy писал(а):Я так понял, что BSD'шники собрались менять gcc на llvm. Если так, то они крепко наступают себе на яйца, впрочем, им не впервой с каменным лицом
в пропасть переть.
gcc будет доступен из портов

Andy
ст. лейтенант
Сообщения: 1117
Зарегистрирован: 2007-03-04 7:48:58
Откуда: Mytischi

Re: Правка порта

Непрочитанное сообщение Andy » 2009-04-05 9:43:09

Гость писал(а):если файл отсутствует/удален, то в diff'е будут одни `+' (плюсы) или одни `-' (минусы).
я этого не знал.
Гость писал(а):не обязательно в CVS. VCS позволяет не забыть какие изменения ты в нес, когда и почему.
иными словами, применять rcsdiff?
Гость писал(а):у разных людей разная конфигурация. Менять CC и CFLAGS в make.conf - устоявшаяся практика. www/free-sa один из немногих портов, кой игнорирует глобальные CFLAGS. Бывают совсем кривые, кои даже CC игнорируют.
Игнорирует тем, что подставляет свои?
Гость писал(а):а теперь попробуй собрать на amd64, выключив FBSD в опциях. Хотя бы в qemu попробуй. Поскольку FBSD выключен по дефолту, то build cluster тоже натолкнется на сию проблему генерирования 64-битного бинарника с -march=i386.
Хорошо, что же тогда использовать?
Гость писал(а):чем большим кол-вом компиляторов порт может компилироваться, тем лучше. Или ты другого мнения?
Есть сомнения, если порт откомпилирован gcc, где гарантии, что на выходе я получу такой же код в llvm? Тем паче, если я верно понимаю,
этот llvm виртуальная машина, транслирующая код в "средний уровень" (свой набор регистров и команд), как результат - just in time compilation.
http://en.wikipedia.org/wiki/Llvm
Гость писал(а):Посмотри сам[/url] начиная с 1.1. NOPORTDOCS появилась в 1.8, но в OPTIONS ее нет.
В OPTIONS ее я добавил, дабы такая возможность была видна. Как я уже говорил, я противник установки порта без документации.
Гость писал(а):
  • имеет две приставки `with' и `no'
  • игнориует NOPORTDOCS=yes в make.conf, ибо требует с приставкой `with' или `without'
Если так хочешь ее оставить, то переименуй ее. Напр

Код: Выделить всё

OPTIONS=	DOCS

.if defined(NOPORTDOCS) || defined(WITHOUT_DOCS)
EXTRA_PATCHES+= ${FILESDIR}/extra-patch-Makefile
.endif
Так Вы говорили о том, что опция отменяет заданное в /etc/make.conf? Тогда, конечно, ее стоит переименовать.
Гость писал(а):gcc будет доступен из портов
Телепатирую, в bsd он помешал тем, что он gnu. :)
Итак, давайте резюмируем фронт работы с целью изменения порта, что бы он удовлетворял
полиси и пожеланиям радиослушателей:
1. Переименовываем NOPORTDOCS в WITHOUT_DOCS
2. Изменяем конфиги для native и i386 сборок. Что туда следует добавить?
3. ?????
4. PROFIT
Jul 16 19:37:15 freebsd sshd[4152]: Invalid user idiot from 210.75.200.104

Гость
проходил мимо

Re: Правка порта

Непрочитанное сообщение Гость » 2009-04-05 12:13:50

Andy писал(а):
Гость писал(а):если файл отсутствует/удален, то в diff'е будут одни `+' (плюсы) или одни `-' (минусы).
я этого не знал.
в man, или точнее в info чаще заглядывай

Код: Выделить всё

$ info Diff
не зря ж text/x-patch и text/x-diff - одно и то же. Есть еще бинарные патчи от bsdiff(1), но это удел проприетарщиков.
Andy писал(а):иными словами, применять rcsdiff?
я использую CVS, ибо порты уже в ней и у меня не так много изменений
Andy писал(а):Игнорирует тем, что подставляет свои?
есть такое слово override, вот это он и делает. А теперь попробуй найти порт, кой такое делает? libiconv, gettext, bash, zsh, perl, wesnoth, rocskndiamonds... большинство их не трогает, но добавляет свои.
Andy писал(а):Хорошо, что же тогда использовать?
оставить в покое CFLAGS и поменять `=' на `+=', например как сделано в ports/133261 (на DEBUG_LEVEL не смотри, это хак). Таким образом если я сделаю

Код: Выделить всё

$ make -DWITH_DEBUG
, то порт соберется с символами (с опцией `-g' согласно DEBUG_FLAGS) и *без* оптимизации (что бывает важно при отладке). DEBUG определен в Mk/bsd.port.mk.
Andy писал(а):Есть сомнения, если порт откомпилирован gcc, где гарантии, что на выходе я получу такой же код в llvm?
если он написан в соответствии со стандартом (c89, c99..), то проблем быть не должно. А так тебе гарантий никто не даст даже при переходе с gcc42 на gcc43.

Вообще надо отдать должно разрабам за то, что они обвесили CPUTYPE костылями. Теперь чтобы использовать -march=core2 на gcc43 надо ставить CPUTYPE?=native (-march=native), ибо core2 автоматом заменяется либо на nocona (amd64) или prescott (i386). Логика в /usr/share/mk/bsd.cpu.mk. Впрочем, судя по строковому сравнению, можно заключить core2 в кавычки - "core2".
Andy писал(а):Тем паче, если я верно понимаю, этот llvm виртуальная машина, транслирующая код в "средний уровень" (свой набор регистров и команд), как результат - just in time compilation. http://en.wikipedia.org/wiki/Llvm
ты как-то криво википедию читал
LLVM
allows code to be compiled statically, as it is under the traditional GCC system, or left
for late-compiling from the IF to machine code in a just-in-time compiler (JIT) in a
fashion similar to Java.
ну так clang по дефолту так и делает, если не врубать -emit-llvm и не использовать lli. elf-файлы (точнее .o) можно статически линковать с скомпиленными в gcc.
Andy писал(а):В OPTIONS ее я добавил, дабы такая возможность была видна.
ага и убил NOPORTDOCS в пользу WITH_/WITHOUT_NOPORTDOCS.
Andy писал(а):Как я уже говорил, я противник установки порта без документации.
ну так по дефолту NOPORTDOCS не включена и порт ставитс *с* доками. Еще одна сломанная вещь в Mk/bsd.port.mk

Код: Выделить всё

.if defined(NOPORTDOCS)
PLIST_SUB+=             PORTDOCS="@comment "
.else
PLIST_SUB+=             PORTDOCS=""
.endif

Код: Выделить всё

# включаем NOPORTDOCS в make config
$ make install PREFIX=/var/tmp/aaa
...
$ make deinstall PREFIX=/var/tmp/aaa
===>  Deinstalling for www/free-sa
===>   Deinstalling free-sa-1.6.0
pkg_delete: file '/var/tmp/aaa/share/doc/free-sa-1.6.0/COPYING' doesn't exist
pkg_delete: file '/var/tmp/aaa/share/doc/free-sa-1.6.0/INSTALL' doesn't exist
pkg_delete: file '/var/tmp/aaa/share/doc/free-sa-1.6.0/README' doesn't exist
pkg_delete: file '/var/tmp/aaa/share/doc/free-sa-1.6.0/README.DEV' doesn't exist
pkg_delete: file '/var/tmp/aaa/share/doc/free-sa-1.6.0/ChangeLog' doesn't exist
pkg_delete: file '/var/tmp/aaa/share/doc/free-sa-1.6.0/FAQ' doesn't exist
pkg_delete: file '/var/tmp/aaa/share/doc/free-sa-1.6.0/THANKS' doesn't exist
pkg_delete: file '/var/tmp/aaa/share/doc/free-sa-1.6.0' doesn't exist
pkg_delete: unable to completely remove directory '/var/tmp/aaa/share/doc/free-sa-1.6.0'
pkg_delete: couldn't entirely delete package (perhaps the packing list is
incorrectly specified?)
все еще будешь настаивать на WITH_/WITHOUT_NOPORTDOCS?
Andy писал(а):Так Вы говорили о том, что опция отменяет заданное в /etc/make.conf?
опция нет, но благодаря ей NOPORTDOCS превращается в WITH_/WITHOUT_NOPORTDOCS, а сам NOPORTDOCS исчезает, что ломает bsd.port.mk и конфигурацию с NOPORTDOCS=yes в make.conf у людей.
Andy писал(а):Тогда, конечно, ее стоит переименовать.
может ее лучше просто оставить в покое, NOPORTDOCS-то? ;)
Andy писал(а):
Гость писал(а):gcc будет доступен из портов
Телепатирую, в bsd он помешал тем, что он gnu. :)
никто не хочет поддерживать gcc42, кой в недалеком будущем уйдет в EOL, а ближайший апдейт, gcc43, уже под GPLv3. Если исключить плюсы перехода на clang/llvm (оптимизация, более подробные сообщения об ошибках, etc.), то... Впрочем лучше прочесть весь тред Alternatives to gcc (was Re: gcc 4.3: when will it become standard compiler?)
Andy писал(а):Итак, давайте резюмируем фронт работы с целью изменения порта, что бы он удовлетворял
полиси и пожеланиям радиослушателей:
я не использую www/free-sa, меня можно игнорить