OberonCore
https://forum.oberoncore.ru/

Linux Console: метод кросс-разработки виндовым ББ
https://forum.oberoncore.ru/viewtopic.php?f=133&t=4088
Страница 1 из 2

Автор:  Евгений Темиргалеев [ Четверг, 20 Сентябрь, 2012 17:50 ]
Заголовок сообщения:  Linux Console: метод кросс-разработки виндовым ББ

Для пакета (1), по аналогии с пакетом LinSimpleConsole этот вопрос можно пока опустить, но для (2) и (3) нужно будет обязательно устроить мозговой штурм насчёт поиска как можно более простого способа кросс разработки на виндовом ББ. То что мне известно сейчас, имеет определённые минусы.

P.S. Есть одна идея, может быть сегодня успею проверить и представить вашему вниманию.

Автор:  Alexander Shiryaev [ Четверг, 20 Сентябрь, 2012 19:57 ]
Заголовок сообщения:  Re: Полная консольная (серверная) версия под Linux

Можно так сделать: чтобы был рабочий каталог, в котором не было бы ОС-зависимых файлов, и были бы каталоги (Windows, Linux, OpenBSD), в которых были бы только ОС-зависимые файлы, и был бы скрипт, который переключает конфигурацию из 4-х возможых: ОС-независимая, Windows, Linux, OpenBSD. При переключении конфигурации должны создаваться и удаляться символические ссылки на ОС-зависимые файлы из ОС-зависимых каталогов (Windows, Linux, OpenBSD) в рабочий каталог. Пример:

switch-none.sh:
Код:
#!/bin/sh

if [ -e System/Mod/Kernel.odc -a ! -h System/Mod/Kernel.odc ]; then
    echo Kernel.odc modified
    exit 1
fi

exec rm -rf Code/Kernel.ocf Sym/Kernel.osf System/Code/Kernel.ocf System/Sym/Kernel.osf System/Mod/Kernel.odc Host Lin Win Obsd BlackBox.exe blackbox *.so

switch-Windows.sh:
Код:
#!/bin/sh

./switch-none.sh || exit 1

ln -s ../../Windows/System/Mod/Kernel.odc System/Mod/
ln -s ../../Windows/System/Code/Kernel.ocf System/Code/
ln -s ../../Windows/System/Sym/Kernel.osf System/Sym/
ln -s Windows/Host
ln -s Windows/Win
ln -s Windows/BlackBox.exe

switch-Linux.sh:
Код:
#!/bin/sh

./switch-none.sh || exit 1

ln -s ../../Linux/System/Mod/Kernel.odc System/Mod/
ln -s ../../Linux/System/Code/Kernel.ocf System/Code/
ln -s ../../Linux/System/Sym/Kernel.osf System/Sym/
ln -s Linux/Host
ln -s Linux/Lin
ln -s Linux/libBB.so
ln -s Linux/blackbox

switch-OpenBSD.sh:
Код:
#!/bin/sh

./switch-none.sh || exit 1

ln -s ../../OpenBSD/System/Mod/Kernel.odc System/Mod/
ln -s ../../OpenBSD/System/Code/Kernel.ocf System/Code/
ln -s ../../OpenBSD/System/Sym/Kernel.osf System/Sym/
ln -s OpenBSD/Host
ln -s OpenBSD/Obsd
ln -s OpenBSD/libBB.so
ln -s OpenBSD/libdlobsdwrap.so
ln -s OpenBSD/blackbox


Тогда ещё вместо setup_script.py может быть будет работать такой:
Код:
#!/bin/sh

./switch-Windows.sh || exit 1

wine BlackBox.exe &

await until BlackBox started in wine

./switch-Linux.sh

Автор:  Илья Ермаков [ Четверг, 20 Сентябрь, 2012 20:42 ]
Заголовок сообщения:  Re: Полная консольная (серверная) версия под Linux

Относительно Kernel действительно приходится держать разные версии одного модуля; относительно остальных модулей стоит взять на вооружение принцип: одно имя модуля = одна версия (ну, только хронологически меняющаяся). Если есть вариативность - в динамически подключаемые реализации с разными именами.
Это реально, я три года назад делал серверное приложение, которое стартовало на двух ОС, в зависимости от того, какой пускач запустили. Все модули - в единственном экземпляре в основном каталоге.

Автор:  Евгений Темиргалеев [ Четверг, 20 Сентябрь, 2012 21:07 ]
Заголовок сообщения:  Re: Linux Console: метод кросс-разработки виндовым ББ

Чем меньше внешних инструментов используется, тем лучше. Приоритетное решение --- в рамках ББ. И оно должно быть как можно более простым. Задача у нас вполне конкретная, поэтому надо постараться лишнего не прихватить. :)

Автор:  Alexander Shiryaev [ Четверг, 20 Сентябрь, 2012 21:16 ]
Заголовок сообщения:  Re: Полная консольная (серверная) версия под Linux

Илья Ермаков писал(а):
... относительно остальных модулей стоит взять на вооружение принцип: одно имя модуля = одна версия (ну, только хронологически меняющаяся). Если есть вариативность - в динамически подключаемые реализации с разными именами.
Это реально, я три года назад делал серверное приложение, которое стартовало на двух ОС, в зависимости от того, какой пускач запустили. Все модули - в единственном экземпляре в основном каталоге.

Как тогда быть с Host?

Автор:  Евгений Темиргалеев [ Четверг, 20 Сентябрь, 2012 21:35 ]
Заголовок сообщения:  Re: Linux Console: метод кросс-разработки виндовым ББ

У меня вроде решение попроще наклюнулось. Нужно идти от конкретной задачи. Вкратце: заставить ББ читать определённые кодовые файлы из первичного каталога. В стандартный ББ линкуется один доп. модуль, реализующий обёртку над Files.Directory, отслеживающую операцию чтения из файлов (Old) с выдачей файлов подкаталога Code для данных подсистем только из первичного. Такой чуть модернизированный экзешник и используется для кросс-разработки.

В первичном --- виндовый ББ. Во вторичном определённый проект (под одну ОС). Из виндового ББ в гуе тестируются платформенно-независимые компоненты, прочее --- запуском тут же соотв. (в нашем случае консольного) пускача.

Более подробно и исходник в odc. На мой взгляд надо только детали утрясти --- достаточно ли "защиты" целых подсистем, или всё-таки нужен помодульный список, достаточно ли настройки в исходнике и пересборки.
Вложение:
X.odc [9 КБ]
Скачиваний: 517
Кажется, из этого можно заметочку поучительную оформить --- не только про кроссразработку, но и как пример использования абстракции Files. Есть желающие присоединиться?

P.S. Для теста --- во вторичном каталоге сделайте пустой файл Code/Init.ocf --- обычный ББ не будет запускаться.

Автор:  Илья Ермаков [ Четверг, 20 Сентябрь, 2012 22:06 ]
Заголовок сообщения:  Re: Полная консольная (серверная) версия под Linux

Alexander Shiryaev писал(а):
Как тогда быть с Host?


Так Host никем не импортируется (не должен).
Делайте Host_win и Host_lin.

Автор:  Илья Ермаков [ Четверг, 20 Сентябрь, 2012 22:08 ]
Заголовок сообщения:  Re: Linux Console: метод кросс-разработки виндовым ББ

Как бы там ни было, а вариативность кода одного модуля - ситуация, которую следует допускать только при крайней необходимости... Мы же не в Цы с ifdef :) У нас вместо этого динамическое подключение реализации. И каждая реализация имеет право на свой модуль :)

Автор:  Alexander Shiryaev [ Четверг, 20 Сентябрь, 2012 23:54 ]
Заголовок сообщения:  Re: Linux Console: метод кросс-разработки виндовым ББ

Хорошо, но:

в SystemContainers есть 'Dialog.Call("HostMenus...'
SystemXYplane импортирует HostPorts, HostWindows.

StdCmds: содержит 'Dialog.MapString("#Host:Properties...'
StdCoder: содержит 'HostTextConv'
StdLog импортирует HostDialog
StdMenuTool импортирует HostMenus
StdTabViews: 'Dialog.Call("HostTabFrames'
StdTables импортирует HostPorts.

Ещё Init и Config должны быть другими.

Автор:  Alexander Shiryaev [ Пятница, 21 Сентябрь, 2012 08:27 ]
Заголовок сообщения:  Re: Linux Console: метод кросс-разработки виндовым ББ

Евгений Темиргалеев писал(а):
У меня вроде решение попроще наклюнулось. Нужно идти от конкретной задачи. Вкратце: заставить ББ читать определённые кодовые файлы из первичного каталога. В стандартный ББ линкуется один доп. модуль, реализующий обёртку над Files.Directory, отслеживающую операцию чтения из файлов (Old) с выдачей файлов подкаталога Code для данных подсистем только из первичного. Такой чуть модернизированный экзешник и используется для кросс-разработки...

Так можно просто BlackBox.exe скомпоновать со всеми необходимыми модулями (а не только с Kernel, HostFiles, Files и StdLoader).

Автор:  Евгений Темиргалеев [ Пятница, 21 Сентябрь, 2012 08:42 ]
Заголовок сообщения:  Re: Linux Console: метод кросс-разработки виндовым ББ

Alexander Shiryaev писал(а):
Так можно просто BlackBox.exe скомпоновать со всеми необходимыми модулями (а не только с Kernel, HostFiles, Files и StdLoader).
Можно. В PrivX этот способ указан как первый (читали?). Мы так и делали (если кто изучал задокументированную схему работы в bb-lin/devs/ert-dev :) Это я ещё раз напоминаю про кучу-малу.). Неудобно, т.к. этот большой exe нужно поддерживать в актуальном состоянии. Вы не забывайте, что ББ это настраиваемый набор компонентов. Вовсе не обязательно люди пользуются всем стандартным.

Вероятность же P(надо пересобрать BlackBox2.exe) = P(надо пересборать BlackBox.exe). Не считая конфигурирования. Мне пока не ясно, можно ли ограничиться фиксированным набором или нужен конфигурационный файл (который исключит необходимость пересборки при смене конфигурации).

P.S. Вот уже прелести удалённой совместной разработки начинают нас догонять. Сложно оперативно достигнуть взаимопонимания на форуме (в смысле --- донести свою мысль до собеседника одним сообщением)...

Автор:  Евгений Темиргалеев [ Пятница, 21 Сентябрь, 2012 08:47 ]
Заголовок сообщения:  Re: Linux Console: метод кросс-разработки виндовым ББ

Alexander Shiryaev писал(а):
Хорошо, но:... Ещё Init и Config должны быть другими.
Да, да, товарищи. Но, сдаётся мне, эти интересные вопросы уже выходят за пределы нашей задачи: сделать сборки консольного ББ1.6rc6 (отдельные --- для линуха, винды, OpenBSD).

Автор:  Иван Денисов [ Пятница, 21 Сентябрь, 2012 08:51 ]
Заголовок сообщения:  Re: Linux Console: метод кросс-разработки виндовым ББ

В Dialog есть возможность хранить информацию о используемой ОС, как это делается сейчас в переменной Dialog.platform

И код ведь отличается только в некоторых местах? Или тотально для разных Linux based OS ?

Автор:  Евгений Темиргалеев [ Пятница, 21 Сентябрь, 2012 08:58 ]
Заголовок сообщения:  Re: Linux Console: метод кросс-разработки виндовым ББ

Эта тема поднята для обсуждения конкретной задачи, товарищи. Давайте не будем отклоняться. Предлагайте пожалуйста конкретные варианты, не забывая что мы ищем наиболее простой.

Пока есть три:
1) большой BlackBox2.exe, в котором влинкованы все виндовые модули
2) переключение конфигурации на файловой системе (viewtopic.php?p=74910#p74910)
3) маленький BlackBox2.exe (один настраиваемый доп. модуль к BlackBox.exe) который заставляет читать кодовые файлы из первичного каталога (viewtopic.php?p=74916#p74916)

Автор:  Евгений Темиргалеев [ Пятница, 21 Сентябрь, 2012 09:20 ]
Заголовок сообщения:  Re: Полная консольная (серверная) версия под Linux

Alexander Shiryaev писал(а):
Можно так сделать: чтобы был рабочий каталог, ... и был бы скрипт, который переключает конфигурацию .... При переключении конфигурации должны создаваться и удаляться символические ссылки ...
Опыт применения подобных скриптов для настройки "проектных каталогов" у меня есть. Даже пытался его распространить на товарищей, но они почему-то :) не восприняли. Неудобно, когда происходит дерганье файлов скриптами; а если ещё и не сам их писал (и они не на ББ, то...совсем плохо понимается). После и сам отказался --- см viewtopic.php?p=70771#p70771 (если там ещё по ссылке пройти, можно найти рекомендации одного товарища, который регулярно пытается удержать молодёжь от наступления на грабли, насчёт минимизации привязки к ОСи :D )

Замечание: мягкие ссылки с абстракцией Files могут уживаться только на чтение. Т.к. запись идёт во временный файл, а после он регистрируется на место старого, то при первой записи документа ссылка убивается и вместо неё появляется файл с новой версией документа.

Автор:  Иван Денисов [ Пятница, 21 Сентябрь, 2012 09:47 ]
Заголовок сообщения:  Re: Linux Console: метод кросс-разработки виндовым ББ

Про ссылки абсолютно согласен, они с ББ не уживаются.

Дергание файлов скриптом хорошо работает, но конечно — извращение.

"большой BlackBox2.exe, в котором влинкованы все виндовые модули" — хорошо, если ничего не надо прятать из linux подсистем (Host, System).

Я попробовал собрать такой BlackBox2.exe и он «видит» Host, System то есть ругается что не может загрузить linux библиотеки, а если папки Host, System спрятать, то прекрасно запускается.

Код:
^Q DevLinker.Link exefilename.exe :=
Kernel$+ Files HostFiles HostPackedFiles StdLoader
1 Applogo.ico 2 Doclogo.ico 3 SFLogo.ico 4 CFLogo.ico 5 DtyLogo.ico
6 folderimg.ico 7 openimg.ico 8 leafimg.ico
1 Move.cur 2 Copy.cur 3 Link.cur 4 Pick.cur 5 Stop.cur 6 Hand.cur 7 Table.cur

^Q  DevPacker.PackThis exefilename.exe :=
System/Code/Config.ocf System/Code/Containers.ocf System/Code/Controllers.ocf System/Code/Controls.ocf System/Code/Converters.ocf System/Code/Dates.ocf System/Code/Dialog.ocf System/Code/Documents.ocf System/Code/Files.ocf System/Code/Fonts.ocf System/Code/Init.ocf System/Code/Integers.ocf System/Code/Kernel.ocf System/Code/Log.ocf System/Code/Math.ocf System/Code/Mechanisms.ocf System/Code/Meta.ocf System/Code/Models.ocf System/Code/Ports.ocf System/Code/Printers.ocf System/Code/Printing.ocf System/Code/Properties.ocf System/Code/Sequencers.ocf System/Code/Services.ocf System/Code/SMath.ocf System/Code/Stores.ocf System/Code/Strings.ocf System/Code/Views.ocf System/Code/Windows.ocf System/Rsrc/About.odc System/Rsrc/Menus.odc System/Rsrc/Strings.odc System/Sym/Config.osf System/Sym/Containers.osf System/Sym/Controllers.osf System/Sym/Controls.osf System/Sym/Converters.osf System/Sym/Dates.osf System/Sym/Dialog.osf System/Sym/Documents.osf System/Sym/Files.osf System/Sym/Fonts.osf System/Sym/Init.osf System/Sym/Integers.osf System/Sym/Kernel.osf System/Sym/Log.osf System/Sym/Math.osf System/Sym/Mechanisms.osf System/Sym/Meta.osf System/Sym/Models.osf System/Sym/Ports.osf System/Sym/Printers.osf System/Sym/Printing.osf System/Sym/Properties.osf System/Sym/Sequencers.osf System/Sym/Services.osf System/Sym/SMath.osf System/Sym/Stores.osf System/Sym/Strings.osf System/Sym/Views.osf System/Sym/Windows.osf Host/Code/Bitmaps.ocf Host/Code/CFrames.ocf Host/Code/Clipboard.ocf Host/Code/Cmds.ocf Host/Code/Dialog.ocf Host/Code/Files.ocf Host/Code/Fonts.ocf Host/Code/Mail.ocf Host/Code/Mechanisms.ocf Host/Code/Menus.ocf Host/Code/PackedFiles.ocf Host/Code/Pictures.ocf Host/Code/Ports.ocf Host/Code/Printers.ocf Host/Code/Registry.ocf Host/Code/TabFrames.ocf Host/Code/TabFramesYpk.ocf Host/Code/TextConv.ocf Host/Code/Windows.ocf Host/Rsrc/Imptype.odc Host/Rsrc/Prefs.odc Host/Rsrc/Printing.odc Host/Rsrc/Setup.odc Host/Rsrc/Strings.odc Host/Sym/Bitmaps.osf Host/Sym/CFrames.osf Host/Sym/Clipboard.osf Host/Sym/Cmds.osf Host/Sym/Dialog.osf Host/Sym/Files.osf Host/Sym/Fonts.osf Host/Sym/Mail.osf Host/Sym/Mechanisms.osf Host/Sym/Menus.osf Host/Sym/PackedFiles.osf Host/Sym/Pictures.osf Host/Sym/Ports.osf Host/Sym/Printers.osf Host/Sym/Registry.osf Host/Sym/TabFrames.osf Host/Sym/TabFramesYpk.osf Host/Sym/TextConv.osf Host/Sym/Windows.osf Win/Code/Console.ocf Win/Rsrc/Applogo.ico Win/Rsrc/CFLogo.ico Win/Rsrc/Copy.cur Win/Rsrc/Doclogo.ico Win/Rsrc/DtyLogo.ico Win/Rsrc/folderimg.ico Win/Rsrc/Hand.cur Win/Rsrc/leafimg.ico Win/Rsrc/Link.cur Win/Rsrc/Move.cur Win/Rsrc/openimg.ico Win/Rsrc/Pick.cur Win/Rsrc/SFLogo.ico Win/Rsrc/Stop.cur Win/Rsrc/Table.cur Win/Sym/Api.osf Win/Sym/Cmc.osf Win/Sym/Console.osf Win/Sym/Ctl.osf Win/Sym/Dlg.osf Win/Sym/GL.osf Win/Sym/GLAux.osf Win/Sym/GLUtil.osf Win/Sym/MM.osf Win/Sym/Net.osf Win/Sym/Ole.osf Win/Sym/OleAut.osf Win/Sym/OleCtl.osf Win/Sym/OleDlg.osf Win/Sym/Rpc.osf Win/Sym/Sql.osf Ole/Code/Client.ocf Ole/Code/Data.ocf Ole/Code/Server.ocf Ole/Code/Storage.ocf Ole/Sym/Client.osf Ole/Sym/Data.osf Ole/Sym/Server.osf Ole/Sym/Storage.osf

Автор:  Alexander Shiryaev [ Пятница, 21 Сентябрь, 2012 09:56 ]
Заголовок сообщения:  Re: Linux Console: метод кросс-разработки виндовым ББ

Если только для кросс-разработки в BlackBox/Windows, то лучше подойдёт 3-й или 1-й метод.

Автор:  Евгений Темиргалеев [ Пятница, 21 Сентябрь, 2012 09:57 ]
Заголовок сообщения:  Re: Linux Console: метод кросс-разработки виндовым ББ

Иван Денисов писал(а):
"большой BlackBox2.exe, в котором влинкованы все виндовые модули" — хорошо, если ничего не надо прятать из linux подсистем (Host, System).

Я попробовал собрать такой BlackBox2.exe и он «видит» Host, System то есть ругается что не может загрузить linux библиотеки, а если папки Host, System спрятать, то прекрасно запускается.
Потому что Вы не правильно его собираете. Нужно не паковать, а линковать все через DevLinker.LinkExe. Припакованные при помощи HostPackedFiles файлы имеют самый низкий приоритет и перекрываются содержимым первичного и вторичного каталогов.

Автор:  Alexander Shiryaev [ Пятница, 21 Сентябрь, 2012 10:01 ]
Заголовок сообщения:  Re: Linux Console: метод кросс-разработки виндовым ББ

У ссылок есть недостаток -- они не работают в Windows.

Автор:  Евгений Темиргалеев [ Пятница, 21 Сентябрь, 2012 10:05 ]
Заголовок сообщения:  Re: Linux Console: метод кросс-разработки виндовым ББ

Alexander Shiryaev писал(а):
У ссылок есть недостаток -- они не работают в Windows.
Работают. Только дюже криво, что лучше ими не пользоватся :) Хотя вроде в 7ке обещали полноценные символьные ссылки...

Но мы-то делаем линуховую консоль. Поэтому все работаем из линуха, на чём вопрос и закрыт. Если нам нужно будет использовать ссылки в рабочем процессе, мы их будем использовать (и у всех они будут работать одинаково).

Страница 1 из 2 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/