Автор Тема: Представляю ядро игры populate  (Прочитано 2616 раз)

Оффлайн Антон Мидюков

  • alt linux team
  • ***
  • Сообщений: 5 182
  • antohami@
Re: Представляю ядро игры populate
« Ответ #30 : 01.01.2016 19:09:37 »
Makefile

obj_locale = ru_RU
target = populate
image_size = 16 32 48
_bindir = /usr/bin/
_desktopdir = /usr/share/applications/
_iconsdir = /usr/share/icons/hicolor/

all: build msgfmt convert_image

build:
valac `find src/ -type f` --pkg gee-1.0 --pkg gtk+-3.0 -X -lm -o $(target)  -X -DGETTEXT_PACKAGE="populate"

msgfmt:
for j in $(obj_locale); do \
msgfmt po/$$j.po -o $$j.mo;\
mkdir -p locale/$$j/LC_MESSAGES/;\
mv $$j.mo locale/$$j/LC_MESSAGES/$(target).mo;\
done

gen_pot:
xgettext --language=C --keyword=_ --escape --sort-output --from-code=utf-8 -o $(target).pot `find src/ -type f`

msgmerge: gen_pot
for j in `find po/*.po -type f`; do \
msgmerge -U $$j $(target).pot ;\
done

msginit: gen_pot
mkdir -p po
msginit -i $(target).pot -o po/new.po;

convert_image:
for i in $(image_size); do \
convert $(target).svg -resize $$i'x'$$i $(target)-$$i'x'$$i.svg ;\
done

install:
install -Dp -m0755 $(target) $(DESTDIR)$(_bindir)$(target)
install -Dp -m0644 $(target).desktop $(DESTDIR)$(_desktopdir)$(target).desktop
for i in $(image_size); do \
convert $(target).svg -resize $$i'x'$$i $(target)-$$i'x'$$i.svg
install -Dp -m0644 $(target)-$(i)x$(i).svg $(DESTDIR)$(_iconsdir)/$(i)x$(i)/apps/$(target).svg ;\
done

clean:
rm -Rfv locale/ $(target)-*.svg


Я так вижу это. Т.е. есть каталог po в корне, в котором лежат файлы типа Локаль.po. Например ru_Ru.po ru_Ua.po

Единственный недостаток этого Makefile вижу в том, что при добавлении новой локали нужно в переменную obj_locale добавлять эти локали. Не могу сообразить как сделать автоматом масссив локалей на основании, имеющихся файлов po.
Разберём Makefile. Вверху объявляются переменные. Далее идут возможные опции команды make:
all - действие при отсутствии опций. У нас выполняются: build, msgfmt и convert_image
build - осуществляем компиляцию
msgfmt - Делаем .mo и раскидываем по директориям соответственно их локали
gen_pot - генерируем pot файл
msgmerge - Предварительно выполняем gen_pot и обновляем po файлы на основе pot
msginit - Предварительно выполняем gen_pot и создаём новый po файл на его основе
convert_image - конвертируем иконку в соответствии со стандартом в 16x16, 32x32, 48x48
install - устанавливаем программу
uninstall - удаляем программу
clean - возвращаем девственный вид директории

По-моему, неплохой универсальный Makefile для будущих ваших программ ;-)

Upd1: Поправил Makefile
« Последнее редактирование: 02.01.2016 16:52:29 от Антон Мидюков »

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 361
  • Учиться .... Телепатами не рождаются, ими ....
Re: Представляю ядро игры populate
« Ответ #31 : 01.01.2016 20:14:46 »
Можно тут посмотреть пример работы с po

Оффлайн alsoijw

  • Участник
  • *
  • Сообщений: 166
  • Fedora 25 GNOME 3 amd64
Re: Представляю ядро игры populate
« Ответ #32 : 26.01.2016 15:07:54 »
А можно в git добавить пустую папку?
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

Оффлайн Антон Мидюков

  • alt linux team
  • ***
  • Сообщений: 5 182
  • antohami@
Re: Представляю ядро игры populate
« Ответ #33 : 26.01.2016 15:50:41 »
А можно в git добавить пустую папку?

Нельзя. А зачем?

Оффлайн alsoijw

  • Участник
  • *
  • Сообщений: 166
  • Fedora 25 GNOME 3 amd64
Re: Представляю ядро игры populate
« Ответ #34 : 26.01.2016 17:16:37 »
Путь к папке с переводами прописывается константой в исходнике, потом и в бинарнике. Это значит что как в папке с проектом, так и в установленном пакете эти пути должны совпадать. Вариант проверять есть ли папка или нет, модифицировать исходники перед установкой это костыли. Как я понимаю бинарник должен быть в папке /usr/bin/, а локали в /usr/share/locale. Учитывая то что можно использовать относительные пути, то можно прописать путь к локалям "../share/locale". Для того чтобы всё это заработало в не установленном проекте нужно поместить бинарник в поддиректорию относительно корня проекта, к пример build. После чего создать симлинк share на корень проекта. Нет смысла включать в репозиторий бинарник. Если не склонированный репозиторий не будет содержать папки build, то построение будет невозможно. Есть два пути: попросить пользователя создать её или включить её создание в Makefile. Не думаю что включение в Makefile не является костылём. В то же время хочется чтобы сборка производилась одной командой.
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

Оффлайн Антон Мидюков

  • alt linux team
  • ***
  • Сообщений: 5 182
  • antohami@
Re: Представляю ядро игры populate
« Ответ #35 : 26.01.2016 18:13:37 »
Имхо, нужно указывать путь к переводам в виде usr/share/locale. И вообще пути использовать как системные, но без первого слэша. Не вижу проблемы создать каталог BUILD при помощи сборочного скрипта, создать в нём каталоги usr/bin/ и usr/share/locales/, поместив туда бинарик и переводы соответственно. И создать симлинк на бинарик в корне на BUILD/usr/bin/populate

Оффлайн alsoijw

  • Участник
  • *
  • Сообщений: 166
  • Fedora 25 GNOME 3 amd64
Re: Представляю ядро игры populate
« Ответ #36 : 26.01.2016 20:05:06 »
Добавлены настройки внешнего вида. Для того чтобы использовать проект начиная с этого времени вам нужно собрать и установить программу. На данный момент осуществляется обновление Makefile. Используйте make для сборки.
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

Оффлайн Антон Мидюков

  • alt linux team
  • ***
  • Сообщений: 5 182
  • antohami@
Re: Представляю ядро игры populate
« Ответ #37 : 27.01.2016 06:08:03 »
Добавьте $(DESTDIR) перед абсолютными путями. Не усложняйте жизнь майнтейнерам. А вообще, почему сделанный мной Makefile, не взяли на вооружение?

Оффлайн alsoijw

  • Участник
  • *
  • Сообщений: 166
  • Fedora 25 GNOME 3 amd64
Re: Представляю ядро игры populate
« Ответ #38 : 27.01.2016 14:43:52 »
Антон Мидюков, где он определён и что он означает?
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 20 163
    • Домашняя страница
Re: Представляю ядро игры populate
« Ответ #39 : 27.01.2016 14:51:35 »
Антон Мидюков, где он определён и что он означает?
Он определён в макросе %makeinstall_std:
$ rpm --eval "%makeinstall_std"
make INSTALL="/bin/install -p" install DESTDIR=/tmp/.private/cas/%{name}-buildroot
и используется для безопасной установки собираемого в hasher пакета.
Андрей Черепанов (cas@)

Оффлайн alsoijw

  • Участник
  • *
  • Сообщений: 166
  • Fedora 25 GNOME 3 amd64
Re: Представляю ядро игры populate
« Ответ #40 : 06.02.2016 23:01:43 »
Сейчас минимальной версией gtk должна быть 3.12
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

Оффлайн alsoijw

  • Участник
  • *
  • Сообщений: 166
  • Fedora 25 GNOME 3 amd64
Re: Представляю ядро игры populate
« Ответ #41 : 05.03.2016 18:27:05 »
Добавьте $(DESTDIR) перед абсолютными путями. Не усложняйте жизнь майнтейнерам. А вообще, почему сделанный мной Makefile, не взяли на вооружение?
Года не прошло как сделал (Сарказм)
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

Оффлайн asy

  • alt linux team
  • ***
  • Сообщений: 8 368
Re: Представляю ядро игры populate
« Ответ #42 : 05.03.2016 20:44:15 »
А можно в git добавить пустую папку?

Нельзя.  А зачем?
Вообще, как выяснилось, можно:
https://lists.altlinux.org/pipermail/devel/2014-December/199300.html

А вот зачем...