Не знаю, как правильно задать вопрос, но смысл такой:есть порт на FreeBSD, он собрался и установился.
теперь я немного не удовлетворен его функциональностью и хочу изменить его. Иду в его исходники, дописываю нужный мне кусочек и говорю ему make.
Теперь возникает проблема: если говорю make в папке порта, то ничего не происходит, порт не пересобирается, даже если я удаляю все файлы *.o и собранный бинарник. А если говорю make в папке src, то мне вылетает куча ошибок.
Подскажите, что нужно сказать make, чтобы он пересобрал порт с моими исправлениями? Или как мне сделать так, чтобы мои исправления учитывались после команды make clean, потому что после нее от моих исправлений не остается и следа.
> Подскажите, что нужно сказать make, чтобы он пересобрал порт с моими исправлениями?
> Или как мне сделать так, чтобы мои исправления учитывались после команды
> make clean, потому что после нее от моих исправлений не остается
> и следа.Там в конфиге порта прописывается какие патчи нужно наложить при сборке.
ЗЫ: Он не даст вам его поставить, надо удалять установленный порт
> Там в конфиге порта прописывается какие патчи нужно наложить при сборке.
> ЗЫ: Он не даст вам его поставить, надо удалять установленный портА я его и не хочу устанавливать, просто хочу собрать и проверить работоспособность в папке с исходниками ( потому что все, что нужно для его работы уже установлено ). Если будет нормально работать, то тогда сделаю diff и пошлю разработчику. Потому что разработчик уже неделю молчит на своем сайте.
>> Там в конфиге порта прописывается какие патчи нужно наложить при сборке.
>> ЗЫ: Он не даст вам его поставить, надо удалять установленный порт
> А я его и не хочу устанавливать, просто хочу собрать и проверить
> работоспособность в папке с исходниками ( потому что все, что нужно
> для его работы уже установлено ). Если будет нормально работать, то
> тогда сделаю diff и пошлю разработчику. Потому что разработчик уже неделю
> молчит на своем сайте.Ну тогда делайте патчи, в make файле прописываете их и он будет сам их накладывать.
> Ну тогда делайте патчи, в make файле прописываете их и он будет
> сам их накладывать.Я правильно понимаю, что патч делается командой diff между исходным и справленным файлом? Если так, то я сейчас не могу сделать этот дифф, потому что у меня нет проверенного результата исправлений.
Похоже, я совсем ламер, что не могу ничего внятно объяснить и сделать :(
>> Ну тогда делайте патчи, в make файле прописываете их и он будет
>> сам их накладывать.
> Я правильно понимаю, что патч делается командой diff между исходным и справленным
> файлом? Если так, то я сейчас не могу сделать этот дифф,
> потому что у меня нет проверенного результата исправлений.
> Похоже, я совсем ламер, что не могу ничего внятно объяснить и сделать
> :(Да, правильно. diff -uN исходный исправленный > патч.
Вот здесь все описано в подробностях:
http://www.freebsd.org/doc/en/books/porters-handbook/book.ht...но если останутся вопросы - спрашивайте. А вообще, если честно, я не совсем понял что именно вы планируете исправить/улучшить. Можете поподробнее изложить. Пока я только понял, что по-умолчанию smstools3 использует не тот порт, что вам нужен. Точно нельзя указать в конфигурационном файле smstools, что что вам нужен /dev/ttyU0.2, а не /dev/ttyU0.0? Сам этим софтом не пользовался, поэтому не в курсе что и как.
> но если останутся вопросы - спрашивайте. А вообще, если честно, я не
> совсем понял что именно вы планируете исправить/улучшить. Можете поподробнее изложить.
> Пока я только понял, что по-умолчанию smstools3 использует не тот порт,
> что вам нужен. Точно нельзя указать в конфигурационном файле smstools, что
> что вам нужен /dev/ttyU0.2, а не /dev/ttyU0.0? Сам этим софтом не
> пользовался, поэтому не в курсе что и как.Ну вот в smsd.conf есть:
device = /dev/ttyS0это не оно?
> Пока я только понял, что по-умолчанию smstools3 использует не тот порт,
> что вам нужен. Точно нельзя указать в конфигурационном файле smstools, что
> что вам нужен /dev/ttyU0.2, а не /dev/ttyU0.0? Сам этим софтом не
> пользовался, поэтому не в курсе что и как.Дело не в умолчании. Просто программа работает с одним портом, а модем - с двумя. По тому порту, который в конфигурации - работают смс, там бегают AT команды. А на втором порту только приходят разные служебные сообщения из модема, в том числе и сообщения о приходящих звонках.
Поэтому мне, чтобы, кроме работы с смс, получать информацию о входящих звонках нужно, чтобы программа получала данные и со второго порта. Поэтому я просто хочу добавить еще один порт в конфиг и, если при старте программы он обнаружится, то открывать его и читать данные и отправлять их на обработку в основной поток принимаемых сообщений. А если такого параметра не будет, то и все будет работать, как раньше.
>[оверквотинг удален]
> - с двумя. По тому порту, который в конфигурации - работают
> смс, там бегают AT команды. А на втором порту только приходят
> разные служебные сообщения из модема, в том числе и сообщения о
> приходящих звонках.
> Поэтому мне, чтобы, кроме работы с смс, получать информацию о входящих звонках
> нужно, чтобы программа получала данные и со второго порта. Поэтому я
> просто хочу добавить еще один порт в конфиг и, если при
> старте программы он обнаружится, то открывать его и читать данные и
> отправлять их на обработку в основной поток принимаемых сообщений. А если
> такого параметра не будет, то и все будет работать, как раньше.А, вон оно что. Разве не правильнее в этом случае не порт править, я прямо автору[ам] smstools патч выслать, чтобы включили в последующую версию?
>[оверквотинг удален]
> теперь я немного не удовлетворен его функциональностью и хочу изменить его. Иду
> в его исходники, дописываю нужный мне кусочек и говорю ему make.
> Теперь возникает проблема: если говорю make в папке порта, то ничего не
> происходит, порт не пересобирается, даже если я удаляю все файлы *.o
> и собранный бинарник. А если говорю make в папке src, то
> мне вылетает куча ошибок.
> Подскажите, что нужно сказать make, чтобы он пересобрал порт с моими исправлениями?
> Или как мне сделать так, чтобы мои исправления учитывались после команды
> make clean, потому что после нее от моих исправлений не остается
> и следа.если нужно через порты то делай патчи и прописывай их в Makefile
посмотри любой большой порт как туда включаются патчи, и все будет красиво работать и clean и install
но, так же, никто не отменял традиционную установку из исходников ;) имхо будет быстрее
>[оверквотинг удален]
>> мне вылетает куча ошибок.
>> Подскажите, что нужно сказать make, чтобы он пересобрал порт с моими исправлениями?
>> Или как мне сделать так, чтобы мои исправления учитывались после команды
>> make clean, потому что после нее от моих исправлений не остается
>> и следа.
> если нужно через порты то делай патчи и прописывай их в Makefile
> посмотри любой большой порт как туда включаются патчи, и все будет красиво
> работать и clean и install
> но, так же, никто не отменял традиционную установку из исходников ;) имхо
> будет быстрееИз исходников пусть линуксойды ставят ))) Если есть порты, то лучше ставить из них, а мусор в системе не нужен ИМХО)
> Из исходников пусть линуксойды ставят ))) Если есть порты, то лучше ставить
> из них, а мусор в системе не нужен ИМХО)Я бы и не против исходников, только там, насколько я понял, куча патчей была применена и исходники уже стали приспособленными для системы. Они нормально собрались и установились.
Но я а хочу просто собрать по новому и в папке с исходниками проверить, как работает. Когда нормально будет работать, установить и после этого сделать для себя diff, чтобы потом можно было бы применять, когда порт поменяется.
А сейчас мне нужно как-то запустить make. Я просто не могу понять, что он проверяет, что не хочет еще раз собрать существующие исходники?
>[оверквотинг удален]
>> из них, а мусор в системе не нужен ИМХО)
> Я бы и не против исходников, только там, насколько я понял, куча
> патчей была применена и исходники уже стали приспособленными для системы. Они
> нормально собрались и установились.
> Но я а хочу просто собрать по новому и в папке с
> исходниками проверить, как работает. Когда нормально будет работать, установить и после
> этого сделать для себя diff, чтобы потом можно было бы применять,
> когда порт поменяется.
> А сейчас мне нужно как-то запустить make. Я просто не могу понять,
> что он проверяет, что не хочет еще раз собрать существующие исходники?Ну покажите Makefile что-ли. Причин куча может быть. А лучше выложите весь порт целиком.
>[оверквотинг удален]
>> патчей была применена и исходники уже стали приспособленными для системы. Они
>> нормально собрались и установились.
>> Но я а хочу просто собрать по новому и в папке с
>> исходниками проверить, как работает. Когда нормально будет работать, установить и после
>> этого сделать для себя diff, чтобы потом можно было бы применять,
>> когда порт поменяется.
>> А сейчас мне нужно как-то запустить make. Я просто не могу понять,
>> что он проверяет, что не хочет еще раз собрать существующие исходники?
> Ну покажите Makefile что-ли. Причин куча может быть. А лучше выложите весь
> порт целиком.Порт smstool3, проблема у меня в том, что модем при входящих звонках не реагирует на них, потому что порт для работы /dev/ttyU0.0, а сообщения о входящих звонках сыпятся на /dev/ttyU0.2. Поэтому я хочу сделать дополнительный параметр в конфиге для этого порта, чтобы при его наличии я мог открыть этот порт, читать сообщения оттуда и направлять их на обработку туда же, где и основной порт обрабатывается. Вот и все. Вроде все не сложно должно быть, потому что исходников не так много.
>[оверквотинг удален]
>> патчей была применена и исходники уже стали приспособленными для системы. Они
>> нормально собрались и установились.
>> Но я а хочу просто собрать по новому и в папке с
>> исходниками проверить, как работает. Когда нормально будет работать, установить и после
>> этого сделать для себя diff, чтобы потом можно было бы применять,
>> когда порт поменяется.
>> А сейчас мне нужно как-то запустить make. Я просто не могу понять,
>> что он проверяет, что не хочет еще раз собрать существующие исходники?
> Ну покажите Makefile что-ли. Причин куча может быть. А лучше выложите весь
> порт целиком.Невнимательно прочитал. Конечно без make clean ничего заново собираться не будет.
Вам нужно положить ваши патчи в директорию files/ порта.у имени файла обязательно должен быть префикс - patch.
Пример. Есть порт www/bbb:
Я хочу изменить одну строчку в файле src.c. Делаю make extract. Делаю копию src.c (src.c.orig). Делаю нужное изменение в src.c. Делаю diff -uN src.c.orig src.c > patch-src.c
Кидаю полученный файл в www/bbb/files/. Потом make clean и make - порт уже собирается с вашим патчем.
> Невнимательно прочитал. Конечно без make clean ничего заново собираться не будет.
> Вам нужно положить ваши патчи в директорию files/ порта.
> у имени файла обязательно должен быть префикс - patch.
> Пример. Есть порт www/bbb:
> Я хочу изменить одну строчку в файле src.c. Делаю make extract. Делаю
> копию src.c (src.c.orig). Делаю нужное изменение в src.c. Делаю diff -uN
> src.c.orig src.c > patch-src.c
> Кидаю полученный файл в www/bbb/files/. Потом make clean и make - порт
> уже собирается с вашим патчем.Спасибо, это выглядит более цивилизованным методом, чем сделал я.
Вот тут нашел: http://unix1.jinr.ru/~lavr/make-ports.html ( спасибо автору большое, раньше он здесь часто был ) :make - производит несколько операций, скачивание, накладывание патчей,
конфигурирование проекта перед сборкой и саму сборку, при необходимости,
мы можем выполнять по шагам вместо make:make fetch
make checksum
make depends
make extract
make patch
make configure
make buildвсе вышеуказанные действия могут быть выполнены самостоятельно и по шагам,
допустим мы хотим поправить некий порт под себя, шаги:- скачиваем порт:
# make fetch
- проверка контрольной суммы дистрибутива:
# make checksum
- разврачиваем дистрибутив в рабочую директорию, у большинства портов это
директория /usr/ports/category/portname/work
# make extract
- если используется многоплатформенный гнушный конфигуратор configure
# make configureтеперь мы можем наложить свои патчи, затем при помощи команды diff создать
нужные нам правки: файлы patch-xy, где xy - это буквы aa/ab/ac/... и тд и тп
и положить их в директорию files - все порт с нашими правками готов, теперь
можно его очистить:
# make clean
и собрать по шагам, чтобы убедиться что нет ошибок или затратить меньше
времени на их исправления, все - наш порт, порт с нашими правками готов.чтобы в реалии не выполнять make, а лишь посмотреть что будет сделано:
# make -n [install|или другие опции]
Единственное, что пока не до конца понятно, это в каком порядке применяются патчи. Там уже лежат файлы:# ls -l files/
-rw-r--r-- 1 root wheel 751 15 июн 2009 patch-Makefile
-rw-r--r-- 1 root wheel 1474 15 июн 2009 patch-install.sh
-rw-r--r-- 1 root wheel 892 7 июл 2010 patch-src-Makefile
-rw-r--r-- 1 root wheel 739 27 мар 2010 smsd.inЕсли я свои добавлю, то на каком этапе они применятся?
Потому что пробую делать так:
make configure ( следуя по найденной выше ссылке, чтобы применились параметры конфигурации - они там меняют в src тексты для разных путей )и выводятся сообщения :
===> Vulnerability check disabled, database not found
===> License GPLv2 accepted by the user
===> Found saved configuration for smstools-3.1.14
===> Extracting for smstools-3.1.14
=> SHA256 Checksum OK for smstools3-3.1.14.tar.gz.
===> Patching for smstools-3.1.14
===> Applying FreeBSD patches for smstools-3.1.14
===> smstools-3.1.14 depends on executable: gmake - found
===> smstools-3.1.14 depends on shared library: mm.14 - found
===> Configuring for smstools-3.1.14то есть вот там патчи применились.
А мои должны применяться уже после configure.
>[оверквотинг удален]
> ===> Found saved configuration for smstools-3.1.14
> ===> Extracting for smstools-3.1.14
> => SHA256 Checksum OK for smstools3-3.1.14.tar.gz.
> ===> Patching for smstools-3.1.14
> ===> Applying FreeBSD patches for smstools-3.1.14
> ===> smstools-3.1.14 depends on executable: gmake - found
> ===> smstools-3.1.14 depends on shared library: mm.14 - found
> ===> Configuring for smstools-3.1.14
> то есть вот там патчи применились.
> А мои должны применяться уже после configure.Тогда это нужно делать в таргете post-configure, и префикс у патчей должен быть другой. А почему это нужно делать после configure? Можно где-то на патчи посмотреть?
> Тогда это нужно делать в таргете post-configure, и префикс у патчей должен
> быть другой. А почему это нужно делать после configure? Можно где-то
> на патчи посмотреть?У меня пока их нет, я пока пробую получить их посредством diff, и собственно результат будет, когда я научусь:
1. Делать правильные патчи ( сейчас у меня почему-то они неправильные, в том смысле, что я знаю, какую строчку поменял и что получилось в патче )
2. Сделаю рабочий вариант программы ( она будет аккуратно открывать и закрывать порты, читать данные, обрабатывать их, вызывая нужную реакцию )
> У меня пока их нет, я пока пробую получить их посредством diff,
> и собственно результат будет, когда я научусь:
> 1. Делать правильные патчи ( сейчас у меня почему-то они неправильные, в
> том смысле, что я знаю, какую строчку поменял и что получилось
> в патче )Сделал командный файл, который генерит патчи, оказалось проблема была в том, что внутри патча у имен файлов должны быть пути относительно родительской папки исходников, то бишь:
# head files/patch-src-smsd__cfg.h
--- src/smsd_cfg.h.orig 2010-09-20 15:11:26.000000000 +0400
+++ src/smsd_cfg.h 2011-12-09 17:09:10.000000000 +0400
@@ -129,6 +129,7 @@Первая задача вроде решена.
После команды все патчи применились ( да: изменяю исходники, полученные после команды make extract, чтобы все шло согласно документации )
# make configure
===> Patching for smstools-3.1.14
===> Applying FreeBSD patches for smstools-3.1.14
===> smstools-3.1.14 depends on executable: gmake - found
===> smstools-3.1.14 depends on shared library: mm.14 - found
===> Configuring for smstools-3.1.14
> Вот тут нашел: http://unix1.jinr.ru/~lavr/make-ports.html ( спасибо автору большое,
> раньше он здесь часто был ) :
> теперь мы можем наложить свои патчи, затем при помощи команды diff создать
> нужные нам правки: файлы patch-xy, где xy - это буквы aa/ab/ac/... и
> тд и тп
> и положить их в директорию files - все порт с нашими правкамиЛучше смотрите commiters guide (ссылку я давал выше). А эта статья местами устарела.
Например имя патча в files/ должно быть вида patch-dir_file.name (patch-src_source.c), иначе у вас его просто не примут.
> Лучше смотрите commiters guide (ссылку я давал выше). А эта статья местами
> устарела.
> Например имя патча в files/ должно быть вида patch-dir_file.name (patch-src_source.c),
> иначе у вас его просто не примут.Да, как раз читаю и решил пойти по этому пути, как наиболее верному идеологически. Но пока в результате diff выходит какая-то фигня. Занимаюсь выковыриванием рук из одного места и вставкой их в правильное.
>[оверквотинг удален]
> теперь я немного не удовлетворен его функциональностью и хочу изменить его. Иду
> в его исходники, дописываю нужный мне кусочек и говорю ему make.
> Теперь возникает проблема: если говорю make в папке порта, то ничего не
> происходит, порт не пересобирается, даже если я удаляю все файлы *.o
> и собранный бинарник. А если говорю make в папке src, то
> мне вылетает куча ошибок.
> Подскажите, что нужно сказать make, чтобы он пересобрал порт с моими исправлениями?
> Или как мне сделать так, чтобы мои исправления учитывались после команды
> make clean, потому что после нее от моих исправлений не остается
> и следа.в папке порта на каждую стадию создается файл-флаг; их необходимо удалить
P.S. господа отвечающие! а вы не пробовали вникнуть в суть вопроса, прежде чем что-то отвечать?
P.P.S. удалить надо не все, иначе исходники порта будут заново распакованы, уничтожив тем самым все модификации; вообще, IMHO, плохая идея вмешиваться в работу автоматизированной системы, непредусмотренным способом, каковым, в частности, является модификация промежуточных (!) результатов ее работы
>[оверквотинг удален]
>> происходит, порт не пересобирается, даже если я удаляю все файлы *.o
>> и собранный бинарник. А если говорю make в папке src, то
>> мне вылетает куча ошибок.
>> Подскажите, что нужно сказать make, чтобы он пересобрал порт с моими исправлениями?
>> Или как мне сделать так, чтобы мои исправления учитывались после команды
>> make clean, потому что после нее от моих исправлений не остается
>> и следа.
> в папке порта на каждую стадию создается файл-флаг; их необходимо удалить
> P.S. господа отвечающие! а вы не пробовали вникнуть в суть вопроса, прежде
> чем что-то отвечать?А что не так?
> P.P.S. удалить надо не все, иначе исходники порта будут заново распакованы, уничтожив
> тем самым все модификации; вообще, IMHO, плохая идея вмешиваться в работу
> автоматизированной системы, непредусмотренным способом, каковым, в частности, является
> модификация промежуточных (!) результатов ее работыНу можно тогда сделать отдельную папку и в ней экспериментировать.
> в папке порта на каждую стадию создается файл-флаг; их необходимо удалить
> P.S. господа отвечающие! а вы не пробовали вникнуть в суть вопроса, прежде
> чем что-то отвечать?
> P.P.S. удалить надо не все, иначе исходники порта будут заново распакованы, уничтожив
> тем самым все модификации; вообще, IMHO, плохая идея вмешиваться в работу
> автоматизированной системы, непредусмотренным способом, каковым, в частности, является
> модификация промежуточных (!) результатов ее работы# ls -l /usr/ports/comms/smstools3/work/
-rw-r--r-- 1 root wheel 0 9 дек 08:51 .build_done.smstools._usr_local
-rw-r--r-- 1 root wheel 0 9 дек 08:51 .configure_done.smstools._usr_local
-rw-r--r-- 1 root wheel 0 9 дек 08:51 .extract_done.smstools._usr_local
-rw-r--r-- 1 root wheel 206 9 дек 08:51 .license-catalog.mk
-rw-r--r-- 1 root wheel 81 9 дек 08:51 .license-report
-rw-r--r-- 1 root wheel 0 9 дек 08:51 .license_done.smstools._usr_local
-rw-r--r-- 1 root wheel 0 9 дек 08:51 .patch_done.smstools._usr_local
drwxr-xr-x 6 root wheel 512 9 дек 08:51 smstools3Попробую удалить .build_done.smstools._usr_local, посмотрю, что получится.
Удалил, все скомпилировалось, спасибо.
Постараюсь аккуратно, чтобы ничего не сломать.
> P.P.S. удалить надо не все, иначе исходники порта будут заново распакованы, уничтожив
> тем самым все модификации; вообще, IMHO, плохая идея вмешиваться в работу
> автоматизированной системы, непредусмотренным способом, каковым, в частности, является
> модификация промежуточных (!) результатов ее работыВыше уже мне сказали правильный вариант действий, и я добавил найденное дополнение и буду теперь поступать правильно :)