views:

230

answers:

4

I'm working on a project that will be distributed with GNU autoconf/automake, and I have a set of bash scripts which call awk scripts. I would like the bash scripts to end up in the $PATH, but not the awk scripts. How should I insert these into the project? Should they be put in with other binaries?

Also, is there a way to determine the final location of the file after installation? I presume that /usr/local/bin isn't always where the executables end up...

+2  A: 

Add something like this to Makefile.am

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

In this case it will install awkscript in $(prefix)/bin (you can also use $(bindir)).

Note: Dont forget that the first should be named name + dir (scripts -> scriptsdir) and the second should be name + _DATA (scripts -> scripts_DATA).

terminus
A: 

If the awk scripts won't go into the main bin directory (prefix/bin), then you need to place them in an appropriate sub-directory - probably of lib but possibly libexec or share (since the awk scripts are probably platform neutral).

Correct: software won't necessarily end up in /usr/local/bin; on my machine, /usr/local/bin is managed by MIS and all the software I install therefore goes under /usr/gnu/. I use: ./configure --prefix=/usr/gnu to get the software installed where I want it.

You can embed the value of PREFIX in the bash scripts -- effectively, you will 'compile' the scripts to include the install location. Be aware of problems during the build testing - you may need to locate the scripts relative to the current directory first and relative to PREFIX later.

Jonathan Leffler
A: 

Jonathan Leffler:

How would I cause automake to replace ${prefix} in the bash scripts? should I make them some sort of _BIN item, as opposed to _DATA item?

You should put this into the question by editing it.
terminus
A: 

Jonathan, in response to your additional question: if you want to replace the value of prefix at the time of build, you will need to:

  1. rename your script 'myscript' to 'myscript.in'
  2. add a rule to configure.ac to generate it at the bottom
  3. use a macro I made called AS_AC_EXPAND
  4. use it like this:

    AS_AC_EXPAND(BINDIR, $bindir)

  5. in your 'myscript.in', you can now use @BINDIR@ and it will get expanded to the full path where the script will end up being installed.

Note that you shouldn't use PREFIX directly, any of the installation directories can potentially be changed so you really want to use the value passed to configure for bindir and expand that.

Thomas Vander Stichele