Где разместить вспомогательные скрипты с GNU autoconf / automake? - PullRequest
2 голосов
/ 18 сентября 2008

Я работаю над проектом, который будет распространяться с GNU autoconf / automake, и у меня есть набор скриптов bash, которые вызывают скрипты awk. Я хотел бы, чтобы сценарии bash заканчивались на $ PATH, но не сценарии awk. Как мне вставить их в проект? Должны ли они быть вставлены с другими двоичными файлами?

Кроме того, есть ли способ определить окончательное местоположение файла после установки? Я предполагаю, что / usr / local / bin не всегда , где исполняемые файлы заканчиваются ...

Ответы [ 5 ]

7 голосов
/ 25 января 2012

Вы можете просто перечислить скрипты, которые вы хотите установить в Makefile.am:

bin_SCRIPTS = foo bar

Это приведет к установке foo и bar во время make install. Чтобы получить путь к их окончательному расположению, вы можете использовать @ bindir @ в foo.in и позволить настроить build foo для вас. Например, в файле configure.ac:

AC_CONFIG_FILES([foo bar])

и затем в foo.in:

#!/bin/sh

prefix=@prefix@
exec_prefix=@exec_prefix@
bindir=@bindir@
echo bindir = $bindir

Имейте в виду, что лицо, выполняющее configure, может указать любой из --prefix, --exec_prefix или --bindir, и установка может быть перенаправлена ​​с помощью DESTDIR. Используя описанную здесь методику, DESTDIR не будет учитываться, и скрипт будет установлен в месте, отличном от пути, по которому он будет отображаться. Это сделано намеренно и является правильным поведением, поскольку обычно установка DESTDIR используется для создания архива, который в конечном итоге будет распакован в файловую систему таким образом, что bindir в скрипте станет действительным.

3 голосов
/ 18 сентября 2008

Добавьте что-то подобное в Makefile.am

scriptsdir = $(prefix)/bin
scripts_DATA = awkscript1 awkscript2

В этом случае он установит awkscript в $ (префикс) / bin (вы также можете использовать $ (bindir)).

Примечание. Не забывайте, что первое имя должно называться name + dir (scripts -> scriptsdir), а второе - name + _DATA (scripts -> scripts_DATA).

2 голосов
/ 01 октября 2008

Джонатан, в ответ на ваш дополнительный вопрос: если вы хотите заменить значение префикса во время сборки, вам потребуется:

  1. переименуйте ваш скрипт 'myscript' в 'myscript.in'
  2. добавить правило в configure.ac для его генерации внизу
  3. используйте макрос, который я сделал, под названием AS_AC_EXPAND
  4. используйте это так:

    AS_AC_EXPAND (BINDIR, $ bindir)

  5. в вашем 'myscript.in', теперь вы можете использовать @ BINDIR @, и он будет расширен до полного пути, где скрипт будет установлен.

Обратите внимание, что вы не должны использовать PREFIX напрямую, любой из каталогов установки потенциально может быть изменен, поэтому вы действительно хотите использовать значение, переданное для настройки bindir и расширить его.

0 голосов
/ 16 апреля 2012

В руководстве Automake есть несколько советов по этому поводу. Кажется, что предпочтительным подходом является создание сценариев с помощью make-файла, а не с помощью сценария configure.

0 голосов
/ 18 сентября 2008

Если скрипты awk не попадают в основной каталог bin (префикс / bin), вам нужно поместить их в соответствующий подкаталог - возможно, lib, но, возможно, libexec или share (поскольку скрипты awk, вероятно, нейтральная платформа).

Правильно: программное обеспечение не обязательно окажется в / usr / local / bin; на моей машине / usr / local / bin управляется MIS, и поэтому все устанавливаемое мной программное обеспечение находится в / usr / gnu /. Я использую: ./configure --prefix = / usr / gnu, чтобы установить программное обеспечение там, где я хочу.

Вы можете встроить значение PREFIX в сценарии bash - фактически вы «скомпилируете» сценарии, указав место установки. Помните о проблемах во время тестирования сборки - вам может понадобиться сначала найти сценарии относительно текущего каталога, а затем относительно PREFIX.

...