Решено: automake/autoconf question

Модератор: Модераторы разделов

smilejeka
Сообщения: 29
ОС: Gentoo

Решено: automake/autoconf question

Сообщение smilejeka »

Доброго времени суток!
Меня инетересует такой вопрос - можно ли использовать automake не только для создания билдов?
Вобщим, задача такая - есть проект на пыхе, симфони. Решил написать деплоймент проекта с помощью Makefile, типа

Код: Выделить всё

MYSQL_USER=user
MYSQL_PASSWORD=password

all: init-project

data-load:
        ./symfony propel:data-load

init-project: configure-database data-load
        ./symfony fix
        ./symfony cc

configure-database:
        ./symfony --env=prod configure:database "mysql:dbname=test;host=localhost" $(MYSQL_USER) $(MYSQL_PASSWORD)

Но мне показалось мало и решил вынести определение пользователя и пароля. Типа

Код: Выделить всё

# ./configure --mysql-user=user --mysql-password=password

и он сгенерит предыдущий Makefile с подстановкой логина и пароля. Понял, что надо рыть в сторону automake, но все маны насквозь пронизаны C/C++, билдами и программами, что мне не подходит. Такое ощущение, что все в automake построено вокруг файла(программы), которую хотят сбилдить.


Итак, резюме - есть запуск ./configure --mysql-user=user --mysql-password=password, как сгенерить с подстановкой логина и пароля в Makefile in automake-way?
Заранее спасибо
Спасибо сказали:
Аватара пользователя
RasenHerz
Сообщения: 1341
ОС: Arch Linux amd64

Re: Решено: automake/autoconf question

Сообщение RasenHerz »

autoreconf/autoconf?
Спасибо сказали:
smilejeka
Сообщения: 29
ОС: Gentoo

Re: Решено: automake/autoconf question

Сообщение smilejeka »

да, спасибо, вродиб оно, только в процессе еще несколько вопросов:
создал я файл configure.ac, уведомил autoconf, что буду использовать еще параметр командной строки --mysq-user AC_ARG_VAR (mysql-user, [description])

Код: Выделить всё

AC_INIT
AC_ARG_VAR (mysql-user, [description])
AC_CONFIG_FILES([Makefile])
AC_OUTPUT

но

Код: Выделить всё

# autoconf
configure.ac:2: error: AC_SUBST: `' is not a valid shell variable name
../../lib/autoconf/general.m4:1473: AC_ARG_VAR is expanded from...
configure.ac:2: the top level
autom4te: /usr/bin/m4 failed with exit status: 1

в чем я загоняюсь?
Спасибо сказали:
smilejeka
Сообщения: 29
ОС: Gentoo

Re: Решено: automake/autoconf question

Сообщение smilejeka »

похоже, что AC_ARG_VAR определяет путь к внешним программам и не подходит для моей задачи.
я обнаружил, что ./configure принимает только такие параметры
AC_ARG_ENABLE(DISABLE) examples: ./configure --enable-ssl
AC_ARG_WITH examples: ./configure --with-ctype
AC_ARG_VAR examples: SVN=/usr/bin/svn ./configure

Подскажите, пожалуйста, вообще реально ли сделать кастомный параметр типа
./configure --mysql-user=root ?
Спасибо сказали:
Аватара пользователя
RasenHerz
Сообщения: 1341
ОС: Arch Linux amd64

Re: Решено: automake/autoconf question

Сообщение RasenHerz »

С AC_ARG_WITH можно получить что-то вроде --with-mysql-user=<user>

Как то так, сам давно с autoconf дела имел, так что нарыл пример с помощью гугля:

Код: Выделить всё

AC_DEFUN(
[MYPROJECT_CHECK_SSL],
[
AC_ARG_WITH(
   [ssl],
   [AC_HELP_STRING([--with-ssl], [provide the location of your SSL toolkit])],
    [
        ## if provided, set -L and -I accordingly
        MYPROJECT_DIST_SSL=${withval}
        MYPROJECT_LDFLAG_SSL="-L${MYPROJECT_DIST_SSL}/lib"
        MYPROJECT_CXXFLAG_SSL="-I${MYPROJECT_DIST_SSL}/include"

        AC_MSG_NOTICE([We'll look for ssl under ${MYPROJECT_DIST_SSL}])
        AC_SUBST(LDFLAG_SSL, [${MYPROJECT_LDFLAG_SSL}])
        AC_SUBST(CXXFLAG_SSL, [${MYPROJECT_CXXFLAG_SSL}])
    ],
   [
       ## if it's in a system path, there's no need for the "-L" or "-I" flags
       ## this means, if the tool isn't available in default header/library
       ## search paths, the build will fail.
       AC_MSG_NOTICE([We'll look for ssl in the default
                                               preprocessor/linker paths])
       AC_SUBST(LDFLAG_SSL, [""])
       AC_SUBST(CXXFLAG_SSL, [""])
    ]
)
]
)


Т.е. в пременной withval будет хранится имя пользователя MySQL.
Спасибо сказали:
smilejeka
Сообщения: 29
ОС: Gentoo

Re: Решено: automake/autoconf question

Сообщение smilejeka »

Ога, оно, спасибо
в итоге получилось что-то наподобии configure.ac

Код: Выделить всё

AC_INIT
AC_ARG_WITH([mysql_user],
            [AS_HELP_STRING([--with-mysql_user],
              [provide mysql user @<:@default=root@:>@])],
            [],
            [with_mysql_user=root])


AC_SUBST(MYSQL_USER, [$with_mysql_user])
AC_CONFIG_FILES([Makefile])
AC_OUTPUT

в Makefile.in

Код: Выделить всё

mysql_user = @MYSQL_USER@
configure-database:
        ./symfony --env=prod configure:database "mysql:dbname=test;host=localhost" $(MYSQL_USER) $(MYSQL_PASSWORD)


при запуске ./configure действительно подставляет в Makefile значение из командной строки
Вдогонку, ман на это все дело http://www.gnu.org/software/hello/manual/a...l-Software.html

Еще раз спасибо!!!
Спасибо сказали: