LINUX.ORG.RU

glade-файл в бинарнике vs. рамещенный на файловой системе

 , ,


0

2

Привет всем.

Как вы устанавливаете glade-файлы — компилируете в бинарник или кидаете куда-нибудь в /usr/share? Честно говоря, вразумительных доводов в пользу второго варианта я не могу придумать, однако многие гномьи проги делают именно так.

В случае первого способа интересует процесс автоматизации включение glade-файла в исходники. В первую очередь хочется видеть рецепты для CMake.

★★★★★

#! /bin/bash                                                                                          
                                                                                                      
if [[ -z "$1" ]]; then                                                                                
    echo "Usage: ${0##*/} <glade file>"                                                               
    exit 1                                                                                            
fi                                                                                                    
[[ -e "$1" ]] || exit 1                                                                               
                                                                                                      
echo "const char $(echo $1 | sed 's/\./_/g')[] = $(grep -v '<\!\-\-' $1 | sed -r 's/^[[:blank:]]+//;s/
\"/\\\"/g;s/(^.*$)/\"&\"/');" > $1.h

ну и дальше #include полученный хидер

ananas ★★★★★
()

простейший «конвертер» файлов в объектник :

SYMBOL=$1
INFILE=$2
OUTFILE=$3
cat $INFILE | ( echo "unsigned char $SYMBOL[] = {"; xxd -i; echo ",0"; echo "};" ) | gcc -x c -c - -o $OUTFILE

далее в обычном make делается правило .glade.o , а в исходнике стучитесь к $SYMBOL как к внешней переменной.

p.s. практика тащить glade в бинарник - плохая. То есть только для исключительных случаев.

MKuznetsov ★★★★★
()
Ответ на: комментарий от MKuznetsov

p.s. практика тащить glade в бинарник - плохая. То есть только для исключительных случаев.

Можно поконкретнее, чем именно плохая? И какие случаи являются исключительными?

fat_angel ★★★★★
() автор топика
Ответ на: комментарий от fat_angel

А можешь пояснить причины такого решения?

Эээ... нет :) Мне просто в голову не приходило интегрировать его в бинарь. В чем выгода?

Да. к тому же GUI мы пишем на Python. во время разработки glade-файл по очевидным причинам лежит отдельно, и в финальном пакете так и остается.

tailgunner ★★★★★
()

Лучше хранить отдельно. Плюсы: передвинул кнопоку - не нужно перекомпилировать; xml не висит в памяти мёртвым грузом.

anonymous
()
Ответ на: комментарий от fat_angel

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

autotools

ananas ★★★★★
()
Ответ на: комментарий от anonymous

конструктор интерфейсов сохранил называние Glade, только теперь он генерит файлы GtkBuilder.

mono ★★★★★
()

Я подобную тему уже создавал. Здесь как раз так и делаю: включаю глэйдовский файл в бинарник.

Делается это простеньким скриптиком, нарытым на просторах интернета:

#!/bin/sh
echo "const gchar *ui = `sed -r 's/^[[:space:]]*//;s/\"/\\\\\"/g;s/(^.*$$)/\"&\"/' $1` ;" > ui.h
echo "Wrote ui.h"

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от tailgunner

В чем выгода?

В том, что, во-первых, мусора меньше, а во-вторых, меньше вероятность убить приложение из-за удаления какого-нибудь ненужного файлика. Еще было бы неплохо gettext'овские файлы включать в бинарник, но это уже сложновато будет…

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

С другой стороны, если удалить ненужный gettext'овый файл, приложение все равно будет работать. А вот если удалить файлик gtkbuilder'а, то фигвам.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

меньше вероятность убить приложение из-за удаления какого-нибудь ненужного файлика

А ещё можно какой-нибудь ненужный *.so удалить, чисто случайно, да.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.