From: Alexey Morozov <alex@idisys.iae.nsk.su> To: ALT Devel discussion list <devel@altlinux.ru> Subject: [devel] RFC: Правильная схема построения питон-модулей Date: Thu, 12 Feb 2004 08:24:55 +0600 Message-ID: <20040212022455.GA23100@localhost.localdomain> (raw) [-- Attachment #1: Type: text/plain, Size: 1662 bytes --] Я тут слегка доработал схему сборки. Основные цели, которых пытался добиться: * лёгкая сборка для "основной" версии питона * минимум изменений в спек-файл * возможность собрать модуль для строго указанной версии питон, неконфликтующий по имени с "основным" * контроль за типичными ошибками (сборка под несуществующий питон, попытка одновременной сборки под несколько версий) Что получилось на выходе: * "типичный спек файл" (на примере pyserial) * файл макросов, который необходимо положить в /etc/rpm/macros.d/python, и который должен принадлежать какому-нибудь python-common * сборка осуществляется либо через rpmbuild -ba pyserial.spec либо через rpmbuild -ba pyserial.spec --with python<package_version> например rpmbuild -ba pyserial.spec --with python22 Особенности поведения (требуется доработка): * макросы %version и %release должны быть определены в момент вызова %setup_python_module * имя пакета должно определяться после вызова %setup_python_module через %packagename Чего добиться не удалось: * возможности инкрементального подключения новых версий питон, допустимые версии просто забиты в текст макрофайла * какая-то засада с макросом %error: про ошибку пишет, сборку не прекращает. Приходится выдумывать "ужасные методы" P.S. Brainfuck - фигня! Программирование на макроязыке RPM <censored> мозги почище всяких брэйнфаков! Как в макрофайле создать список неизвестной заранее длины а потом по нему проитерироваться я так и не понял. И эта черная магия с экспандом в экспанде. Я так и не понял, почему в одном случае обязательно надо делать вложенные экспанды, а в другом и так проканывает. [-- Attachment #2: python --] [-- Type: text/plain, Size: 1241 bytes --] # for an unknown reason %%error macro doesn't lead to immediate immediate abort # so we use BuildConflicts below as a headshot :-/ %check_python_version_internal() \ %{expand: %{expand:%%{?_with_python%{2}:%%{?__python_package_version:%%%%{error:Only one python version can be selected at a time}}}}} \ %(echo %{expand:%%{?_with_python%{2}:%%{?__python_package_version:BuildConflicts: python = %{1}}}}) \ %(echo %{expand:%%{?_with_python%{2}:BuildPreReq: python = %{1}}}) \ %(echo %{expand:%%{?_with_python%{2}:Requires: python = %{1}}}) \ %{expand: %{expand:%%{?_with_python%{2}:%%%%global __python %(which python%1 2>/dev/null || echo `which python`)}}} \ %{expand: %{expand:%%{?_with_python%{2}:%%%%global __python_package_version %2}}} %check_python_version() \ %{expand: %%check_python_version_internal %{1} %(echo %1 | sed -e 's/\\.//g')} %setup_python_module() \ %check_python_version 2.2 \ %check_python_version 2.4 \ %check_python_version 2.3 \ %{expand: %%{!?__python_package_version:%%global __python_package_version %%(echo %%__python_version | sed -e 's/\\.//g')}} \ %{expand: %%global modulename %{1}} \ %{expand: %%global packagename python%__python_package_version-%{1}} \ %(echo Provides: python-%1 = %version-%release) [-- Attachment #3: pyserial.spec --] [-- Type: text/plain, Size: 2941 bytes --] # -*- coding: utf-8 -*- %define version 2.0 %define release alt2 %setup_python_module pyserial Summary: Serial port access for python Summary(ru_RU.UTF-8): Доступ к последовательному порту из python Name: %packagename Version: %version Release: %release Source: %modulename-%version.zip License: Python Group: Development/Python Prefix: %_prefix Url: http://pyserial.sf.net # Automatically added by buildreq on Wed Jan 14 2004 BuildRequires: unzip %description This module capsulates the access for the serial port. It provides backends for standard Python running on Windows, Linux, BSD (possibly any POSIX compilant system) and Jython. The module automaticaly selects the appropriate backend. This module is built for python %__python_version %description -l ru_RU.UTF-8 С помощью этого модуля можно работать с последовательным портом в стандартном Python, запущенном на Windows, Linux, BSD (возможно, любой POSIX-совместимой системе) или Jython. Модуль автоматически выбирает подходящий для данной системы механизм доступа. Этот модуль собран для Python версии %__python_version %package -n python-%modulename-doc Summary: %modulename documentation and example programs Summary(ru_RU.UTF-8): Документация по API и примеры программ для %modulename Group: Development/Python Prefix: %_prefix Requires: python-%modulename = %version %description -n python-%modulename-doc %modulename provides portable way to access serial ports in various systems. Install python-%modulename-doc if you need API documentation and examples for this module %description -n python-%modulename-doc -l ru_RU.UTF-8 %modulename предоставляет унифицированный доступ к последовательному порту в разных системах. Установите python-%modulename-doc, если Вам требуется документация по API и примеры программирования с использованием данного модуля. %prep %setup -q -n %modulename-%version %build mkdir -p buildroot # Unfortunately build and install steps should be done at once # because otherwise .pyo files won't get into INSTALLED_FILES # record CFLAGS="%optflags" %__python setup.py \ install --optimize=2 \ --root=`pwd`/buildroot \ --record=INSTALLED_FILES %install cp -pr buildroot %buildroot/ unset RPM_PYTHON %files -f INSTALLED_FILES %doc changes.txt readme.txt %files -n python-%modulename-doc %doc examples %changelog * Wed Jan 14 2004 Alexey Morozov <morozov@altlinux.org> 2.0-alt1 - Initial build for ALT Linux
next reply other threads:[~2004-02-12 2:24 UTC|newest] Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top 2004-02-12 2:24 Alexey Morozov [this message] 2004-02-12 12:55 ` Alexey Morozov
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20040212022455.GA23100@localhost.localdomain \ --to=alex@idisys.iae.nsk.su \ --cc=devel@altlinux.ru \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
ALT Linux Team development discussions This inbox may be cloned and mirrored by anyone: git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \ devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru public-inbox-index devel Example config snippet for mirrors. Newsgroup available over NNTP: nntp://lore.altlinux.org/org.altlinux.lists.devel AGPL code for this site: git clone https://public-inbox.org/public-inbox.git