Я ищу исходный код для команды patch, используемой в Linux. Кто-нибудь знает, есть ли он в наличии?
Я ищу что-то совместимое с POSIX или, точнее, с QNX v7.
решение1
Существует несколько реализаций patch
команды в дикой природе,
busybox
например, поставляется со своей собственной. Вероятно, вы ищете исходный код, patch
с которым поставляется ваша система. Чтобы найти исходный код, вы должны знать, что вы ищете. Вам нужно проверить, какой пакет предоставляет patch
команду и где находится апстрим. Вы не указали, какую ОС вы используете, но в Debian вы можете сделать:
root@64ee32ea5ee6:/# dpkg -S "$(command -v patch)"
patch: /usr/bin/patch
root@64ee32ea5ee6:/# dpkg -s patch
Package: patch
Status: install ok installed
Priority: standard
Section: vcs
Installed-Size: 238
Maintainer: Ubuntu Developers <[email protected]>
Architecture: amd64
Multi-Arch: foreign
Version: 2.7.6-2ubuntu1.1
Depends: libc6 (>= 2.17)
Suggests: ed, diffutils-doc
Description: Apply a diff file to an original
Patch will take a patch file containing any of the four forms
of difference listing produced by the diff program and apply
those differences to an original file, producing a patched
version.
Homepage: http://savannah.gnu.org/projects/patch/
Original-Maintainer: Laszlo Boszormenyi (GCS) <[email protected]>
А в Slackware, например:
$ grep $(sed 's,^/,,' <<< "$(command -v patch)" ) /var/log/packages/* | cut -d: -f1
/var/log/packages/metamail-2.7-x86_64-7
/var/log/packages/patch-2.7.6-x86_64-3
/var/log/packages/patchelf-0.10-x86_64-1
$ cat /var/log/packages/patch-2.7.6-x86_64-3
PACKAGE NAME: patch-2.7.6-x86_64-3
COMPRESSED PACKAGE SIZE: 116K
UNCOMPRESSED PACKAGE SIZE: 290K
PACKAGE LOCATION: ./patch-2.7.6-x86_64-3.txz
PACKAGE DESCRIPTION:
patch: patch (apply a diff file to an original file or files)
patch:
patch: Patch is a utility used to apply diffs (or patches) to files, which
patch: are usually source code.
patch:
patch: Larry Wall wrote the original version of patch. Paul Eggert removed
patch: patch's arbitrary limits; added support for binary files, setting
patch: file times, and deleting files; and made it conform better to POSIX.
patch: Other contributors include Wayne Davison, who added unidiff support,
patch: and David MacKenzie, who added configuration and backup support.
patch:
В обоих случаях используется патч GNU, а описание пакета Debian даже содержит ссылку на домашнюю страницу проекта. http://savannah.gnu.org/projects/patchно в данный момент это не работает.
Также возможно, что вы хотите получить исходный код, который patch
вы в настоящее время используете в своей системе со всеми исправлениями и комментариями, добавленными сопровождающими пакетов. В Debian вы можете сделать:
$ apt-get source patch
решение2
Команда по умолчанию patch
по крайней мереДебиан(но, предположительно, также и в большинстве других дистрибутивов Linux) — GNU patch
.
patch
«Домашняя страница» проекта GNU — этоhttps://www.gnu.org/software/patch/
Эта страница содержит ссылки на обарепозитории программного обеспеченияизагружаемые архивы дистрибутивов.
Зеркало репозитория программного обеспечения на Github доступно по адресуhttps://github.com/mirror/patch
Системы BSD имеют альтернативную реализацию. Реализацию OpenBSD можно посмотреть наhttps://cvsweb.openbsd.org/src/usr.bin/patch/
решение3
Если вы используете Linux, вы, скорее всего, используете GNU patch, см.http://www.gnu.org, но patch
имеет долгую историю и существует в нескольких вариантах:
patch
— программа, первоначально написанная Ларри Уоллом в мае 1985 года.
Он опубликовал исходный код версии 1.3 в формате shar в группе новостей Usenet.mod.sources
.
Версия 2.0 была опубликована в 1986 году Ларри Уоллом в сообщении comp.sources.unix
(как mod.sources
впоследствии было переименовано), а последняя версия от Ларри Уолла была сделана в июне 1988 года.
Первоначальная лицензия от Ларри была следующей:
* This program may be copied as long as you don't try to make any
* money off of it, or pretend that you wrote it.
что не соответствует сегодняшним представлениям об ОСС, поскольку запрещает «зарабатывать» на этом деньги.
Поскольку такая сложная программа patch
требует внимания, существует несколько производных версий.
В 1990 году разработчики GNU выпустили версию GPLd, но, насколько мне известно, так и не удалось проверить, дал ли Ларри свое согласие на это изменение лицензии.
Версия с закрытым исходным кодом от IBM, HP, DEC и Sun была сделана в 1990-х годах. Она была сделана POSIX-совместимой, но так и не исправила все известные ошибки.
Около 10 лет назад OpenBSD и мной были созданы варианты без кода GPLd.
Примерно 5 лет назад Ларри дал разрешение разработчикам OpenBSD и мне использовать лицензию BSD с одним пунктом, чтобы сделать патч совместимым с OSS.
Хотя между мной и людьми из BSD существует своего рода обмен информацией об ошибках и проблемах безопасности, версия GNU существует отдельно.
Версия в schilytools
включает в себя дорогостоящий тестовый набор для исправления и сравнивает результаты с ожидаемыми результатами и с результатами локально установленной версии. Поскольку это (во многих случаях gpatch), ему нужно включать некоторые обходные пути каждый раз, когда он обнаруживает ошибку в установленной в системе версии ,-)
Страницу руководства для версии schilytools можно найти здесь:http://schilytools.sourceforge.net/man/man1/patch.1.html
Учитывая, что OP интересуется QNX, исходный код OpenBSD его не интересует, поскольку он непереносим. Schilytools весьма переносимы, хотя прошло уже много времени с момента последнего отзыва на компиляцию QNX. Так что если он больше не компилируется на QNX, отправьте намёк.
Кстати: патч GNU противоречит некоторым требованиям POSIX.