ПО, ЭВМ и АСУ из Таможенного Союза

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » ПО, ЭВМ и АСУ из Таможенного Союза » Проект "Виртуальные машины" » Установка Сказочной Колесницы в Gentoo


Установка Сказочной Колесницы в Gentoo

Сообщений 1 страница 30 из 80

1

вот заготовка под .ebuild-файл
https://sourceforge.net/p/plana-gentoo/ … 0.0.ebuild

мне мешают две вещи:
1) я не понимаю, как в Gitea сформировать архив по SHA1 коммита (потому что до этого я всегда пользовался гитхабом)
2) мне непонятно как проводить установку (откуда куда копировать).
Чтобы это понимать, мне надо видеть список всех нагенерированных файлов

Ещё, насколько я понял,
код веб-проекта содержит копию этих файлов (старую),
а не ссылается на этот проект как на зависимость, верно?

Отредактировано Лис (2023-03-11 17:21:57)

0

2

Лис написал(а):

Ещё, насколько я понял,
код веб-проекта содержит копию этих файлов (старую),
а не ссылается на этот проект как на зависимость, верно?

Отредактировано Лис (Сегодня 15:35:53)

Не очень понял вопрос.
Результатом компиляции является один исполняемый файл. Раньше его имя было proba, теперь будет sk.
Свежие исходники для мульти-проекта, с возможностью расширения на множество виртуальных машин скоро выложу.

Отредактировано Евгений (2023-03-11 15:54:09)

0

3

Я прошел сборку, осталось сделать установку.

У тебя мейк файл понимает переменную DESTDIR ?

make DESTDIR="${D}" install

это у меня в руководстве по генте написано:
https://devmanual.gentoo.org/ebuild-wri … index.html

я так понял, что создаётся директория bin/obj/ в ней два .o файла,
а бинарник ./probe создаётся в корневой директории с исходниками.

Это всё не очень хорошо, не соответствует концепции сборки out of source tree:
https://stackoverflow.com/questions/390 … h-gnu-make

[html]<pre>
/var/tmp/portage/app-emulation/sk-1.0.0/work/app-emulation-sk-1.0.0 # find .
.
./include
./include/ru_stdio.h
./include/keywords.h
./.gitignore
./.src
./.src/opcode.h
./.src/vm.h
./.src/vm_core.h
./.src/vm.c
./.src/main.c
<b>./proba
./bin
./bin/obj
./bin/obj/vm.o
./bin/obj/main.o
./bin/.dep
./bin/.dep/vm.o.d
./bin/.dep/main.o.d</b>
./LICENSE
./src_c
./src_c/Makefile
./ru-to-c
./readme.md
./Makefile
./.kateproject
./src_rus
./src_rus/vm.rh
./src_rus/vm_core.rh
./src_rus/vm.r
./src_rus/Makefile
./src_rus/main.r
./src_rus/opcode.rh
</pre>[/html]

Отредактировано Лис (2023-03-11 17:13:39)

0

4

«it is best to patch the Makefile and contact upstream explaining the situation to them»

Вот, я тебе доложил.

0

5

Нет, make install не реализовано. Makefile переехал из Windows, поэтому в нем не всё, как у людей. Если Лис подскажет, что нужно внести, то легко подправим.  Для тестов я просто запускаю из корневой папки ./ probe

0

6

7.2.4 DESTDIR: Support for Staged Installs
     https://www.gnu.org/prep/standards/html … STDIR.html

2011-10-01, kekekeks, Хочется взять и расстрелять, или ликбез о том, почему не стоит использовать make install (Debian)
    https://habr.com/en/post/130868/

https://stackoverflow.com/questions/113 … ix-of-make

Кроме DESTDIR ещё нужна PREFIX:
https://www.gnu.org/prep/standards/html … ation.html
«Each GNU distribution should come with a shell script named configure»

То есть, если я хочу установить программу куда-то нестандартно, я пишу PREFIX=... make
а если я хочу, чтобы собранные файлы лежали в какой-то директории, я пишу DESTDIR=... make

И, наверное, autotools туда лучше прикрутить.

«Many developers are comfortable installing applications using what Autotools produces, so it can make your application much more familiar and accessible

./configure --host=hosttype --target=targettype

А вдруг захочется собрать эмулятор под архитектуру Арм64?

2021-06-08, Using Autotools to Configure, Make, and Install a Program
    https://earthly.dev/blog/autoconf/

you’ll be writing the files configure.ac and Makefile.am

Отредактировано Лис (2023-03-11 18:34:09)

0

7

Использование GNU Autotools. Создание своего скрипта configure и файла Makefile
    https://help.ubuntu.ru/wiki/using_gnu_autotools

configure.ac:

Код:
AC_PREREQ(2.59)
AC_INIT([sk], [1.0.0], [Cyrillic virtual machine])
AC_CONFIG_SRCDIR([main.c])

# Checks compiler
AC_PROG_CC

AC_OUTPUT

Теперь запустите программу autoconf, получается configure скрипт

https://stackoverflow.com/questions/378 … and-makefi
«configure.ac and configure.in are two possible names for the master Autoconf source file, which is processed by autoconf to generate the configure shell script. configure.ac is preferred for new packages, configure.in is an older name which still works.»

Отредактировано Лис (2023-03-11 18:41:17)

0

8

У меня есть очень сильное предчувствие, что весь этот Autotools положит на на нашу хрупкую русификацию и мы будем танцевать вокруг него, пытаясь объяснить, что это не мусор, а исходные файлы...

0

9

Мне кажется, всё будет хорошо.

Правила/зависимости в Makefile.am пишутся так же как в Makefile:
https://unix.stackexchange.com/question … one-object

Вот даже в туториале написано:
https://www.gnu.org/software/automake/m … ained.html
«A Makefile.am has the same syntax as an ordinary Makefile. When automake processes a Makefile.am it copies the entire file into the output Makefile.in (that will be later turned into Makefile by configure) but will react to certain variable definitions by generating some build rules and other variables.»

Отредактировано Лис (2023-03-11 18:59:13)

0

10

Будет круто, если у Лиса получится...

0

11

Евгений написал(а):

Будет круто, если у Лиса получится...

Это неспецифичная для Лиса задача. Уверен, что в Дебиане примерно тоже самое надо сделать, это задача апстрима, а не мейнтейнеров.

0

12

Лис написал(а):

Мне кажется, всё будет хорошо.

Кое-что получилось. Переименовал Makefile в Makefile.in и внес некоторые изменения.
Добавил configure.ac

Код:
AC_PREREQ(2.59)
AC_INIT([sk], [1.0.0], [Cyrillic virtual machine])
AC_CONFIG_FILES([Makefile])
# Checks compiler
AC_PROG_CC

AC_OUTPUT

Дальше команды:

>autoreconf

>./configure

>checkinstall -D

Далее в интерактивном режиме собирается deb-пакет. Единственное, не понял можно ли куда-то добавить информацию о лицензии, описании, номере версии и пр., чтобы собиралось без лишних вопросов.

0

13

Вот мой билд:
[html]<a href="https://sourceforge.net/p/plana-gentoo/code/ci/master/tree/app-emulation/sk/sk-1.0.0.ebuild">https://sourceforge.net/p/plana-gentoo/code/ci/master/tree/app-emulation/sk/sk-1.0.0.ebuild</a>[/html]

Что-то не хочет пока, говорит:

Код:
>>> Install app-emulation/sk-1.0.0 into /var/tmp/portage/app-emulation/sk-1.0.0/image
make -j4 DESTDIR=/var/tmp/portage/app-emulation/sk-1.0.0/image install 
install sk /var/tmp/portage/app-emulation/sk-1.0.0/image@bindir@/sk
/usr/bin/install: cannot create regular file '/var/tmp/portage/app-emulation/sk-1.0.0/image@bindir@/sk': No such file or directory

https://tvoygit.ru/stein47/russian-virt … efile#L220

if [ -z "${DESTDIR}" ]
then
     echo "\$DESTDIR Пустая"
else
     echo "\$DESTDIR is не пустая"
     echo "надо разделить слешем, если его там нет"

     length=${#DESTDIR}
     last_char=${DESTDIR:length-1:1}

     if [ $last_char != "/" ] then
         echo "надо"
     else
         echo "и так сработает"
     fi
     # Но можно вроде последний символ и не проверять, а написать
     # ${DESTDIR%/}/
fi

Хотя в руководстве ничего такого нет:
https://www.gnu.org/prep/standards/html … STDIR.html
наверное неудачное руководство (не проясняет этот момент).

Отредактировано Лис (2023-03-12 14:59:01)

0

14

Можно попробовать переименовать. Makefile в Makefile.in. А потом по инструкции, что лежит  выше. Но про Gentoo мне сложно ответить.

0

15

Евгений написал(а):

Про Gentoo мне сложно ответить.

Дело тут не в генте. Я использую реализации функций установки по-умолчанию, которыми пользуются сотни пакетов.
Дело тут в конкретном мейкфайле, он не соответствует стандартам GNU.

Я бы поправил, но никогда такого раньше тоже не делал.

0

16

Ну а хотя бы сборка - make all  работает?

0

17

Евгений написал(а):

Можно попробовать переименовать. Makefile в Makefile.in.

Нет, тебе нужно переименовать Makefile в Makefile.am
и научиться запускать autoreconf перед запуском make

Ничего страшного тут нет, я сам об этом только что узнал.

Отредактировано Лис (2023-03-12 19:54:29)

0

18

Евгений написал(а):

Ну а хотя бы сборка - make all  работает?

Кстати, у утилиты autoreconf есть ключ
-m, --make
    when applicable, re-run ./configure && make

То есть, вообще просто надо собирать командой
autoreconf -m
и всё (а редактировать только Makefile.am).

Отредактировано Лис (2023-03-12 20:16:55)

0

19

Лис написал(а):

Евгений написал(а):

    Можно попробовать переименовать. Makefile в Makefile.in.

Нет, тебе нужно переименовать Makefile в Makefile.am
и научиться запускать autoreconf перед запуском make

Ничего страшного тут нет, я сам об этом только что узнал.

Отредактировано Лис (Сегодня 19:54:29)

autoreconf создает Makefile из Makefile.in
Чтобы создать Makefile.in из Makefile.am нужно использовать automake. Разве не так?

0

20

Евгений написал(а):

autoreconf создает Makefile из Makefile.in
Чтобы создать Makefile.in из Makefile.am нужно использовать automake. Разве не так?

Да, всё верно.

Отредактировано Лис (2023-03-12 21:33:44)

0

21

Теперь у меня сборка и установка выполняется без ошибок:

Код:
>>> Install app-emulation/sk-1.0.0 into /var/tmp/portage/app-emulation/sk-1.0.0/image
>>> Completed installing app-emulation/sk-1.0.0 into /var/tmp/portage/app-emulation/sk-1.0.0/image

 * Final size of build directory: 344 KiB
 * Final size of installed tree:    4 KiB

однако ни один файл не устанавливается:

Код:
$ equery files app-emulation/sk
 * Searching for sk in app-emulation ...
 * Contents of app-emulation/sk-1.0.0:
$

Я проверил, проект действительно не кладёт в DISTDIR (/var/tmp/portage/app-emulation/sk-1.0.0/image) ни одного файла.

Вероятно он почему-то складывает их куда-то ещё в другое место.

$ autoreconf -iv
autoreconf-2.71: export WARNINGS=
autoreconf-2.71: Entering directory '.'
autoreconf-2.71: configure.ac: not using Gettext
autoreconf-2.71: running: aclocal
autoreconf-2.71: configure.ac: tracing
autoreconf-2.71: configure.ac: not using Libtool
autoreconf-2.71: configure.ac: not using Intltool
autoreconf-2.71: configure.ac: not using Gtkdoc
autoreconf-2.71: running: /usr/bin/autoconf-2.71
autoreconf-2.71: configure.ac: not using Autoheader
autoreconf-2.71: configure.ac: not using Automake
autoreconf-2.71: Leaving directory '.'

Makefile не создаётся.

т.е. почему-то не вызывается ./configure

Вот это, наверное, уже чисто гентушная заморочка.

Дочитал руководство
https://wiki.gentoo.org/wiki/Autotools

Перекопировал оттуда функцию src_prepare() в свой билд:
https://sourceforge.net/p/plana-gentoo/ … 0.0.ebuild

теперь ошибка такая:

Код:
>>> Install app-emulation/sk-1.0.0 into /var/tmp/portage/app-emulation/sk-1.0.0/image
make -j4 DESTDIR=/var/tmp/portage/app-emulation/sk-1.0.0/image install 
install sk /var/tmp/portage/app-emulation/sk-1.0.0/image/usr/bin/sk
/usr/bin/install: cannot create regular file '/var/tmp/portage/app-emulation/sk-1.0.0/image/usr/bin/sk': No such file or directory
install-xattr: failed to stat /var/tmp/portage/app-emulation/sk-1.0.0/image/usr/bin/sk: No such file or directory
make: *** [Makefile:222: install] Error 1

Написано там:

install:
install $(OUT) $(DESTDIR)$(bindir)/$(OUT)
uninstall:
rm $(DESTDIR)$(bindir)/$(OUT)

И это логично, ведь директория не создавалась, перед тем как туда инсталлировать файл.

Отредактировано Лис (2023-03-12 22:03:59)

0

22

Надо дописать Makefile.in-файл так, чтобы директория $(bindir) создавалась, если её там нет.

0

23

Лис написал(а):

Надо дописать Makefile.in-файл так, чтобы директория $(bindir) создавалась, если её там нет.

С этим вроде все нормально
Makefile.in:

Код:
#Пути для установки
prefix = @prefix@
exec_prefix = @exec_prefix@
bindir = @bindir@

Makefile:

Код:
#Пути для установки
prefix = /usr/local
exec_prefix = ${prefix}
bindir = ${exec_prefix}/bin

0

24

Я не вижу вызова команды "mkdir" или "mkdir -p" в процитированном.

В качестве альтернативы ещё предлагают попробовать указать ключ -D у команды install:

       install [OPTION]... [-T] SOURCE DEST

       -D     create all leading components of DEST except the last, or all components of --target-directory, then copy SOURCE to DEST

install:
install -D $(OUT) $(DESTDIR)$(bindir)/$(OUT)

Отредактировано Лис (2023-03-12 23:06:29)

0

25

Лис написал(а):

Надо дописать Makefile.in-файл так, чтобы директория $(bindir) создавалась, если её там нет.

Добавил:

Код:
install:
	mkdir -p $(DESTDIR)$(bindir)
	install $(OUT) $(DESTDIR)$(bindir)/$(OUT)
uninstall:
	rm $(DESTDIR)$(bindir)/$(OUT)

0

26

Что-то я делаю не так...

Код:
Компиляция C/C++: .src/vm.c
gcc-10 -c -Os -Wall -MD -MF bin/.dep/vm.o.d -I./include  -o  bin/obj/vm.o .src/vm.c
/bin/bash: line 1: gcc-10: command not found

а, нет, не я. Это ты:
https://tvoygit.ru/stein47/russian-virt … le.am#L109

Код:
$ gcc --version
gcc (Gentoo 12.2.1_p20230121-r1 p10) 12.2.1 20230121
Copyright (C) 2022 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Отредактировано Лис (2023-03-12 23:50:35)

0

27

Лис написал(а):

Попробуй ещё запушить изменения в git-репозиторий:
https://tvoygit.ru/stein47/russian-virt … le.am#L224

а почему не ключ -D ?

Сделано

Код:
install:
	install -D $(OUT) $(DESTDIR)$(bindir)/$(OUT)
uninstall:
	rm $(DESTDIR)$(bindir)/$(OUT)

0

28

Ещё надо зависимость от конкретной версии компилятора надо убрать (или как-то по другому написать, если прям так хочется убедиться, что версия не ниже 10).

Выше написал, почему.

Отредактировано Лис (2023-03-13 00:02:08)

0

29

Это не трудно, можно просто вместо gcc-10, написать gcc. А как сделать так, чтобы именно у меня запускалась 10-я версия? Просто у меня только она русифицированная.

0

30

Лис написал(а):

Ещё надо зависимость от конкретной версии компилятора надо убрать (или как-то по другому написать, если прям так хочется убедиться, что версия не ниже 10).

Выше написал, почему.

Отредактировано Лис (Сегодня 00:02:08)

Ok
И в основнома Makefile.am и во вложенных проектах

Отредактировано Евгений (2023-03-13 00:23:22)

0


Вы здесь » ПО, ЭВМ и АСУ из Таможенного Союза » Проект "Виртуальные машины" » Установка Сказочной Колесницы в Gentoo