FreeSource: TZ/AltLinux/WhiteLabel/MakeFile

Эта страница была перенесена на 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