Вход:  Пароль:  
FreeSource: TZ/AltLinux/WhiteLabel/MakeFile ...
Free Source | Каталог | Изменения | НовыеКомментарии | Пользователи | Регистрация |
Эта страница была перенесена на altlinux.org. Текст на freesource.info заморожен.

white labeling: makefile


Предлагается прийти примерно к такой компонентной схеме в терминах toplevel Makefile:

(здесь цели *.iso задают MKI_OUTPUT, цели base-* — IMAGE_PACKAGES для profiles/base, цели disk-* — GLOBAL_PKG_GROUPS и GLOBAL_DISK_PACKAGES для profiles/disk, и т.д.)


...и соответственно процедуре генерации, подобной:

обсуждение

boyarsh@

[13:41:47] <gvy> вообще не даёт покоя мысль о том, что я от make действительно добился странного %)
[13:42:35] <gvy> с другой стороны, у нас действительно получается набор данных, который по крайней мере отчасти должен(?) влиять на все компоненты
[13:43:16] <gvy> или попробовать собирать base/ в целях base-* и т.д., а потом всё в кучку?..
[13:44:10] <boyarsh> сложно сказать. Я, если честно, не вполне постиг то что ты вчера сделал
[13:46:37] <gvy> ну... изврат я сделал: заставил make собирать конфигурацию вместо кода
[13:46:48] <gvy> нарушив при этом http://make.paulandlesley.org/rules.html#rule2 %)
[13:46:59] <gvy> вот думаю, как вернуть на круги своя
# ...
[13:47:48] <gvy> наверное, то, что надо переключать глобально — просто всё унести в configure
[13:48:33] <gvy> а конфигурацию компонент и сами компоненты не пытаться по отдельности заковыривать-расковыривать, а прям по месту и собирать
[13:49:49] <boyarsh> звучит логично
[13:50:11] <gvy> собсно я какое-то время бился головой об стенку на тему того, как же ты собираешь desktop _плюс_ lite одним махом, пока не заглянул в твой make-all и не понял, что ошибался :)
[13:50:31] <gvy> (и забыл, что там несколько подходов)
[13:52:18] <boyarsh> да, одним махом я уже давно не собираю, хотя такое время было
[13:54:26] <gvy> <legion> вынесите в configure.ac + autoconfig.mk сделать + в Makefile сделать include “autoconfig.mk”
[13:54:34] <gvy> во, кажется, опять вырисовывается :)
# ...
[14:06:43] <gvy> вот думаю — а не место ли этим base-xfce: в profiles/Makefile.in, чтоб через голову (-C profiles/) лишний раз не прыгать
[14:07:11] <boyarsh> почему бы и нет..
# ...
[14:10:48] <boyarsh> я, наконец, отвязался от точных имён isoшек
[14:11:36] <boyarsh> чтоб можно было делать сразу правильное имя, а не переименовывать потом
[14:11:44] <gvy> я их, собсно, думаю переделать примерно на: distro-flavour-version-arch.iso
[14:11:47] <gvy> ага
[14:12:24] <gvy> собсно это были две вещи, которые мне сходу не понравились: зацепление на имя исошки и дизайна слишком многого, что следует не из них, а из того же, что и они

whiteowl@

[11:24:03] <WhiteOwl> обчно композячат переменные с составным именем
[11:24:19] <gvy> можешь пример показать?
[11:24:28] <WhiteOwl> CD_NAME = Lite
[11:24:38] <WhiteOwl> CD_LABEL = Lite
[11:24:53] <gvy> а потом $($())?
[11:24:59] <WhiteOwl> aha
[11:25:04] <gvy> комбинаторный взрыв
[11:25:10] <gvy> я как раз от него пытаюсь уйти :)
[11:25:34] <WhiteOwl> кому-то взрыв, кому-то – добрая традиция
[11:25:37] <WhiteOwl> :)

legion@

[15:45:10] <gvy> ну, получается ли вынести общую часть
[15:45:34] <legion> нет ничего невозможного
[15:45:44] <gvy> например, «базовые» disk/Makefile.in вида e.g.
# здесь была общая часть disk-*/Makefile.in #
[15:46:05] <gvy> (я сейчас с таким пробую lite-cd собрать)
[15:50:46] <legion> можно сделать ещё гибче
[15:51:29] <legion> советую поглядывать на unstable в mkimage.git


[11:14:48] <legion> попробуй сделать модульность через include
# ...
[11:18:55] <legion> из цели ты уже ничего сделать не сможешь
[11:19:35] <legion> конфигурацию нужно формировать до выполнения любых правил
# ...
[11:22:33] <legion> $(shell cat file1) – это плохая идея
[11:22:38] <gvy> ну вот и мне так кажется


[13:41:47] <gvy> вообще не даёт покоя мысль о том, что я от make действительно добился странного %)
[13:42:35] <gvy> с другой стороны, у нас действительно получается набор данных, который по крайней мере отчасти должен(?) влиять на все компоненты
[13:43:16] <gvy> или попробовать собирать base/ в целях base-* и т.д., а потом всё в кучку?..
[13:44:18] <legion> ничего не понял без контекста
[13:46:08] <gvy> ну... вместо
base-xfce:

echo base >> .subdirs
echo xfce > .base_package_lists
echo xfce-settings-@THEME@ > .base_packages

go:
[...]

GLOBAL_BASE_PACKAGES='$(shell cat .base_packages)' \
GLOBAL_BASE_PACKAGE_LISTS='$(shell cat .base_package_lists)' \
SUBDIRS='$(shell cat .subdirs)' \
INFO_NAME='$(shell cat .info_name)' \

[...]

setarch @ARCH@ make -C profiles

попробовать нечто вроде
base-xfce:

GLOBAL_BASE_PACKAGE_LISTS='xfce' setarch @ARCH@ make -C profiles/base

[13:49:16] <gvy> +то, что надо переключать глобально — просто всё унести в configure.ac
[13:52:28] <legion> вынесите в configure.ac + autoconfig.mk сделать + в Makefile сделать include “autoconfig.mk”
[13:52:44] <gvy> ммм... а что в autoconfig.mk ты бы положил?
[13:52:50] <legion> и все эти GLOBAL_BASE_PACKAGE_LISTS не нужны будут
[13:53:05] <gvy> export'ы?
[13:53:20] <legion> глобальные переменные
[13:53:27] <legion> SUBDIRS
[13:53:50] <gvy> а собсно можно туда же (или в components.mk?) и компоненты упихать, чтоб только правила _дистров_ остались, так?
[13:54:01] <legion> + переменные которые будут переключать выполения правил


[15:46:45] <gvy> вооон сверху, около “autoconfig.mk” — думаю унести цели вида base-xfce в profile/Makefile, из верхнего спускать туда стопку глобальных переменных, подставленных из «водопада» дефолтов плюс configure
[15:47:44] <legion> что будет делать цель base-xfce ?
[15:47:59] <legion> может не стоит делать отдельную цель ?
[15:48:52] <gvy> собирать base с указанием дополнительного списка пакетов (packages-lists/xfce) и того дизайна, который вывалился из configure с дефолтами
[15:49:04] <gvy> может, и не стоит...
[15:49:35] <gvy> просто хочется иметь возможность собрать этот же base и для, скажем, base-kde (в dvd)
[15:54:32] <legion> так я старался сделать чтобы это было возможно
[15:55:08] <legion> ты можешь передать параметры GLOBAL_* всем Makefile's
[15:56:35] <legion> также ты можешь изменить список пакетов
[15:57:17] <legion> список этот будет формировать в зависимости от параметров configure
[15:57:33] <legion> это же очень просто
[15:57:49] <legion> советую глянуть как сделано в mozilla.org
[15:57:57] <gvy> понимаешь, тут как... посмотри на ............./make-all
[15:58:09] <legion> они пользуются только autoconf + make
[15:59:15] <gvy> примерно так:
autoconf
make distclean
./configure --with-license=desktop --with-theme=desktop
make dvd installer rescue live
make distclean
./configure --with-license=junior-sl --with-theme=lite-school
make lite-cd
make distclean
./configure --with-theme=lite
make lite-cd live-lite
make distclean
[15:59:46] <gvy> бишь на один набор переменных а-ля license/design может приходиться несколько исошек, и это разумно
[16:00:06] <gvy> (я сперва попытался сделать, чтоб несколько дизайнов сразу можно было собрать, но это бред)
[16:00:18] <gvy> (в смысле решается несколькими configure)
[16:00:57] <legion> так что ты хочешь сделать-то ? :)
[16:02:44] <gvy> чтоб получилось где-то сказать
new-lite: installer base-xfce disk-xfce cd.iso #ещё что-то?
new-dvd: installer base-kde disk-kde disk-contrib dvd.iso
и эти base-* различались пакаджлистами на уровне переменных, а не форкнутыми base-*/
[16:03:20] <gvy> при этом в цели installer у них обоих собирается install2, только с разным тем же дизайном...
[16:04:04] <legion> если честно, то не вижу проблемы
[16:04:29] <gvy> ну... я тоже, кроме того, что туплю зело :)
[16:05:05] <gvy> мож форкнуть себе маленький profiles, поиграться в нём, а то развесистый кромсать сложнее...
[16:05:45] <gvy> а! вот проблема: так как бы сделать, чтоб можно было make new-lite new-dvd и каждому свой правильный base собрался?
[16:05:48] <legion> так пятница! _ВЫКЛЮЧИ_ телефон и комп и поспи ... а в воскресенье всё будет просто! :)
[16:06:02] <gvy> хм... :)
[16:06:55] <legion> сделай Makefile так:
include “config.mk”
include “autoconfig.mk”


[16:07:00] <legion> ой
[16:07:02] <legion> нее
[16:07:05] <legion> сейчас
[16:08:40] <legion> сделай Makefile так:
include “config.mk”
include “autoconfig.mk”


<Общие переменнные для N-ой стадии. Такие как PACKAGES и т.д.>


include “targets.mk”


[16:09:03] <legion> SUBDIRS будут выставляться в autoconfig.mk
[16:09:35] <legion> а в autoconfig.mk будет ряд условий выбора
[16:09:46] <legion> и разные переменные
[16:09:56] <gvy> ты дважды сказал autoconfig.mk?
[16:10:09] <legion> [17:08:34] <legion> сделай Makefile так:
include “config.mk”
include “autoconfig.mk”


<Общие переменнные для N-ой стадии. Такие как PACKAGES и т.д.>


include “targets.mk”
[16:10:12] <gvy> дык SUBDIRS у lite и dvd отличаются :)
[16:10:22] <legion> ну и что ?
[16:11:18] <legion> autoconfig.mk:
ifdef HAVE_LITE
SUBDIRS = something one
endif
ifdef HAVE_DVD
SUBDIRS = something two
endif


[16:12:05] <gvy> ну и как потом их оба состряпать? :) или по configure на каждый?
[16:13:04] <legion> configure --with-dvd --with-lite
[16:13:32] <gvy> ну и какие будут SUBDIRS? с e.g. contrib или без? :)
[16:13:47] <legion> бррррр
[16:14:00] <gvy> уф... ладно, пойду ещё думать. или отключусь на полчасика. а то только почём зря тебя отвлекать буду :(
[16:14:00] <legion> это же просто
[16:14:21] <gvy> да вот чую, что просто, но где — пока не вижу
[16:14:29] <legion> :)))

led@

[21:56:46] <gvy> Витя говорит, что toplevel Makefile в таком применении применён неадекватно, бишь тогда не make надо, а шелл какой или перл
[21:57:04] <gvy> в смысле что-то инструментальное, а не task oriented
[21:57:59] <gvy> собсно в чём проблема — тут уже обстоит немаленький кустик флаворов:
[21:58:37] <gvy> при этом некоторые из них друг от друга мало чем отличаются, но дублирование внутри mkimage-profiles-desktop/profile/*-* и в /Makefile идёт некислое...
[22:01:31] <gvy> соответственно хочется (и отчасти сделано):
сверху через configure спускать, с каким дизайном/ядром/языком собираем [и что?]
посрединке [или в configure же?] накладывать поверх умолчаний то, что сказали, и из более общих вещей выводить более частные (например, из типа дистрибутива — то, какие фичи в него войдут — как-то contrib или там wine-local)
внизу по возможности скармливать в унифицированные base/, disk/ (вместо base-*/, disk-*/) полученные стопки значений и получать куски нужного, которые потом собирать в исошку
[22:02:53] <gvy> пока заткнулся на том, что mkimage хочет получить SUBDIRS (например, base disk install2) и всё собирать одним присестом, отталкиваясь от profiles/Makefile (где к тому же собирается первая стадия с propagator)
[22:04:22] <Led> Может шелл-скрипт configure (с параметрами), на выходе получаем какой-то config.mk, а его, в свою очередь, include в основной Makefile?
[22:04:55] <gvy> ну вот где-то такое legion@ и предложил
[22:05:08] <gvy> у меня просто уже (или ещё?) в голову это всё не влазит
[22:05:31] <gvy> надо было взять маленький профилёк и переделать, а я схватился за самый развесистый, хоть и самый нужный :)
[22:06:18] <gvy> а! вспомнил, что с configure не так
[22:06:53] <gvy> сейчас получается сделать один configure (задав theme там и ещё чего) и собрать пачку исошек — навроде installer/cd/dvd
[22:07:05] <gvy> так придётся переконфигурить на каждом шаге
[22:07:13] <gvy> хотя, может, это и не больно...
[22:07:36] <gvy> (а придумать, как сделать --with-target=installer,cd,dvd — мне тоже оказалось слабо :)
[22:07:50] <Led> сначала прикинь, что нужно/можно вынести в config.mk, потом попробовать сделать несколько разных config.mk для разных назначений, потом сделать configure, генерящий config.mk
[22:08:08] <gvy> тут ещё какая штука: у нас фичи и носитель взаимосвязаны, но сложно сказать, что определяющее
[22:08:28] <gvy> бишь «мы лепим dvd, поэтому можно contrib» или «нам нужен contrib, поэтому делаем dvd»
[22:08:52] <gvy> хотя «носитель» тут чисто инфомационный суффикс (пока всё равно одни исошки)
[22:09:53] <Led> а в чём проблема с --with-target=installer,cd,dvd?
[22:10:38] <gvy> я не знаю, как выразить результат: понадобится ведь несколько запусков, поскольку у них общий base
[22:10:38] <Led> в Makefile будет что-то типа:
all: $(TARGETS)
[22:11:13] <gvy> хотя можно, наверное, вернуть кучу base-*, но при этом оставить в них строго разное
[22:11:14] <Led> а в config.mk
TARGETS=....
[22:11:18] <gvy> а в base/ собирать общее


Страницы, ссылающиеся на данную: TZ/AltLinux/WhiteLabel


 
Файлов нет. [Показать файлы/форму]
Комментариев нет. [Показать комментарии/форму]