File: ax_define_sub_path.texi

package info (click to toggle)
autoconf-archive 20160916-1~bpo8%2B1
  • links: PTS, VCS
  • area: main
  • in suites: jessie-backports
  • size: 7,960 kB
  • sloc: sh: 694; python: 62; makefile: 49
file content (93 lines) | stat: -rw-r--r-- 3,747 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
@node ax_define_sub_path
@unnumberedsec ax_define_sub_path

@majorheading Synopsis

@smallexample
AX_DEFINE_SUB_PATH(DEFNAME, varname, description)
@end smallexample

@majorheading Description

Look at varname and detect the subpath that it contains relative to
$prefix/$exec_prefix. If the path is indeed relative to
$prefix/$exec_prefix, then a single "./" (dotslash) is prepended,
otherwise it can be seen as an absolute path that cannot be moved, which
you possibly do for "/etc" files, or even those ending up in
"/lib/modules" or "/winnt/system".

This macro is not very intelligent, it's just a first try in this
direction. It does currently just look into the current patterns, and
replaces a $@{prefix@} with a simple dot. Amazingly, it works quite well
for most packages.

Example (configure.ac):

@smallexample
  AX_DEFINE_DIR([EPREFIX], [exec_prefix], [--exec-prefix or default])
  AX_DEFINE_SUB_PATH([PATH_LIBDIR], [libdir], [--bindir subdir])
  AC_DEFINE_UNQUOTED([PACKAGE],"$PACKAGE", [Name of package])
@end smallexample

Example (in C):

@smallexample
  static const char _libdir[] = PATH_LIBDIR; /* configure default */
  char* libdir;
  char* eprefix = getenv (PACKAGE "DIR");
  if (! eprefix) eprefix = EPREFIX; /* default */
  if (*_libdir != '.') libdir = strdup(_libdir);
  else @{
     libdir = malloc(strlen(eprefix) + strlen(_libdir) + 2);
     strcpy(libdir, eprefix);
     strcat(libdir, PATH_DELIMITER_STRING);
     strcat(libdir, _libdir);
  @}
  ...
  free (libdir);
@end smallexample

The AX_DEFINE_SUB_PATHS(varnames) macro looks for the given various
install-paths that largely depend on either $@{prefix@} or $@{exec_prefix@}.
Just cut out the prefix and ac_define the value. The value is uppercased
and PATH_ prepended ie. ax_define_sub_paths(bindir libdir pkgdatadir)
will create the defines PATH_BINDIR PATH_LIBDIR PATH_PKGDATADIR - see
posix' include/paths.h that creates _PATH_DEV and friends.

@majorheading Source Code

Download the
@uref{http://git.savannah.gnu.org/gitweb/?p=autoconf-archive.git;a=blob_plain;f=m4/ax_define_sub_path.m4,latest
version of @file{ax_define_sub_path.m4}} or browse
@uref{http://git.savannah.gnu.org/gitweb/?p=autoconf-archive.git;a=history;f=m4/ax_define_sub_path.m4,the
macro's revision history}.

@majorheading License

@w{Copyright @copyright{} 2008 Guido U. Draheim @email{guidod@@gmx.de}}

This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 3 of the License, or (at your
option) any later version.

This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
Public License for more details.

You should have received a copy of the GNU General Public License along
with this program. If not, see <http://www.gnu.org/licenses/>.

As a special exception, the respective Autoconf Macro's copyright owner
gives unlimited permission to copy, distribute and modify the configure
scripts that are the output of Autoconf when processing the Macro. You
need not follow the terms of the GNU General Public License when using
or distributing such scripts, even though portions of the text of the
Macro appear in them. The GNU General Public License (GPL) does govern
all other use of the material that constitutes the Autoconf Macro.

This special exception to the GPL applies to versions of the Autoconf
Macro released by the Autoconf Archive. When you make and distribute a
modified version of the Autoconf Macro, you may extend this special
exception to the GPL to apply to your modified version as well.