URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 7061
[ Назад ]

Исходное сообщение
"Как править исходники при помощи autoconf"

Отправлено fa , 21-Дек-07 14:15 
Всем привет.
Вот такая проблема: в header-файле жестко прописан путь к файлу (конфиг программы):

$cat config.h
...
#define CONFIG_FILE "/usr/local/etc/myprogram.conf"
...

Все бы ничего, до тех пор, пока при компиляции пользователь не указывает другой prefix
./configure --prefix=/home/user. Соответственно путь к конфигу уже не правильный.
Пока борюсь с этим в Makefile, меняя строчку с помощью sed
if (grep '#define CONFIG_FILE' config.h); then cat config.h | sed '/^#define CONFIG_FILE/d;G' > tmp; mv tmp config.h; fi
echo "#define CONFIG_FILE \"${sysconfdir}/trafitizer.conf\"" >> config.h

Пожалуйста, подскажите, есть ли более "опрятное" решение.
Заранее спасибо


Содержание

Сообщения в этом обсуждении
"Как править исходники при помощи autoconf"
Отправлено phpcoder , 21-Дек-07 14:53 
[...]
>./configure --prefix=/home/user. Соответственно путь к конфигу уже не правильный.
>Пока борюсь с этим в Makefile, меняя строчку с помощью sed
>if (grep '#define CONFIG_FILE' config.h); then cat config.h | sed '/^#define CONFIG_FILE/d;G' > tmp; mv tmp config.h; fi
>echo "#define CONFIG_FILE \"${sysconfdir}/trafitizer.conf\"" >> config.h

Страшно.

Вы, кажется, вообщё всё не совсем верно делаете :) config.h должен генериться автоматически из config.h.in при вызове скрипта configure. Ну и чтоб там появился #define CONFIG_FILE нужно в configure.in вызывать AC_DEFINE с нужными аргументами.



"Как править исходники при помощи autoconf"
Отправлено fa , 26-Дек-07 14:13 
>[...]
>>./configure --prefix=/home/user. Соответственно путь к конфигу уже не правильный.
>>Пока борюсь с этим в Makefile, меняя строчку с помощью sed
>>if (grep '#define CONFIG_FILE' config.h); then cat config.h | sed '/^#define CONFIG_FILE/d;G' > tmp; mv tmp config.h; fi
>>echo "#define CONFIG_FILE \"${sysconfdir}/trafitizer.conf\"" >> config.h
>
>Страшно.
>
>Вы, кажется, вообщё всё не совсем верно делаете :) config.h должен генериться
>автоматически из config.h.in при вызове скрипта configure.

Именно так и происходит. Эта манипуляция с grep проходит при запуске make, после того, как config.h уже сгенерирован.

Ну и чтоб там
>появился #define CONFIG_FILE нужно в configure.in вызывать AC_DEFINE с нужными аргументами.
>

Пробовал так:
AC_DEFINE_UNQUOTED(CONFIG_FILE, "$sysconfdir")

В результате получаю в config.h:
#define CONFIG_FILE "${prefix}/etc"