[devel] I: autoreqs in %_python3_path vs %_python3_compile_include
Ivan Zakharyaschev
imz на altlinux.org
Вс Май 8 18:23:50 MSK 2016
On Sun, 8 May 2016, Ivan Zakharyaschev wrote:
> Кортко мои рекомендайии сейчас такие:
>
> Чтобы включить Python3 в нестандартных местах, добавляйте его в
> %_python3_path .
>
> Чтобы отключить автокомпиляцию, добавляйте путь в %_python3_compile_exclude .
>
> Чтобы отключить автопоиск зависимостей (или Provides), есть (соответственно)
> %_findreq_skiplist (или %_findprov_skiplist).
>
> А %_python3_compile_include более внутренняя вещь, использовать не
> рекомендуется. Разница по сравнению с %_python3_path будет теперь в том, что
> питоновские автозависимости там не будут искаться. (Если нет других причин
> для этого, например, это не %_python3_path.)
%_python3_compile_exclude из _include исключается (например, при
обнаружении Provides, которых не жалко лишних досыпать, или зависимости на
python3-ABI). Спасибо aris@ за сообщение об ошибке в этом коде, которая
проявилась при сборке gedit. (Мало кто из пакетов пользуется
%_python3_compile_include.)
> На примере gedit:
>
> (Ещё одно пояснение: множества рядом с питоновскими завсимостями -- это
> множество нестандартных путей, по которым разрешено удовлетворять
> зависимость; т.е. чем больше множество, тем в большем кол-ве мест разрешено
> её искать; если только стандартные пути разрешены, то < 0 . Если у Provides
> нет множество, оно сможет удовлетворить любую зависимость. Это модуль по
> стандартному пути. Если есть множество -- здесь, в случае Provides, на самом
> деле, из одного элемента -- то удовлетворить соотвтетствующий Requires с < 0
> не сможет, а сможет, если только поппадёт в множество нестандартных
> разрешёёных у соотв. Requires путей.)
Так что в отличие от версий тут непривычно то, что меньшее множество у
Provides круче -- может удовлетворить больше требований. (Обычно большая
версия круче и может удовлетворить больше требований.) Развернуть знаки и
всю эту булеву алебру, конечно, возможно теоретически, но не очень
понятно, как бы мы тогда записывали самый крутой элемент. Сейчас просто по
смыслу это минимальное, т.е. пустое, множество. И его изобразить по смыслу
в Requires, не меняя форму большинства стандартных Provides, было просто.
> Теперь можно использовать %%_python3_path вместо %%_python3_compile_include
> --
> http://git.altlinux.org/people/imz/packages/gedit.git?p=gedit.git;a=commitdiff;h=85f11c9e317be5f12f067a6c07b0978f94764bad
> (при попытке навести порядок с autoreqs/provs сделал отличие, что в
> %%_python3_path питоновские зависимости ищутся, а в
> %%_python3_compile_include -- нет. Раньше по ошибке была такая ситуация, что
> они искались абы как: какие-то файлы считались Python3, какие-то нет,
> довольно случайно. Т.е. у кого-то чего-то не хватало, и это устраивало. А эти
> две переменные имели одинаковый эффект. Теперь, когда файлов выбирается
> больше, предусмотрел вариант такой ручки для тех, у кого раньше что-то не
> находилось и так устраивало.) С gedit всё нормально с полным поиском, я
> проверил сборку и так, и так. Ещё там адаптации spec-а, чтобы gear мог
> собирать --
> http://git.altlinux.org/people/imz/packages/gedit.git?p=gedit.git;a=log ,
> если интересно.
> С изменением на %_python3_path -- по-старому:
>
> [imz на basalt RPMS.hasher]$ for f in gedit-3.20.1-alt1.1.x86_64.rpm; do
> TERM=dumb compare_packages -a --requires --
> /ALT/Sisyphus/x86_64/RPMS.classic/"$f" -- "$f" ; done
> WARNING: terminal is not fully functional
> --- /tmp/.private/imz/compare_packages.sldjeD9soJ/1 2016-05-08
> 17:18:14.995541561 +0300
> +++ /tmp/.private/imz/compare_packages.sldjeD9soJ/2 2016-05-08
> 17:18:15.005541511 +0300
> @@ -28,26 +28,25 @@
> libpthread.so.0(GLIBC_2.2.5)(64bit)
> libxml2.so.2()(64bit) >=
> set:okF4idxwhMYlKufqO128vgLfSEGptPVPyDTbElmLK1puQ
> libxml2.so.2(LIBXML2_2.4.30)(64bit)
> -python3(codecs)
> -python3(fcntl)
> -python3(fnmatch)
> -python3(functools)
> -python3(hashlib)
> -python3(inspect)
> -python3(locale)
> -python3(platform)
> -python3(re)
> -python3(shutil)
> -python3(signal)
> -python3(string)
> -python3(subprocess)
> -python3(tempfile)
> -python3(traceback)
> -python3(weakref)
> -python3(xml)
> +python3(codecs) <= set:fea00
> +python3(fcntl) <= set:fea00
> +python3(fnmatch) <= set:fea00
> +python3(functools) <= set:fea00
> +python3(hashlib) <= set:fea00
> +python3(inspect) <= set:fea00
> +python3(locale) <= set:fea00
> +python3(platform) <= set:fea00
> +python3(re) <= set:fea00
> +python3(shutil) <= set:fea00
> +python3(signal) <= set:fea00
> +python3(string) <= set:fea00
> +python3(subprocess) <= set:fea00
> +python3(tempfile) <= set:fea00
> +python3(traceback) <= set:fea00
> +python3(weakref) <= set:fea00
> +python3(xml) <= set:fea00
> python3.5-ABI(64bit)
> rpmlib(PayloadIsLzma)
> -rpmlib(SetVersions)
> rtld(GNU_HASH)
> typelib(GLib)
> typelib(GObject)
> [imz на basalt RPMS.hasher]$
Обращает на себя внимание несовпадение вида ограничений у Requires и того,
что у Provides. Стал проверять -- работает-то правильно, это равные
множества:
$ /usr/lib/rpm/setcmp ed50 fea00
0
[imz на ovicaa ~]$ /usr/lib/rpm/setcmp fea00 ed50
0
$ echo /usr/lib64/gedit/plugins | /usr/lib/rpm/mkset 11
set:ed50
$ echo /usr/lib64/gedit/plugins | /usr/lib/rpm/mkset 12
set:fea00
$
Возможно, когда подсчитывается необходимое кол-во бит (по примеру
lib.req), я не удаляю дубликаты в пути в одном из этих случаев. (Стоит
поправить, но не критично.)
> Про Provides в нестандартных путях:
>
> [imz на basalt RPMS.hasher]$ fgrep non-std ~/wip/gedit/gear-hsh.excl.log.1
> /usr/src/tmp/gedit-buildroot/usr/lib64/gedit/plugins/externaltools/__init__.py
> provides python3(externaltools) (under non-std path /usr/lib64/gedit/plugins)
> [imz на basalt RPMS.hasher]$ for f in gedit-3.20.1-alt1.1.x86_64.rpm; do
> TERM=dumb compare_packages -a --provides --
> /ALT/Sisyphus/x86_64/RPMS.classic/"$f" -- "$f" ; done
> WARNING: terminal is not fully functional
> --- /tmp/.private/imz/compare_packages.gyI8myKUIW/1 2016-05-08
> 17:46:45.020000970 +0300
> +++ /tmp/.private/imz/compare_packages.gyI8myKUIW/2 2016-05-08
> 17:46:45.027000936 +0300
> @@ -1,3 +1,43 @@
> gedit = 3.20.1-alt1.1
> +python3(externaltools) = set:ed50
> +python3(externaltools.appactivatable) = set:ed50
> +python3(externaltools.capture) = set:ed50
> +python3(externaltools.filelookup) = set:ed50
> +python3(externaltools.functions) = set:ed50
> +python3(externaltools.library) = set:ed50
> +python3(externaltools.linkparsing) = set:ed50
> +python3(externaltools.manager) = set:ed50
> +python3(externaltools.outputpanel) = set:ed50
> +python3(externaltools.windowactivatable) = set:ed50
> python3(gedit)
> +python3(libdocinfo) = set:ed50
> +python3(libfilebrowser) = set:ed50
> +python3(libmodelines) = set:ed50
> +python3(libsort) = set:ed50
> +python3(libspell) = set:ed50
> +python3(libtime) = set:ed50
> +python3(pythonconsole) = set:ed50
> +python3(pythonconsole.config) = set:ed50
> +python3(pythonconsole.console) = set:ed50
> +python3(quickopen) = set:ed50
> +python3(quickopen.popup) = set:ed50
> +python3(quickopen.virtualdirs) = set:ed50
> +python3(snippets) = set:ed50
> +python3(snippets.appactivatable) = set:ed50
> +python3(snippets.completion) = set:ed50
> +python3(snippets.document) = set:ed50
> +python3(snippets.exporter) = set:ed50
> +python3(snippets.helper) = set:ed50
> +python3(snippets.importer) = set:ed50
> +python3(snippets.languagemanager) = set:ed50
> +python3(snippets.library) = set:ed50
> +python3(snippets.manager) = set:ed50
> +python3(snippets.parser) = set:ed50
> +python3(snippets.placeholder) = set:ed50
> +python3(snippets.shareddata) = set:ed50
> +python3(snippets.signals) = set:ed50
> +python3(snippets.singleton) = set:ed50
> +python3(snippets.snippet) = set:ed50
> +python3(snippets.substitutionparser) = set:ed50
> +python3(snippets.windowactivatable) = set:ed50
> python3.3(gedit)
> [imz на basalt RPMS.hasher]$
>
> Может пригодиться. (Возникло на самом деле не столько из желания иметь такую
> фичу, а из необходимости навести порядок со списком файлов, в которых ищутся
> авто-Provides/Requires. Как я говорил, оно было абы как: большая часть файлов
> не попадала, потому что считалась Python2, при этом часть из нестандартных
> путей всё равно могла попасть. Так что если их оставлять при более тщательном
> обширном составлении списка, то их надо было как-то специально оформить,
> чтобы они не обманывали тех, что использует только стандартные пути.)
>
> --
> Best regards,
> Ivan
>
Подробная информация о списке рассылки Devel