summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog25
-rw-r--r--Makefile.am8
-rw-r--r--awk.h1
-rw-r--r--configure.ac7
-rw-r--r--doc/ChangeLog4
-rw-r--r--doc/gawk.119
-rw-r--r--doc/gawk.texi43
-rw-r--r--extension/ChangeLog7
-rw-r--r--extension/Makefile.am73
-rw-r--r--extension/arrayparm.c2
-rw-r--r--extension/filefuncs.c2
-rw-r--r--io.c84
-rw-r--r--main.c41
-rw-r--r--pc/ChangeLog4
-rw-r--r--pc/gawkmisc.pc2
-rw-r--r--posix/ChangeLog4
-rw-r--r--posix/gawkmisc.c1
-rw-r--r--vms/ChangeLog4
-rw-r--r--vms/gawkmisc.vms1
19 files changed, 263 insertions, 69 deletions
diff --git a/ChangeLog b/ChangeLog
index f5d1a8ae..eda35adf 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,28 @@
+2012-03-20 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * Makefile.am (EXTRA_DIST): Remove extension.
+ (SUBDIRS): Add extension so libraries will be built.
+ (DEFS): Define DEFLIBPATH and SHLIBEXT so we can find shared libraries.
+ * awk.h (deflibpath): New extern declaration.
+ * configure.ac: Add support for building shared libraries by adding
+ AC_PROG_LIBTOOL and AC_SUBST for acl_shlibext and pkgextensiondir.
+ (AC_CONFIG_FILES): Add extension/Makefile.
+ * io.c (pi_awkpath, pi_awklibpath): New static structures to contain
+ path information.
+ (awkpath, max_pathlen): Remove static variables now inside pi_awkpath.
+ (init_awkpath): Operate on path_info structure to support both
+ AWKPATH and AWKLIBPATH. No need for max_path to be static, since
+ this should be called only once for each environment variable.
+ (do_find_source): Add a path_info arg to specify which path to search.
+ Check the try_cwd parameter to decide whether to search the current
+ directory (not desirable for AWKLIBPATH).
+ (find_source): Choose appropriate path_info structure based on value
+ of the is_extlib argument. Set EXTLIB_SUFFIX using SHLIBEXT define
+ instead of hardcoding ".so".
+ * main.c (path_environ): New function to add AWKPATH or AWKLIBPATH
+ to the ENVIRON array.
+ (load_environ): Call path_environ for AWKPATH and AWKLIBPATH.
+
2012-01-02 Arnold D. Robbins <arnold@skeeve.com>
* io.c (Read_can_timeout, Read_timeout, Read_default_timeout):
diff --git a/Makefile.am b/Makefile.am
index b9470617..11932aa4 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -48,7 +48,6 @@ EXTRA_DIST = \
config.rpath \
config.sub \
depcomp \
- extension \
m4 \
missing \
missing_d \
@@ -76,6 +75,7 @@ SUBDIRS = \
awklib \
doc \
po \
+ extension \
test
# what to make and install
@@ -136,7 +136,11 @@ pkgdatadir = $(datadir)/awk
# stuff for compiling gawk/pgawk
DEFPATH='".$(PATH_SEPARATOR)$(pkgdatadir)"'
-DEFS= -DDEFPATH=$(DEFPATH) -DHAVE_CONFIG_H -DGAWK -DLOCALEDIR='"$(datadir)/locale"'
+# shared library support:
+SHLIBEXT = "\"$(acl_shlibext)"\"
+DEFLIBPATH="\"$(pkgextensiondir)\""
+
+DEFS= -DDEFPATH=$(DEFPATH) -DDEFLIBPATH=$(DEFLIBPATH) -DSHLIBEXT=$(SHLIBEXT) -DHAVE_CONFIG_H -DGAWK -DLOCALEDIR='"$(datadir)/locale"'
# Get rid of core files when cleaning
CLEANFILES = core core.*
diff --git a/awk.h b/awk.h
index 72593902..d6707805 100644
--- a/awk.h
+++ b/awk.h
@@ -1082,6 +1082,7 @@ extern const char def_strftime_format[];
extern char quote;
extern char *defpath;
+extern char *deflibpath;
extern char envsep;
extern char casetable[]; /* for case-independent regexp matching */
diff --git a/configure.ac b/configure.ac
index 3b0ba330..a7de26af 100644
--- a/configure.ac
+++ b/configure.ac
@@ -67,6 +67,7 @@ AC_PROG_YACC
AC_PROG_LN_S
AC_PROG_CC
AC_PROG_CPP
+AC_PROG_LIBTOOL
AC_OBJEXT
AC_EXEEXT
@@ -99,6 +100,11 @@ fi
AC_SUBST(CFLAGS)
+# shared library suffix for dynamic loading:
+AC_SUBST(acl_shlibext)
+# default shared library location
+AC_SUBST([pkgextensiondir], ['${pkglibdir}'/$VERSION])
+
dnl checks for systems
AC_ZOS_USS
AC_ISC_POSIX
@@ -357,6 +363,7 @@ AH_BOTTOM([#include "custom.h"])
AC_CONFIG_FILES(Makefile
awklib/Makefile
+ extension/Makefile
doc/Makefile
po/Makefile.in
test/Makefile)
diff --git a/doc/ChangeLog b/doc/ChangeLog
index 2bbb982d..3ff659e6 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,3 +1,7 @@
+2012-03-20 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * gawk.texi, gawk.1: Add AWKLIBPATH.
+
2012-02-06 Arnold D. Robbins <arnold@skeeve.com>
* gawk.texi, gawk.1: And some minor edits thereunto.
diff --git a/doc/gawk.1 b/doc/gawk.1
index 07a8d0e3..cc0ccae2 100644
--- a/doc/gawk.1
+++ b/doc/gawk.1
@@ -330,11 +330,10 @@ these options cause an immediate, successful exit.)
Load a shared library
.IR lib .
This searches for the library using the
-.B AWKPATH
-environment variable. The suffix
-.I .so
-in the library name is optional, and
-the library initialization routine is expected to be named
+.B AWKLIBPATH
+environment variable. If the initial search fails, another attempt will
+be made after appending the default shared library suffix for the platform.
+The library initialization routine is expected to be named
.BR dlload() .
.TP
.PD 0
@@ -3596,6 +3595,16 @@ and
options.
.PP
The
+.B AWKLIBPATH
+environment variable can be used to provide a list of directories that
+.I gawk
+searches when looking for files named via the
+.B \-l
+and
+.B \-\^\-load
+options.
+.PP
+The
.B GAWK_READ_TIMEOUT
environment variable can be used to specify a timeout
in milliseconds for reading input from a terminal, pipe
diff --git a/doc/gawk.texi b/doc/gawk.texi
index 5b3dd71c..d0d54121 100644
--- a/doc/gawk.texi
+++ b/doc/gawk.texi
@@ -351,6 +351,8 @@ particular records in a file and perform operations upon them.
uses.
* AWKPATH Variable:: Searching directories for @command{awk}
programs.
+* AWKLIBPATH Variable:: Searching directories for @command{awk}
+ shared libraries.
* Other Environment Variables:: The environment variables.
* Exit Status:: @command{gawk}'s exit status.
* Include Files:: Including other files into your program.
@@ -3185,8 +3187,9 @@ that @command{gawk} accepts and then exit.
@cindex @code{-l} option
@cindex @code{--load} option
@cindex loading, library
-Load a shared library @var{lib}. This searches for the library using the @env{AWKPATH}
-environment variable. The suffix @samp{.so} in the library name is optional.
+Load a shared library @var{lib}. This searches for the library using the @env{AWKLIBPATH}
+environment variable. The correct library suffix for your platform will be
+supplied by default, so it need not be specified in the library name.
The library initialization routine should be named @code{dlload()}.
@item -L @r{[}value@r{]}
@@ -3558,6 +3561,8 @@ behaves.
@menu
* AWKPATH Variable:: Searching directories for @command{awk}
programs.
+* AWKLIBPATH Variable:: Searching directories for @command{awk}
+ shared libraries.
* Other Environment Variables:: The environment variables.
@end menu
@@ -3633,6 +3638,21 @@ sense: the @env{AWKPATH} environment variable is used to find the program
source files. Once your program is running, all the files have been
found, and @command{gawk} no longer needs to use @env{AWKPATH}.
+@node AWKLIBPATH Variable
+@subsection The @env{AWKLIBPATH} Environment Variable
+@cindex @env{AWKLIBPATH} environment variable
+@cindex directories, searching
+@cindex search paths
+@cindex search paths, for shared libraries
+@cindex differences in @command{awk} and @command{gawk}, @code{AWKLIBPATH} environment variable
+
+The @env{AWKLIBPATH} environment variable is similar to the @env{AWKPATH}
+variable, but it is used to search for shared libraries specified
+with the @option{-l} option rather than for source files. If the library
+is not found, the path is searched again after adding the appropriate
+shared library suffix for the platform. For example, on Linux systems,
+the suffix @samp{.so} is used.
+
@node Other Environment Variables
@subsection Other Environment Variables
@@ -12746,7 +12766,9 @@ does not affect the environment passed on to any programs that
Some operating systems may not have environment variables.
On such systems, the @code{ENVIRON} array is empty (except for
@w{@code{ENVIRON["AWKPATH"]}},
-@pxref{AWKPATH Variable}).
+@pxref{AWKPATH Variable} and
+@w{@code{ENVIRON["AWKLIBPATH"]}},
+@pxref{AWKLIBPATH Variable}).
@cindex @command{gawk}, @code{ERRNO} variable in
@cindex @code{ERRNO} variable
@@ -27025,6 +27047,11 @@ the @option{-f} command-line option
(@pxref{Options}).
@item
+The @env{AWKLIBPATH} environment variable for specifying a path search for
+the @option{-l} command-line option
+(@pxref{Options}).
+
+@item
The ability to use GNU-style long-named options that start with @option{--}
and the
@option{--characters-as-bytes},
@@ -29534,11 +29561,11 @@ anywhere in the program.
@command{gawk} has a list of directories where it searches for libraries.
By default, the list includes directories that depend upon how gawk was built
-and installed (@pxref{AWKPATH Variable}). If you want @command{gawk}
+and installed (@pxref{AWKLIBPATH Variable}). If you want @command{gawk}
to look for libraries in your private directory, you have to tell it.
-The way to do it is to set the @env{AWKPATH} environment variable
-(@pxref{AWKPATH Variable}).
-@command{gawk} supplies the default suffix @samp{.so} if it is not
+The way to do it is to set the @env{AWKLIBPATH} environment variable
+(@pxref{AWKLIBPATH Variable}).
+@command{gawk} supplies the default shared library platform suffix if it is not
present in the name of the library.
If the name of your library is @file{mylib.so}, you can simply type
@@ -29550,7 +29577,7 @@ and @command{gawk} will do everything necessary to load in your library,
and then call your @code{dlload()} routine.
You can always specify the library using an absolute pathname, in which
-case @command{gawk} will not use @env{AWKPATH} to search for it.
+case @command{gawk} will not use @env{AWKLIBPATH} to search for it.
@node Sample Library
@appendixsubsec Example: Directory and File Operation Built-ins
diff --git a/extension/ChangeLog b/extension/ChangeLog
index dff4cf67..251f86c8 100644
--- a/extension/ChangeLog
+++ b/extension/ChangeLog
@@ -1,3 +1,10 @@
+2012-03-20 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * Makefile.am: New file to build and install shared libraries.
+ * arrayparm.c (do_mkarray): Get it to compile by removing 2nd arg
+ to assoc_clear.
+ * filefuncs.c (do_stat): Ditto.
+
2011-08-31 John Haque <j.eh@mchsi.com>
* arrayparm.c, filefuncs.c, fork.c, ordchr.c, readfile.c,
rwarray.c, testarg.c: Updated.
diff --git a/extension/Makefile.am b/extension/Makefile.am
new file mode 100644
index 00000000..27bdff4e
--- /dev/null
+++ b/extension/Makefile.am
@@ -0,0 +1,73 @@
+#
+# extension/Makefile.am --- automake input file for gawk
+#
+# Copyright (C) 1995-2006 the Free Software Foundation, Inc.
+#
+# This file is part of GAWK, the GNU implementation of the
+# AWK Programming Language.
+#
+# GAWK 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.
+#
+# GAWK 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, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+#
+
+## Process this file with automake to produce Makefile.in.
+
+INCLUDES = -I.. -I$(top_srcdir) -I$(top_srcdir)/intl
+
+lib_LTLIBRARIES = \
+ libarrayparm.la \
+ libfilefuncs.la \
+ libfork.la \
+ libordchr.la \
+ libreadfile.la \
+ libtestarg.la
+
+# The arrayparm, zaxxon, and testarg libraries do not do anything useful,
+# so do not install them...
+
+install_libraries = \
+ libfilefuncs.la \
+ libfork.la \
+ libordchr.la \
+ libreadfile.la
+
+libarrayparm_la_SOURCES = arrayparm.c
+libfilefuncs_la_SOURCES = filefuncs.c
+libfork_la_SOURCES = fork.c
+libordchr_la_SOURCES = ordchr.c
+libreadfile_la_SOURCES = readfile.c
+libtestarg_la_SOURCES = testarg.c
+
+install: $(install_libraries)
+ for p in $(install_libraries); do \
+ . ./$$p ; \
+ f=`echo $$dlname | sed -e 's/^lib//' -e 's/\.0//g'` ; \
+ echo "Installing $$dlname in $(DESTDIR)$(pkgextensiondir)/$$f" ; \
+ $(INSTALL_PROGRAM) .libs/$$dlname $(DESTDIR)$(pkgextensiondir)/$$f ; \
+ done
+
+uninstall: $(install_libraries)
+ for p in $(install_libraries); do \
+ . ./$$p ; \
+ f=`echo $$dlname | sed -e 's/^lib//' -e 's/\.0//g'` ; \
+ echo "Removing $$dlname in $(DESTDIR)$(pkgextensiondir)/$$f" ; \
+ rm -f $(DESTDIR)$(pkgextensiondir)/$$f ; \
+ done
+
+EXTRA_DIST = \
+ ChangeLog \
+ ChangeLog.0 \
+ *.awk \
+ doit \
+ steps
diff --git a/extension/arrayparm.c b/extension/arrayparm.c
index b0aee33d..1e28811e 100644
--- a/extension/arrayparm.c
+++ b/extension/arrayparm.c
@@ -60,7 +60,7 @@ do_mkarray(int nargs)
printf("sub->type = %s\n", nodetype2str(sub->type));
printf("val->type = %s\n", nodetype2str(val->type));
- assoc_clear(var, NULL);
+ assoc_clear(var);
elemval = assoc_lookup(var, sub);
*elemval = dupnode(val);
diff --git a/extension/filefuncs.c b/extension/filefuncs.c
index 1a0a86ef..dd1b29a8 100644
--- a/extension/filefuncs.c
+++ b/extension/filefuncs.c
@@ -177,7 +177,7 @@ do_stat(int nargs)
array = get_array_argument(1, FALSE);
/* empty out the array */
- assoc_clear(array, NULL);
+ assoc_clear(array);
/* lstat the file, if error, set ERRNO and return */
(void) force_string(file);
diff --git a/io.c b/io.c
index 25f32e21..5a110e02 100644
--- a/io.c
+++ b/io.c
@@ -2311,35 +2311,45 @@ do_getline(int intovar, IOBUF *iop)
return make_number((AWKNUM) 1.0);
}
+typedef struct {
+ const char *envname;
+ char **dfltp;
+ char try_cwd; /* always search current directory? */
+ char **awkpath; /* array containing library search paths */
+ int max_pathlen; /* length of the longest item in awkpath */
+} path_info;
+
+static path_info pi_awkpath = {
+ .envname = "AWKPATH",
+ .dfltp = &defpath,
+ .try_cwd = TRUE,
+};
-static char **awkpath = NULL; /* array containing library search paths */
-static int max_pathlen; /* length of the longest item in awkpath */
+static path_info pi_awklibpath = {
+ .envname = "AWKLIBPATH",
+ .dfltp = &deflibpath,
+ .try_cwd = FALSE,
+};
/* init_awkpath --- split path(=$AWKPATH) into components */
static void
-init_awkpath(char *path)
+init_awkpath(path_info *pi)
{
+ char *path;
char *start, *end, *p;
int len, i;
- static int max_path = 0;
+ int max_path; /* (# of allocated paths)-1 */
#define INC_PATH 5
- max_pathlen = 0;
- if (path == NULL || *path == '\0')
- path = defpath;
-
- for (i = 0; i < max_path && awkpath[i]; i++) {
- efree(awkpath[i]);
- awkpath[i] = NULL;
- }
+ pi->max_pathlen = 0;
+ if ((path = getenv(pi->envname)) == NULL || *path == '\0')
+ path = *(pi->dfltp);
- if (max_path == 0) {
- max_path = INC_PATH;
- emalloc(awkpath, char **, (max_path + 1) * sizeof(char *), "init_awkpath");
- memset(awkpath, 0, (max_path + 1) * sizeof(char *));
- }
+ max_path = INC_PATH;
+ emalloc(pi->awkpath, char **, (max_path + 1) * sizeof(char *), "init_awkpath");
+ memset(pi->awkpath, 0, (max_path + 1) * sizeof(char *));
end = start = path;
i = 0;
@@ -2358,12 +2368,12 @@ init_awkpath(char *path)
if (i == max_path) {
max_path += INC_PATH;
- erealloc(awkpath, char **, (max_path + 1) * sizeof(char *), "init_awkpath");
- memset(awkpath + i, 0, (INC_PATH + 1) * sizeof(char *));
+ erealloc(pi->awkpath, char **, (max_path + 1) * sizeof(char *), "init_awkpath");
+ memset(pi->awkpath + i, 0, (INC_PATH + 1) * sizeof(char *));
}
- awkpath[i++] = p;
- if (len > max_pathlen)
- max_pathlen = len;
+ pi->awkpath[i++] = p;
+ if (len > pi->max_pathlen)
+ pi->max_pathlen = len;
}
/* skip one or more envsep char */
@@ -2371,7 +2381,7 @@ init_awkpath(char *path)
end++;
start = end;
}
- awkpath[i] = NULL;
+ pi->awkpath[i] = NULL;
#undef INC_PATH
}
@@ -2403,7 +2413,7 @@ get_cwd ()
/* do_find_source --- search $AWKPATH for file, return NULL if not found */
static char *
-do_find_source(const char *src, struct stat *stb, int *errcode)
+do_find_source(const char *src, struct stat *stb, int *errcode, path_info *pi)
{
char *path;
int i;
@@ -2422,7 +2432,7 @@ do_find_source(const char *src, struct stat *stb, int *errcode)
}
/* try current directory before $AWKPATH search */
- if (stat(src, stb) == 0) {
+ if (pi->try_cwd && (stat(src, stb) == 0)) {
path = get_cwd();
if (path == NULL) {
*errcode = errno;
@@ -2434,16 +2444,15 @@ do_find_source(const char *src, struct stat *stb, int *errcode)
return path;
}
- if (awkpath == NULL)
- init_awkpath(getenv("AWKPATH"));
+ if (pi->awkpath == NULL)
+ init_awkpath(pi);
- emalloc(path, char *, max_pathlen + strlen(src) + 1, "do_find_source");
- for (i = 0; awkpath[i] != NULL; i++) {
- if (strcmp(awkpath[i], "./") == 0 || strcmp(awkpath[i], ".") == 0) {
- /* FIXME: already tried CWD above; Why do it again ? */
+ emalloc(path, char *, pi->max_pathlen + strlen(src) + 1, "do_find_source");
+ for (i = 0; pi->awkpath[i] != NULL; i++) {
+ if (strcmp(pi->awkpath[i], "./") == 0 || strcmp(pi->awkpath[i], ".") == 0)
*path = '\0';
- } else
- strcpy(path, awkpath[i]);
+ else
+ strcpy(path, pi->awkpath[i]);
strcat(path, src);
if (stat(path, stb) == 0)
return path;
@@ -2461,11 +2470,12 @@ char *
find_source(const char *src, struct stat *stb, int *errcode, int is_extlib)
{
char *path;
+ path_info *pi = (is_extlib ? &pi_awklibpath : &pi_awkpath);
*errcode = 0;
if (src == NULL || *src == '\0')
return NULL;
- path = do_find_source(src, stb, errcode);
+ path = do_find_source(src, stb, errcode, pi);
if (path == NULL && is_extlib) {
char *file_ext;
@@ -2473,7 +2483,7 @@ find_source(const char *src, struct stat *stb, int *errcode, int is_extlib)
size_t src_len;
size_t suffix_len;
-#define EXTLIB_SUFFIX ".so"
+#define EXTLIB_SUFFIX "." SHLIBEXT
src_len = strlen(src);
suffix_len = strlen(EXTLIB_SUFFIX);
@@ -2485,7 +2495,7 @@ find_source(const char *src, struct stat *stb, int *errcode, int is_extlib)
save_errno = errno;
emalloc(file_ext, char *, src_len + suffix_len + 1, "find_source");
sprintf(file_ext, "%s%s", src, EXTLIB_SUFFIX);
- path = do_find_source(file_ext, stb, errcode);
+ path = do_find_source(file_ext, stb, errcode, pi);
efree(file_ext);
if (path == NULL)
errno = save_errno;
@@ -2505,7 +2515,7 @@ find_source(const char *src, struct stat *stb, int *errcode, int is_extlib)
emalloc(file_awk, char *, strlen(src) +
sizeof(DEFAULT_FILETYPE) + 1, "find_source");
sprintf(file_awk, "%s%s", src, DEFAULT_FILETYPE);
- path = do_find_source(file_awk, stb, errcode);
+ path = do_find_source(file_awk, stb, errcode, pi);
efree(file_awk);
if (path == NULL) {
errno = save_errno;
diff --git a/main.c b/main.c
index 8899db59..693db0f4 100644
--- a/main.c
+++ b/main.c
@@ -973,6 +973,29 @@ init_vars()
/* load_environ --- populate the ENVIRON array */
+static void
+path_environ(const char *pname, const char *dflt)
+{
+ char *val;
+ NODE **aptr;
+ NODE *tmp;
+
+ tmp = make_string(pname, strlen(pname));
+ if (! in_array(ENVIRON_node, tmp)) {
+ /*
+ * On VMS, environ[] only holds a subset of what getenv() can
+ * find, so look AWKPATH up before resorting to default path.
+ */
+ val = getenv(pname);
+ if (val == NULL)
+ val = dflt;
+ aptr = assoc_lookup(ENVIRON_node, tmp);
+ unref(*aptr);
+ *aptr = make_string(val, strlen(val));
+ }
+ unref(tmp);
+}
+
static NODE *
load_environ()
{
@@ -1006,23 +1029,11 @@ load_environ()
*--val = '=';
}
/*
- * Put AWKPATH into ENVIRON if it's not there.
+ * Put AWKPATH and AWKLIBPATh into ENVIRON if not already there.
* This allows querying it from within awk programs.
*/
- tmp = make_string("AWKPATH", 7);
- if (! in_array(ENVIRON_node, tmp)) {
- /*
- * On VMS, environ[] only holds a subset of what getenv() can
- * find, so look AWKPATH up before resorting to default path.
- */
- val = getenv("AWKPATH");
- if (val == NULL)
- val = defpath;
- aptr = assoc_lookup(ENVIRON_node, tmp);
- unref(*aptr);
- *aptr = make_string(val, strlen(val));
- }
- unref(tmp);
+ path_environ("AWKPATH", defpath);
+ path_environ("AWKLIBPATH", deflibpath);
return ENVIRON_node;
}
diff --git a/pc/ChangeLog b/pc/ChangeLog
index 5f287dd8..a5ce6002 100644
--- a/pc/ChangeLog
+++ b/pc/ChangeLog
@@ -1,3 +1,7 @@
+2012-03-20 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * gawkmisc.pc (deflibpath): New global variable.
+
2011-12-12 Scott Deifik <scottd.mail@sbcglobal.net>
* Makefile.tst: Sync with mainline version.
diff --git a/pc/gawkmisc.pc b/pc/gawkmisc.pc
index 64b42396..cb1e209a 100644
--- a/pc/gawkmisc.pc
+++ b/pc/gawkmisc.pc
@@ -31,6 +31,8 @@ char *defpath = DEFPATH;
# else
char *defpath = ".;c:\\lib\\awk;c:\\gnu\\lib\\awk";
# endif
+/* the Makefile should define DEFLIBPATH */
+char *deflibpath = DEFLIBPATH;
#ifdef __EMX__
#include<io.h>
diff --git a/posix/ChangeLog b/posix/ChangeLog
index 8aaeb418..e899a6cd 100644
--- a/posix/ChangeLog
+++ b/posix/ChangeLog
@@ -1,3 +1,7 @@
+2012-03-20 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * gawkmisc.c (deflibpath): New global variable.
+
2011-06-23 Arnold D. Robbins <arnold@skeeve.com>
* ChangeLog.0: Rotated ChangeLog into this file.
diff --git a/posix/gawkmisc.c b/posix/gawkmisc.c
index acc3c9d5..270872ac 100644
--- a/posix/gawkmisc.c
+++ b/posix/gawkmisc.c
@@ -26,6 +26,7 @@
char quote = '\'';
char *defpath = DEFPATH;
+char *deflibpath = DEFLIBPATH;
char envsep = ':';
#ifndef INVALID_HANDLE
diff --git a/vms/ChangeLog b/vms/ChangeLog
index a39f1125..90a6e75e 100644
--- a/vms/ChangeLog
+++ b/vms/ChangeLog
@@ -1,3 +1,7 @@
+2012-03-20 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * gawkmisc.vms (deflibpath): New global variable.
+
2011-12-31 Arnold D. Robbins <arnold@skeeve.com>
* vms_misc.c: [STREQ, STREQN]: Change use of macros to call
diff --git a/vms/gawkmisc.vms b/vms/gawkmisc.vms
index 346a1e88..90b2530b 100644
--- a/vms/gawkmisc.vms
+++ b/vms/gawkmisc.vms
@@ -25,6 +25,7 @@
char quote = '\'';
char *defpath = DEFPATH;
+char *deflibpath = DEFLIBPATH;
char envsep = ',';
/* gawk_name --- pull out the "gawk" part from how the OS called us */