From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Sun, 8 May 2016 18:23:50 +0300 (MSK) From: Ivan Zakharyaschev To: ALT Linux Team development discussions In-Reply-To: Message-ID: References: User-Agent: Alpine 2.20 (LFD 67 2015-01-07) MIME-Version: 1.0 Content-Type: multipart/mixed; BOUNDARY="1807885841-1675135403-1462721030=:1850" Subject: Re: [devel] I: autoreqs in %_python3_path vs %_python3_compile_include X-BeenThere: devel@lists.altlinux.org X-Mailman-Version: 2.1.12 Precedence: list Reply-To: ALT Linux Team development discussions List-Id: ALT Linux Team development discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 08 May 2016 15:23:51 -0000 Archived-At: List-Archive: List-Post: This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. --1807885841-1675135403-1462721030=:1850 Content-Type: text/plain; charset=KOI8-R; format=flowed Content-Transfer-Encoding: 8BIT 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 > --1807885841-1675135403-1462721030=:1850--