ALT Linux Team development discussions
 help / color / mirror / Atom feed
* [devel] RFC: Правильная схема построения питон-модулей
@ 2004-02-12  2:24 Alexey Morozov
  2004-02-12 12:55 ` Alexey Morozov
  0 siblings, 1 reply; 2+ messages in thread
From: Alexey Morozov @ 2004-02-12  2:24 UTC (permalink / raw)
  To: ALT Devel discussion list

[-- 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

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [devel] RFC: Правильная схема построения питон-модулей
  2004-02-12  2:24 [devel] RFC: Правильная схема построения питон-модулей Alexey Morozov
@ 2004-02-12 12:55 ` Alexey Morozov
  0 siblings, 0 replies; 2+ messages in thread
From: Alexey Morozov @ 2004-02-12 12:55 UTC (permalink / raw)
  To: ALT Devel discussion list

[-- Attachment #1: Type: text/plain, Size: 477 bytes --]

В аттачменте находится поправленный файл макросов для python.
Изменения:

	* решена проблема с именованием пакетов, если версия питон не
	  задана явно. Теперь пакет все равно будет называться
	  pythonXY-module...
	* всегда проставляется соответствующий Requires: python = X.Y
	* чуть более внятная диагностика ошибки при попытке сказать
	  rpmbuild -ba pyModule.spec --with python22 --with python23

Комментарии принимаются. С радостью. Я бы даже сказал, с нетерпением :-)



[-- Attachment #2: python --]
[-- Type: text/plain, Size: 1309 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}}}) \
%{expand: %{expand:%%{?_with_python%{2}:%%%%global __python %(which python%1 2>/dev/null || echo `which python`)}}} \
%{expand: %{expand:%%{?_with_python%{2}:%%{!?__python_package_version:%%%%global __python_package_version %2}}}}

%check_python_version() \
%{expand: %%check_python_version_internal %{1} %(echo %1 | sed -e 's/\\.//g')}

%setup_python_module()	\
%{expand: %%global modulename %{1}} \
%(echo Provides: python-%{1} = %version-%release) \
%check_python_version 2.2 \
%check_python_version 2.4 \
%check_python_version 2.3 \
%{expand: %{expand: %%{!?__python_package_version:%%%%global __python_package_version %%(echo %%__python_version | tee -a aaa.log | sed -e 's/\\.//g')}}} \
%{expand: %%global packagename python%%{__python_package_version}-%%{modulename}} \
%(echo %{expand:Requires: python = %%__python_version})


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2004-02-12 12:55 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-02-12  2:24 [devel] RFC: Правильная схема построения питон-модулей Alexey Morozov
2004-02-12 12:55 ` Alexey Morozov

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