СоНоты

В поисках collateindex.pl

Продолжая переход на FreeBSD-7.1-BETA, обнаружил, что перестала создаваться документация, созданная при помощи DOCBOOK. Причина оказалась в том, что configure перестал находить скриптик collateindex.pl, используемый для построения индекса.

Для поиска collateindex.pl на конретной машине я использовал набор макро dockbook.m4 из проекта PostgreSQL, в котором для поиска скрипта создана функция


# PGAC_PATH_COLLATEINDEX
# ----------------------
AC_DEFUN([PGAC_PATH_COLLATEINDEX],
[AC_REQUIRE([PGAC_PATH_DOCBOOK_STYLESHEETS])dnl
if test -n "$DOCBOOKSTYLE"; then
  AC_PATH_PROGS(COLLATEINDEX, collateindex.pl, [],
                [$DOCBOOKSTYLE/bin $PATH])
else
  AC_PATH_PROGS(COLLATEINDEX, collateindex.pl)
fi])# PGAC_PATH_COLLATEINDEX

Проблема заключается в том, что скрипт collateindex.pl не имеет прав на исполнение после установки из портов, а новая версия AC_PATH_PROGS "находит" указанную программу только в случае, если она имеет права на исполнение (в старой версии такой проверки не проводилось и эта функция отрабатывала правильно).

Поэтому функцию PGAC_PATH_COLLATEINDEX нужно переписать следующим образом:


# PGAC_PATH_COLLATEINDEX
# ----------------------
AC_DEFUN([PGAC_PATH_COLLATEINDEX],
[AC_REQUIRE([PGAC_PATH_DOCBOOK_STYLESHEETS])dnl
if test -n "$DOCBOOKSTYLE"; then
  AC_PATH_PROGS(COLLATEINDEX, collateindex.pl, [],
                [$DOCBOOKSTYLE/bin $PATH])
  if test "x$COLLATEINDEX" = "x"; then
  	AC_MSG_CHECKING(once again collateindex.pl)
	PATH_DIRS=`echo $PATH | tr : \ `
	MY_DIRS="$DOCBOOKSTYLE/bin"
  	for pgac_prefix in $MY_DIRS $PATH_DIRS; do
		pgac_candidate="$pgac_prefix/collateindex.pl"
		if test -f "$pgac_candidate"; then
			COLLATEINDEX="$pgac_candidate"
			break
		fi
	done
	AC_MSG_RESULT([$COLLATEINDEX])
  fi
else
  AC_PATH_PROGS(COLLATEINDEX, collateindex.pl)
  if test "x$COLLATEINDEX" = "x"; then
  	AC_MSG_CHECKING(once again collateindex.pl)
	PATH_DIRS=`echo $PATH | tr : \ `
  	for pgac_prefix in $PATH_DIRS; do
		pgac_candidate="$pgac_prefix/collateindex.pl"
		if test -f "$pgac_candidate"; then
			COLLATEINDEX="$pgac_candidate"
			break
		fi
	done
	AC_MSG_RESULT([$COLLATEINDEX])
  fi
fi])# PGAC_PATH_COLLATEINDEX