СоНоты

libtool и apxs

Недокументированые ключики libtool приводят к небольшим финтам ушами.

Для второго Апача собирать модуль используя apxs и automake/libtool можно следующим образом:


mod_dpsearch.so$(EXEEXT): $(mod_dpsearch_so_SOURCES) $(mod_dpsearch_so_DEPENDENCIES)
	$(APXS) -c -o $@ $(INCLUDES) -Wc,"$(mod_dpsearch_so_CFLAGS)" -DAPACHE@APACHE_VER@ \
	     -DDPS_CONF_DIR=\\\"@sysconfdir@\\\" -DDPS_VAR_DIR=\\\"$(localstatedir)\\\" \
	     $(mod_dpsearch_so_SOURCES) $(mod_dpsearch_so_LDFLAGS) $(mod_dpsearch_so_LDADD);

Однако для первоего Апача такое увы не работает, apxs от первого апача ругается на неизвестный формат библиотеки *.la (это libtool library file). До сего дня использовал такую конструкцию для сборки модуля для первого Апача:


mod_dpsearch.so$(EXEEXT): $(mod_dpsearch_so_SOURCES) $(mod_dpsearch_so_DEPENDENCIES)
	$(LIBTOOL) --mode=link $(APXS) -Wc,"$(mod_dpsearch_so_CFLAGS)" -c -o $@ $(INCLUDES) -DAPACHE@APACHE_VER@ \
	     -DDPS_CONF_DIR=\\\"@sysconfdir@\\\" -DDPS_VAR_DIR=\\\"$(localstatedir)\\\" \
	     $(mod_dpsearch_so_SOURCES) $(mod_dpsearch_so_LDFLAGS) $(mod_dpsearch_so_LDADD);

Все это работало до тех пор, пока у одно из пользователей не возникла проблема со сборкой модуля. После гугления инета оказалось, что ключи -Wc и -Wl у libtool есть, только они недокументированы, да к тому же в режиме link он самостоятельно заменяет -Wc на -Wl и с ним уже и вызывает apxs, -- и в результате получаем ошибку из-за неправильных ключей у apxs.

В общем вылечить удалось маленьким финтом ушами:


mod_dpsearch.so$(EXEEXT): $(mod_dpsearch_so_SOURCES) $(mod_dpsearch_so_DEPENDENCIES)
	$(LIBTOOL) --tag=CC --mode=link "$(APXS) -Wc,\"$(mod_dpsearch_so_CFLAGS)\"" -c -o $@ $(INCLUDES) -DAPACHE@APACHE_VER@ \
	     -DDPS_CONF_DIR=\\\"@sysconfdir@\\\" -DDPS_VAR_DIR=\\\"$(localstatedir)\\\" \
	     $(mod_dpsearch_so_SOURCES) $(mod_dpsearch_so_LDFLAGS) $(mod_dpsearch_so_LDADD);

В твком виде libtool не заменяет ключ -Wc и apxs запускается с правильными ключами.