OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Понедельник, 22 Июль, 2019 04:35

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 24 ]  На страницу 1, 2  След.
Автор Сообщение
СообщениеДобавлено: Четверг, 20 Сентябрь, 2012 17:50 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4489
Откуда: Россия, Орёл
Для пакета (1), по аналогии с пакетом LinSimpleConsole этот вопрос можно пока опустить, но для (2) и (3) нужно будет обязательно устроить мозговой штурм насчёт поиска как можно более простого способа кросс разработки на виндовом ББ. То что мне известно сейчас, имеет определённые минусы.

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 20 Сентябрь, 2012 19:57 
Аватара пользователя

Зарегистрирован: Суббота, 26 Ноябрь, 2005 02:12
Сообщения: 437
Откуда: Егорьевск
Можно так сделать: чтобы был рабочий каталог, в котором не было бы ОС-зависимых файлов, и были бы каталоги (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


Последний раз редактировалось Alexander Shiryaev Четверг, 20 Сентябрь, 2012 21:07, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 20 Сентябрь, 2012 20:42 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9127
Откуда: Россия, Орёл
Относительно Kernel действительно приходится держать разные версии одного модуля; относительно остальных модулей стоит взять на вооружение принцип: одно имя модуля = одна версия (ну, только хронологически меняющаяся). Если есть вариативность - в динамически подключаемые реализации с разными именами.
Это реально, я три года назад делал серверное приложение, которое стартовало на двух ОС, в зависимости от того, какой пускач запустили. Все модули - в единственном экземпляре в основном каталоге.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 20 Сентябрь, 2012 21:07 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4489
Откуда: Россия, Орёл
Чем меньше внешних инструментов используется, тем лучше. Приоритетное решение --- в рамках ББ. И оно должно быть как можно более простым. Задача у нас вполне конкретная, поэтому надо постараться лишнего не прихватить. :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 20 Сентябрь, 2012 21:16 
Аватара пользователя

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 20 Сентябрь, 2012 21:35 
Модератор
Аватара пользователя

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

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

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 20 Сентябрь, 2012 22:06 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9127
Откуда: Россия, Орёл
Alexander Shiryaev писал(а):
Как тогда быть с Host?


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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 20 Сентябрь, 2012 22:08 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9127
Откуда: Россия, Орёл
Как бы там ни было, а вариативность кода одного модуля - ситуация, которую следует допускать только при крайней необходимости... Мы же не в Цы с ifdef :) У нас вместо этого динамическое подключение реализации. И каждая реализация имеет право на свой модуль :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 20 Сентябрь, 2012 23:54 
Аватара пользователя

Зарегистрирован: Суббота, 26 Ноябрь, 2005 02:12
Сообщения: 437
Откуда: Егорьевск
Хорошо, но:

в 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 должны быть другими.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 21 Сентябрь, 2012 08:27 
Аватара пользователя

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 21 Сентябрь, 2012 08:42 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4489
Откуда: Россия, Орёл
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 
Модератор
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 21 Сентябрь, 2012 08:51 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2343
В Dialog есть возможность хранить информацию о используемой ОС, как это делается сейчас в переменной Dialog.platform

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 21 Сентябрь, 2012 08:58 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4489
Откуда: Россия, Орёл
Эта тема поднята для обсуждения конкретной задачи, товарищи. Давайте не будем отклоняться. Предлагайте пожалуйста конкретные варианты, не забывая что мы ищем наиболее простой.

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 21 Сентябрь, 2012 09:20 
Модератор
Аватара пользователя

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 21 Сентябрь, 2012 09:47 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2343
Про ссылки абсолютно согласен, они с ББ не уживаются.

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

"большой 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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 21 Сентябрь, 2012 09:56 
Аватара пользователя

Зарегистрирован: Суббота, 26 Ноябрь, 2005 02:12
Сообщения: 437
Откуда: Егорьевск
Если только для кросс-разработки в BlackBox/Windows, то лучше подойдёт 3-й или 1-й метод.


Последний раз редактировалось Alexander Shiryaev Пятница, 21 Сентябрь, 2012 10:12, всего редактировалось 8 раз(а).

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 21 Сентябрь, 2012 09:57 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4489
Откуда: Россия, Орёл
Иван Денисов писал(а):
"большой BlackBox2.exe, в котором влинкованы все виндовые модули" — хорошо, если ничего не надо прятать из linux подсистем (Host, System).

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 21 Сентябрь, 2012 10:01 
Аватара пользователя

Зарегистрирован: Суббота, 26 Ноябрь, 2005 02:12
Сообщения: 437
Откуда: Егорьевск
У ссылок есть недостаток -- они не работают в Windows.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 21 Сентябрь, 2012 10:05 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4489
Откуда: Россия, Орёл
Alexander Shiryaev писал(а):
У ссылок есть недостаток -- они не работают в Windows.
Работают. Только дюже криво, что лучше ими не пользоватся :) Хотя вроде в 7ке обещали полноценные символьные ссылки...

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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 24 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2019, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB