пытаюсь написать autotools-скрипты для готового дерева исходников на С++. собственно дерево такое:
root
|
+-src
|
+-search_retriever
+-parser
+-много других
в root находятся скрипты: Makefile.am, configure.ac. в src - Makefile.ac, далее в каждой папке ниже по Makefile.am и configure.ac
configure.ac из корневой папки имеет следующий вид:
AC_PREREQ([2.64])
AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
AM_INIT_AUTOMAKE
AC_PROG_MAKE_SET
AC_CONFIG_SRCDIR([include/index_builder/DealerList.h])
AC_CONFIG_HEADERS([config.h])
# Checks for programs.
AC_PROG_CXX
AC_PROG_CC
# Checks for header files.
AC_CHECK_HEADERS([arpa/inet.h fcntl.h limits.h memory.h netinet/in.h stdint.h stdlib.h string.h strings.h sys/param.h sys/socket.h syslog.h unistd.h])
# Checks for typedefs, structures, and compiler characteristics.
AC_HEADER_STDBOOL
AC_C_INLINE
AC_TYPE_PID_T
AC_TYPE_SIZE_T
AC_TYPE_SSIZE_T
AC_TYPE_UINT16_T
AC_TYPE_UINT32_T
AC_TYPE_UINT64_T
# Checks for library functions.
AC_FUNC_ERROR_AT_LINE
AC_FUNC_FORK
AC_FUNC_MALLOC
AC_FUNC_REALLOC
AC_CHECK_FUNCS([atexit inet_ntoa memmove memset setlocale socket strcasecmp strchr strerror strncasecmp strrchr])
AC_CONFIG_FILES([Makefile
src/Makefile])
AC_CONFIG_SUBDIRS([src/search_retriever
src/parser])
AC_OUTPUT
корневой Makefile.am:
Makefile.am из папки src:
SUBDIRS = search_retriever parser
configure.ac в каждой из вложенных в src папок примерно следующего вида:
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ([2.64])
AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
AM_INIT_AUTOMAKE
AC_PROG_MAKE_SET
AC_CONFIG_SRCDIR([ConfigParser.cpp])
AC_CONFIG_HEADERS([config.h])
# Checks for programs.
AC_PROG_CXX
AC_PROG_CC
# Checks for libraries.
# FIXME: Replace `main' with a function in `-lboost_regex':
AC_CHECK_LIB([boost_regex], [main])
# FIXME: Replace `main' with a function in `-lmysqlclient_r':
AC_CHECK_LIB([mysqlclient_r], [main])
# FIXME: Replace `main' with a function in `-lpcrecpp':
AC_CHECK_LIB([pcrecpp], [main])
# FIXME: Replace `main' with a function in `-lpthread':
AC_CHECK_LIB([pthread], [main])
# Checks for header files.
AC_CHECK_HEADERS([arpa/inet.h netinet/in.h stdint.h stdlib.h string.h strings.h sys/param.h sys/socket.h syslog.h unistd.h])
# Checks for typedefs, structures, and compiler characteristics.
AC_HEADER_STDBOOL
AC_C_INLINE
AC_TYPE_PID_T
AC_TYPE_SIZE_T
AC_TYPE_SSIZE_T
AC_TYPE_UINT32_T
AC_TYPE_UINT64_T
# Checks for library functions.
AC_FUNC_ERROR_AT_LINE
AC_FUNC_FORK
AC_FUNC_MALLOC
AC_FUNC_REALLOC
AC_CHECK_FUNCS([atexit inet_ntoa memmove memset setlocale socket strcasecmp strerror strncasecmp strrchr])
AC_CONFIG_FILES([Makefile])
AC_OUTPUT
и Makefile.am очень прост для них:
INCLUDES = -I../../include/search_retriever -I../../include/common -I$(includedir)
AUTOMAKE_OPTIONS = foreign
bin_PROGRAMS = search_retriever
search_retriever_SOURCES = main.cpp ConfigParser.cpp LogFile.cpp SearcherDaemon.cpp libstemmer_utf8.cpp stem_UTF_8_english.cpp \
Distribution.cpp QueryMatcher.cpp api.cpp stem_UTF_8_russian.cpp utilities.cpp ../common/common.cpp
вобщем проблема в следующем: у меня собирается все отлично, решил залить файло в свн, закоммитил файлы configure.ac (на всякий случай), configure.in, config.h, config.h.in, Makefile.am (так же на всякий случай), Makefile.in из каждой папки. делаю чекаут куда-нибудь, запускаю ./configure из корня, все проходит, запускаю make, он еще раз запускает зачем-то configure в какой-то из папок, начинает один из компонент компилировать (те, что в папке src лежат) - модули собирает нормально, а как дело доходит до линковки - облом. не подключает либы, хотя так русским по белому написано AC_CHECK_LIB. причем в версии не из свна все линкуется замечательно. проблема нумер два, которая мне уже весь мозг съела: при запуске make'а руками в какой-то из директорий компонент make зацикливается, скотина. причем diff'ами смотрел разницу с теми скриптами, которые работают - абсолютно никакой разницы. вывод примерно следующий:
make[4]: Leaving directory `/home/milo/workspace/make_test/src/parser'
make[3]: Leaving directory `/home/milo/workspace/make_test/src/parser'
Making all in crawler_master
make[3]: Entering directory `/home/milo/workspace/make_test/src/crawler_master'
make[4]: Entering directory `/home/milo/workspace/make_test/src/crawler_master'
make[5]: Entering directory `/home/milo/workspace/make_test/src/crawler_master'
....
^Cmake[91]: *** [Makefile.in] Прерывание
make[90]: *** [Makefile.in] Прерывание
make[89]: *** [Makefile.in] Прерывание
make[88]: *** [Makefile.in] Прерывание
make[87]: *** [Makefile.in] Прерывание
очень надеюсь на вашу помощь....