devel@ where you _can_ ask
 help / color / mirror / Atom feed
From: Ivan Zakharyaschev <imz@altlinux.org>
To: "devel@ where you _can_ ask" <devel-newbies@lists.altlinux.org>
Subject: Re: [newbies] Вопросы по укладке ghc разных версий в gear
Date: Mon, 28 May 2018 14:40:43 +0300 (MSK)
Message-ID: <alpine.LFD.2.20.1805281426440.3504@imap.altlinux.org> (raw)
In-Reply-To: <CAB_XSX0AnnGeeFjHS3KxonWrSLAjvfU7RhLBAWt0sg5crviPGQ@mail.gmail.com>

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

On Mon, 28 May 2018, Eugine Kosenko wrote:

> При попытке уложить экосистему ghc в gear возник ряд вопросов.
> 
> Прежде всего, не совсем понятно, когда стоит выделять ghc определенной
> версии в отдельное хранилище git?
> 
> Скажем, у меня собираются ghc версий 7.6.1, 7.10.1, 8.0.2, 8.2.2 и 8.4.2, и
> все они могут быть поставлены в систему одновременно, а переключение между
> ними производится через альтернативы либо через ghc_wrapper, который берет
> версию из переменной окружения.
> 
> Так много версий нужно, потому что 7.6.1 нужно для сборки 7.10.1, 7.10.1
> --- для сборки 8.0.2, а 8.0.2 --- для сборки 8.2.2 и 8.4.1. При этом 8.2.2
> и 8.4.1 собираются независимо, но для 8.2.2 собирается некоторая экосистема
> (скажем, stack, yesod и keter), в то время, как для 8.4.1 это пока
> невозможно (ну или, у меня это пока не получилось).
> 
> Ситуация очень похожа на ситуацию с gcc, где тоже есть каскадный бутстрап.
> И я очень многое пытаюсь сделать по образцу gcc. Но вот я вижу, что каждое
> поколение gcc имеет отдельное хранилище: gcc3.3, gcc3.4, ..., gcc6, gcc7.
> Тут непонятно, почему иногда выделена второе поле версии, а иногда нет?
> Неужели 3.3 и 3.4 настолько сильно отличались, что для них пришлось
> выделить отдельные пакеты? И как теперь стоит собрать версии ghc? Как 7.6,
> 7.10, 8.0, 8.2 и 8.4? Но ведь для сборки 8.4 не нужна 8.2?

Если коротко на этот вопрос отвечать, то получается так: в /gears/ 
создаются репозитории по имени каждого исходного пакета. Если в Sisyphus 
есть несколько пакетов, то и у каждого из них должен быть свой исходный.

Мейнтейнер при этом может для своего удобства работать с одним 
git-репозиторием (и может один иметь в /people/).

git-репозитории gcc* скорее всего имеют часть общей истории, потому что с 
ними так и происходит.

> И получается, что сейчас проще всего завести по отдельному хранилищу git
> для каждой версии ghc, но тогда мы теряем кучу преимуществ, которые дает
> нам хранение исходников в git.
> 
> И вообще, казалось бы логичным собрать весь этот зоопарк в одном хранилище
> git, и промаркировать отдельные версии. И для каждой ветки (или метки)
> всего лишь модифицировать спек таким образом, чтобы он из одного и того же
> подкаталога исходников в своей ветке формировал пакет с соответствующим
> именем. Например, один и тот же ghc.spec для одного и того же подкаталога
> исходников ghc в зависимости от ветки собирал бы пакеты ghc7.6.1, ghc7.10.1
> и так далее? Можно ли такое сделать в gear? И если можно, то почему так не
> сделано для gcc? Не связано ли это с тем, что система сборки репозитария,
> скажем, Сизифа, не может догадаться, какие ветки хранилища git собирать,
> чтобы получить все пакеты, доступные для установки в системе? Но мне

Все версии сразу не собирают. Но для каждой отдельной сборки можно указать 
свой тег, а внутри коммита по этому тегу будет лежать .gear/rules, где 
можно указать tree-ish (тег или коммит и путь), откуда брать исходники.

> кажется, такие подсказки сборщику вполне можно было бы дать. Или это очень
> сложно реализовать?
> 
> Есть еще один сложный вопрос по поводу того, что отдельные пакеты ghc могут
> одновременно собираться в для нескольких веток компилятора. Я не нашел
> такой аналогии в gcc (там версия glibc, как я понял, жестко привязана к
> версии gcc; или нет?). И мне непонятно, как в таком случае управлять
> спеками для таких пакетов. Но лучше пока разобраться с теми вопросами,
> которые я уже задал.

Да, над этим я тоже немного думал, когда подступался к этой задаче раньше. 
И у меня стал появляться некоторый план, не до конца продуманный. Идея 
была в том, чтобы по умолчанию собирать под дефолтную версию компилятора 
ghc. Т.е. при очередной пересборке пакета он мог переехать на новую версию 
компилятора.

При желании можно было бы собрать отдельный пакет под конкретную версию 
компилятора дополнительно (жёстко зафиксировав версию ghc в этом варианте 
спека; т.е. такой форк пакета произошёл бы).

           reply	other threads:[~2018-05-28 11:40 UTC|newest]

Thread overview: expand[flat|nested]  mbox.gz  Atom feed
 [parent not found: <CAB_XSX0AnnGeeFjHS3KxonWrSLAjvfU7RhLBAWt0sg5crviPGQ@mail.gmail.com>]

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=alpine.LFD.2.20.1805281426440.3504@imap.altlinux.org \
    --to=imz@altlinux.org \
    --cc=devel-newbies@lists.altlinux.org \
    /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

devel@ where you _can_ ask

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/devel-newbies/0 devel-newbies/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-newbies devel-newbies/ http://lore.altlinux.org/devel-newbies \
		devel-newbies@lists.altlinux.org devel-newbies@lists.altlinux.ru devel-newbies@lists.altlinux.com
	public-inbox-index devel-newbies

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.devel-newbies


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git