summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicholas Clark <nick@ccl4.org>2011-09-28 11:07:32 +0200
committerNicholas Clark <nick@ccl4.org>2011-09-28 11:07:32 +0200
commit6f31bef90fda3b9a8027adfb123055bc0eefc81c (patch)
tree0f784ca721071024a562afc6096b28d08ead5d7f
parent2480ae1c1b2fa11085b45f96de55cb16c3bcc343 (diff)
parent3f728e2e43e05f9eb833343447d126327b7dee56 (diff)
downloadperl-6f31bef90fda3b9a8027adfb123055bc0eefc81c.tar.gz
Merge the improved $^X absolute pathname conversion.
-rwxr-xr-xConfigure250
-rw-r--r--Cross/config.sh-arm-linux2
-rw-r--r--NetWare/config.wc2
-rw-r--r--Porting/Glossary10
-rw-r--r--Porting/config.sh2
-rwxr-xr-xconfig_h.SH14
-rw-r--r--configure.com2
-rw-r--r--epoc/config.sh2
-rw-r--r--perl.c50
-rw-r--r--plan9/config_sh.sample2
-rw-r--r--pod/perldelta.pod12
-rw-r--r--symbian/config.sh2
-rw-r--r--t/op/magic.t6
-rw-r--r--uconfig.h18
-rw-r--r--uconfig.sh2
-rw-r--r--uconfig64.sh2
-rw-r--r--win32/config.ce2
-rw-r--r--win32/config.gc2
-rw-r--r--win32/config.gc642
-rw-r--r--win32/config.gc64nox2
-rw-r--r--win32/config.vc2
-rw-r--r--win32/config.vc642
22 files changed, 366 insertions, 24 deletions
diff --git a/Configure b/Configure
index 42a0a19ee8..fe2fcc9afe 100755
--- a/Configure
+++ b/Configure
@@ -1229,11 +1229,13 @@ nm_opt=''
nm_so_opt=''
runnm=''
usenm=''
+usensgetexecutablepath=''
useperlio=''
usesocks=''
d_oldpthreads=''
use5005threads=''
useithreads=''
+usekernprocpathname=''
usereentrant=''
usethreads=''
incpath=''
@@ -16045,23 +16047,24 @@ echo " "
procselfexe=''
val="$undef"
case "$d_readlink" in
-"$define")
- if $issymlink /proc/self/exe ; then
- $ls -l /proc/self/exe > reflect
+ "$define")
+ : NetBSD first as /proc/self is a symlink to /proc/curproc, and it feels
+ : more tidy to avoid an extra level of symlink
+ set NetBSD /proc/curproc/exe Linux /proc/self/exe FreeBSD /proc/curproc/file Solaris /proc/self/path/a.out
+ while test $# -gt 0; do
+ type=$1; try=$2
+ shift; shift
+ if $issymlink $try; then
+ $ls -l $try > reflect
if $contains /`basename $ls` reflect >/dev/null 2>&1; then
- echo "You have Linux-like /proc/self/exe."
- procselfexe='"/proc/self/exe"'
- val="$define"
- fi
- fi
- if $issymlink /proc/curproc/file ; then
- $ls -l /proc/curproc/file > reflect
- if $contains /`basename $ls` reflect >/dev/null 2>&1; then
- echo "You have BSD-like /proc/curproc/file."
- procselfexe='"/proc/curproc/file"'
- val="$define"
+ echo "You have $type-like $try."
+ procselfexe='"'$try'"'
+ val="$define"
+ : This will break out of the loop
+ set X; shift
fi
- fi
+ fi
+ done
;;
esac
$rm -f reflect
@@ -19346,6 +19349,221 @@ $rm_try
set ebcdic
eval $setvar
+: Determine if we can use sysctl with KERN_PROC_PATHNAME to find executing program
+echo " "
+echo "Determining whether we can use sysctl with KERN_PROC_PATHNAME to find executing program..." >&4
+$cat >try.c <<'EOM'
+/* Intentionally a long probe as I'd like to sanity check that the exact
+ approach is going to work, as thinking it will work, but only having it
+ part working at runtime is worse than not having it. */
+
+#include <sys/types.h>
+#include <sys/sysctl.h>
+#include <sys/param.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+int
+main(int argc, char **argv) {
+ char *buffer;
+ char *argv_leaf = strrchr(argv[0], '/');
+ char *buffer_leaf;
+ size_t size = 0;
+ int mib[4];
+
+ mib[0] = CTL_KERN;
+ mib[1] = KERN_PROC;
+ mib[2] = KERN_PROC_PATHNAME;
+ mib[3] = -1;
+
+ if (!argv_leaf) {
+ fprintf(stderr, "Can't locate / in '%s'\n", argv[0]);
+ return 1;
+ }
+
+ if (sysctl(mib, 4, NULL, &size, NULL, 0)) {
+ perror("sysctl");
+ return 2;
+ }
+
+ if (size < strlen(argv_leaf) + 1) {
+ fprintf(stderr, "size %lu is too short for a path\n",
+ (unsigned long) size);
+ return 3;
+ }
+
+ if (size > MAXPATHLEN * MAXPATHLEN) {
+ fprintf(stderr, "size %lu is too long for a path\n",
+ (unsigned long) size);
+ return 4;
+ }
+
+ buffer = malloc(size);
+ if (!buffer) {
+ perror("malloc");
+ return 5;
+ }
+
+ if (sysctl(mib, 4, buffer, &size, NULL, 0)) {
+ perror("sysctl");
+ return 6;
+ }
+
+ if (strlen(buffer) + 1 != size) {
+ fprintf(stderr, "size != strlen(buffer) + 1 (%lu != %lu)\n",
+ (unsigned long)size, (unsigned long)strlen(buffer) + 1);
+ return 7;
+ }
+
+
+ if (*buffer != '/') {
+ fprintf(stderr, "Not an absolute path: '%s'\n", buffer);
+ return 8;
+ }
+
+ if (strstr(buffer, "/./")) {
+ fprintf(stderr, "Contains /./: '%s'\n", buffer);
+ return 9;
+ }
+
+ if (strstr(buffer, "/../")) {
+ fprintf(stderr, "Contains /../: '%s'\n", buffer);
+ return 10;
+ }
+
+ buffer_leaf = strrchr(buffer, '/');
+ if (strcmp(buffer_leaf, argv_leaf) != 0) {
+ fprintf(stderr, "Leafnames differ: '%s' vs '%s'\n", argv[0], buffer);
+ return 11;
+ }
+
+ free(buffer);
+
+ return 0;
+}
+EOM
+
+val=$undef
+set try
+if eval $compile_ok; then
+ if $run ./try; then
+ echo "You can use sysctl with KERN_PROC_PATHNAME to find the executing program." >&4
+ val="$define"
+ else
+ echo "Nope, sysctl with KERN_PROC_PATHNAME doesn't work here." >&4
+ val="$undef"
+ fi
+else
+ echo "I'm unable to compile the test program." >&4
+ echo "I'll assume no sysctl with KERN_PROC_PATHNAME here." >&4
+ val="$undef"
+fi
+$rm_try
+set usekernprocpathname
+eval $setvar
+
+: Determine if we can use _NSGetExecutablePath to find executing program
+echo " "
+echo "Determining whether we can use _NSGetExecutablePath to find executing program..." >&4
+$cat >try.c <<'EOM'
+/* Intentionally a long probe as I'd like to sanity check that the exact
+ approach is going to work, as thinking it will work, but only having it
+ part working at runtime is worse than not having it. */
+#include <mach-o/dyld.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/param.h>
+#include <string.h>
+
+int
+main(int argc, char **argv) {
+ char buf[1];
+ uint32_t size = sizeof(buf);
+ int result;
+ char *buffer;
+ char *tidied;
+ char *argv_leaf = strrchr(argv[0], '/');
+ char *tidied_leaf;
+
+ if (!argv_leaf) {
+ fprintf(stderr, "Can't locate / in '%s'\n", argv[0]);
+ return 1;
+ }
+
+ _NSGetExecutablePath(buf, &size);
+ if (size > MAXPATHLEN * MAXPATHLEN) {
+ fprintf(stderr, "_NSGetExecutablePath size %u is too long for a path\n",
+ (unsigned int) size);
+ return 2;
+ }
+
+ buffer = malloc(size);
+ if (!buffer) {
+ perror("malloc");
+ return 3;
+ }
+
+ result = _NSGetExecutablePath(buffer, &size);
+ if (result != 0) {
+ fprintf(stderr, "_NSGetExecutablePath returned %i for a size of %u\n",
+ result, (unsigned int) size);
+ return 4;
+ }
+
+ tidied = realpath(buffer, NULL);
+ if (!tidied) {
+ perror("realpath");
+ return 5;
+ }
+
+ free(buffer);
+
+ if (*tidied != '/') {
+ fprintf(stderr, "Not an absolute path: '%s'\n", tidied);
+ return 6;
+ }
+
+ if (strstr(tidied, "/./")) {
+ fprintf(stderr, "Contains /./: '%s'\n", tidied);
+ return 7;
+ }
+
+ if (strstr(tidied, "/../")) {
+ fprintf(stderr, "Contains /../: '%s'\n", tidied);
+ return 8;
+ }
+
+ tidied_leaf = strrchr(tidied, '/');
+ if (strcmp(tidied_leaf, argv_leaf) != 0) {
+ fprintf(stderr, "Leafnames differ: '%s' vs '%s'\n", argv[0], tidied);
+ return 9;
+ }
+
+ free(tidied);
+
+ return 0;
+}
+EOM
+
+val=$undef
+set try
+if eval $compile_ok; then
+ if $run ./try; then
+ echo "You can use _NSGetExecutablePath to find the executing program." >&4
+ val="$define"
+ else
+ echo "Nope, _NSGetExecutablePath doesn't work here." >&4
+ fi
+else
+ echo "I'm unable to compile the test program." >&4
+ echo "I'll assume no _NSGetExecutablePath here." >&4
+fi
+$rm_try
+set usensgetexecutablepath
+eval $setvar
+
: Check how to flush
echo " "
$cat >&4 <<EOM
@@ -23434,6 +23652,7 @@ usedl='$usedl'
usedtrace='$usedtrace'
usefaststdio='$usefaststdio'
useithreads='$useithreads'
+usekernprocpathname='$usekernprocpathname'
uselargefiles='$uselargefiles'
uselongdouble='$uselongdouble'
usemallocwrap='$usemallocwrap'
@@ -23441,6 +23660,7 @@ usemorebits='$usemorebits'
usemultiplicity='$usemultiplicity'
usemymalloc='$usemymalloc'
usenm='$usenm'
+usensgetexecutablepath='$usensgetexecutablepath'
useopcode='$useopcode'
useperlio='$useperlio'
useposix='$useposix'
diff --git a/Cross/config.sh-arm-linux b/Cross/config.sh-arm-linux
index 928efa709c..e611e353f4 100644
--- a/Cross/config.sh-arm-linux
+++ b/Cross/config.sh-arm-linux
@@ -1024,6 +1024,7 @@ usedl='define'
usedtrace='undef'
usefaststdio='define'
useithreads='undef'
+usekernprocpathname='undef'
uselargefiles='define'
uselongdouble='undef'
usemallocwrap='define'
@@ -1031,6 +1032,7 @@ usemorebits='undef'
usemultiplicity='undef'
usemymalloc='n'
usenm='false'
+usensgetexecutablepath='undef'
useopcode='true'
useperlio='define'
useposix='true'
diff --git a/NetWare/config.wc b/NetWare/config.wc
index 419aa83ea4..6750b8c3c7 100644
--- a/NetWare/config.wc
+++ b/NetWare/config.wc
@@ -987,6 +987,7 @@ usedl='define'
usedtrace='undef'
usefaststdio='undef'
useithreads='define'
+usekernprocpathname='undef'
uselargefiles='undef'
uselongdouble='undef'
usemallocwrap='undef'
@@ -994,6 +995,7 @@ usemorebits='undef'
usemultiplicity='define'
usemymalloc='n'
usenm='false'
+usensgetexecutablepath='undef'
useopcode='true'
useperlio='undef'
useposix='true'
diff --git a/Porting/Glossary b/Porting/Glossary
index ceed6a5e58..81c83a9ef0 100644
--- a/Porting/Glossary
+++ b/Porting/Glossary
@@ -5015,6 +5015,11 @@ useithreads (usethreads.U):
and indicates that Perl should be built to use the interpreter-based
threading implementation.
+usekernprocpathname (usekernprocpathname.U)
+ This variable, indicates that we can use sysctl with
+ KERN_PROC_PATHNAME to get a full path for the executable, and hence
+ convert $^X to an absolute path.
+
uselargefiles (uselfs.U):
This variable conditionally defines the USE_LARGE_FILES symbol,
and indicates that large file interfaces should be used when
@@ -5048,6 +5053,11 @@ usenm (usenm.U):
This variable contains 'true' or 'false' depending whether the
nm extraction is wanted or not.
+usensgetexecutablepath (usensgetexecutablepath.U):
+ This symbol, if defined, indicates that we can use _NSGetExecutablePath
+ and realpath to get a full path for the executable, and hence convert
+ $^X to an absolute path.
+
useopcode (Extensions.U):
This variable holds either 'true' or 'false' to indicate
whether the Opcode extension should be used. The sole
diff --git a/Porting/config.sh b/Porting/config.sh
index 2c7c2aa8ac..fce318784e 100644
--- a/Porting/config.sh
+++ b/Porting/config.sh
@@ -1046,6 +1046,7 @@ usedl='define'
usedtrace='undef'
usefaststdio='undef'
useithreads='undef'
+usekernprocpathname='undef'
uselargefiles='define'
uselongdouble='undef'
usemallocwrap='define'
@@ -1053,6 +1054,7 @@ usemorebits='undef'
usemultiplicity='undef'
usemymalloc='n'
usenm='false'
+usensgetexecutablepath='undef'
useopcode='true'
useperlio='define'
useposix='true'
diff --git a/config_h.SH b/config_h.SH
index 43743b6858..7b8d31e6b5 100755
--- a/config_h.SH
+++ b/config_h.SH
@@ -2689,6 +2689,20 @@ sed <<!GROK!THIS! >$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un
*/
#$ebcdic EBCDIC /**/
+/* USE_KERN_PROC_PATHNAME:
+ * This symbol, if defined, indicates that we can use sysctl with
+ * KERN_PROC_PATHNAME to get a full path for the executable, and hence
+ * convert $^X to an absolute path.
+ */
+#$usekernprocpathname USE_KERN_PROC_PATHNAME /**/
+
+/* USE_NSGETEXECUTABLEPATH:
+ * This symbol, if defined, indicates that we can use _NSGetExecutablePath
+ * and realpath to get a full path for the executable, and hence convert
+ * $^X to an absolute path.
+ */
+#$usensgetexecutablepath USE_NSGETEXECUTABLEPATH /**/
+
/* Fpos_t:
* This symbol holds the type used to declare file positions in libc.
* It can be fpos_t, long, uint, etc... It may be necessary to include
diff --git a/configure.com b/configure.com
index 14a73f1fc4..5da59730bc 100644
--- a/configure.com
+++ b/configure.com
@@ -6717,6 +6717,8 @@ $ WC "usefaststdio='" + usefaststdio + "'"
$ WC "useieee='" + useieee + "'" ! VMS-specific
$ WC "useithreads='" + useithreads + "'"
$ WC "usekernelthreads='" + usekernelthreads + "'" ! VMS-specific
+$ WC "usekernprocpathname='undef'"
+$ WC "usensgetexecutablepath='undef'"
$ WC "uselargefiles='" + uselargefiles + "'"
$ WC "uselongdouble='" + uselongdouble + "'"
$ WC "usemorebits='" + usemorebits + "'"
diff --git a/epoc/config.sh b/epoc/config.sh
index 87dce8aed4..c80589005e 100644
--- a/epoc/config.sh
+++ b/epoc/config.sh
@@ -983,6 +983,7 @@ usedl='undef'
usedtrace='undef'
usefaststdio='undef'
useithreads='undef'
+usekernprocpathname='undef'
uselargefiles='undef'
uselongdouble='undef'
usemallocwrap='undef'
@@ -990,6 +991,7 @@ usemorebits='undef'
usemultiplicity='undef'
usemymalloc='n'
usenm=''
+usensgetexecutablepath='undef'
useopcode=''
useperlio='undef'
useposix=''
diff --git a/perl.c b/perl.c
index 0b3d9c6723..4285834173 100644
--- a/perl.c
+++ b/perl.c
@@ -38,6 +38,14 @@
#include "nwutil.h"
#endif
+#ifdef USE_KERN_PROC_PATHNAME
+# include <sys/sysctl.h>
+#endif
+
+#ifdef USE_NSGETEXECUTABLEPATH
+# include <mach-o/dyld.h>
+#endif
+
#ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
# ifdef I_SYSUIO
# include <sys/uio.h>
@@ -1390,7 +1398,47 @@ S_set_caret_X(pTHX) {
#if defined(OS2)
sv_setpv(caret_x, os2_execname(aTHX));
#else
-# ifdef HAS_PROCSELFEXE
+# ifdef USE_KERN_PROC_PATHNAME
+ size_t size = 0;
+ int mib[4];
+ mib[0] = CTL_KERN;
+ mib[1] = KERN_PROC;
+ mib[2] = KERN_PROC_PATHNAME;
+ mib[3] = -1;
+
+ if (sysctl(mib, 4, NULL, &size, NULL, 0) == 0
+ && size > 0 && size < MAXPATHLEN * MAXPATHLEN) {
+ sv_grow(caret_x, size);
+
+ if (sysctl(mib, 4, SvPVX(caret_x), &size, NULL, 0) == 0
+ && size > 2) {
+ SvPOK_only(caret_x);
+ SvCUR_set(caret_x, size - 1);
+ SvTAINT(caret_x);
+ return;
+ }
+ }
+# elif defined(USE_NSGETEXECUTABLEPATH)
+ char buf[1];
+ uint32_t size = sizeof(buf);
+ int result;
+
+ _NSGetExecutablePath(buf, &size);
+ if (size < MAXPATHLEN * MAXPATHLEN) {
+ sv_grow(caret_x, size);
+ if (_NSGetExecutablePath(SvPVX(caret_x), &size) == 0) {
+ char *const tidied = realpath(SvPVX(caret_x), NULL);
+ if (tidied) {
+ sv_setpv(caret_x, tidied);
+ free(tidied);
+ } else {
+ SvPOK_only(caret_x);
+ SvCUR_set(caret_x, size);
+ }
+ return;
+ }
+ }
+# elif defined(HAS_PROCSELFEXE)
char buf[MAXPATHLEN];
int len = readlink(PROCSELFEXE_PATH, buf, sizeof(buf) - 1);
diff --git a/plan9/config_sh.sample b/plan9/config_sh.sample
index 2f7e938115..bd5da2fa14 100644
--- a/plan9/config_sh.sample
+++ b/plan9/config_sh.sample
@@ -995,6 +995,7 @@ usedl='undef'
usedtrace='undef'
usefaststdio='undef'
useithreads='undef'
+usekernprocpathname='undef'
uselargefiles='define'
uselongdouble='undef'
usemallocwrap='undef'
@@ -1002,6 +1003,7 @@ usemorebits='undef'
usemultiplicity='undef'
usemymalloc='y'
usenm='false'
+usensgetexecutablepath='undef'
useopcode='true'
useperlio='define'
useposix='true'
diff --git a/pod/perldelta.pod b/pod/perldelta.pod
index 32fdb7a97d..825288e510 100644
--- a/pod/perldelta.pod
+++ b/pod/perldelta.pod
@@ -22,11 +22,15 @@ XXX Any important notices here
=head1 Core Enhancements
-XXX New core language features go here. Summarise user-visible core language
-enhancements. Particularly prominent performance optimisations could go
-here, but most should go in the L</Performance Enhancements> section.
+=head2 $^X converted to an absolute path on FreeBSD, OS X and Solaris
-[ List each enhancement as a =head2 entry ]
+C<$^X> is now converted to an absolute path on OS X, FreeBSD (without
+needing F</proc> mounted) and Solaris 10 and 11. This augments the
+previous approach of using F</proc> on Linux, FreeBSD and NetBSD
+(in all cases, where mounted).
+
+This makes relocatable perl installations more useful on these platforms.
+(See "Relocatable @INC" in F<INSTALL>)
=head1 Security
diff --git a/symbian/config.sh b/symbian/config.sh
index 6a27ff5064..a62577b820 100644
--- a/symbian/config.sh
+++ b/symbian/config.sh
@@ -810,6 +810,7 @@ usedl='undef'
usedtrace='undef'
usefaststdio='undef'
useithreads='undef'
+usekernprocpathname='undef'
uselargefiles='undef'
uselongdouble='undef'
usemallocwrap='define'
@@ -817,6 +818,7 @@ usemorebits='undef'
usemultiplicity='undef'
usemymalloc='n'
usenm='false'
+usensgetexecutablepath='undef'
useopcode='true'
useperlio='define'
useposix='true'
diff --git a/t/op/magic.t b/t/op/magic.t
index dd6d28e1bd..8c2c508f57 100644
--- a/t/op/magic.t
+++ b/t/op/magic.t
@@ -230,10 +230,12 @@ $$ = $pid; # Tests below use $$
# $^X and $0
{
+ my $is_abs = $Config{d_procselfexe} || $Config{usekernprocpathname}
+ || $Config{usensgetexecutablepath};
if ($^O eq 'qnx') {
chomp($wd = `/usr/bin/fullpath -t`);
}
- elsif($Is_Cygwin || $Config{'d_procselfexe'}) {
+ elsif($Is_Cygwin || $is_abs) {
# Cygwin turns the symlink into the real file
chomp($wd = `pwd`);
$wd =~ s#/t$##;
@@ -248,7 +250,7 @@ $$ = $pid; # Tests below use $$
else {
$wd = '.';
}
- my $perl = $Is_VMS || $Config{d_procselfexe} ? $^X : "$wd/perl";
+ my $perl = $Is_VMS || $is_abs ? $^X : "$wd/perl";
my $headmaybe = '';
my $middlemaybe = '';
my $tailmaybe = '';
diff --git a/uconfig.h b/uconfig.h
index 1013423664..c3799020da 100644
--- a/uconfig.h
+++ b/uconfig.h
@@ -2656,6 +2656,20 @@
*/
/*#define EBCDIC / **/
+/* USE_KERN_PROC_PATHNAME:
+ * This symbol, if defined, indicates that we can use sysctl with
+ * KERN_PROC_PATHNAME to get a full path for the executable, and hence
+ * convert $^X to an absolute path.
+ */
+/*#define USE_KERN_PROC_PATHNAME / **/
+
+/* USE_NSGETEXECUTABLEPATH:
+ * This symbol, if defined, indicates that we can use _NSGetExecutablePath
+ * and realpath to get a full path for the executable, and hence convert
+ * $^X to an absolute path.
+ */
+/*#define USE_NSGETEXECUTABLEPATH / **/
+
/* Fpos_t:
* This symbol holds the type used to declare file positions in libc.
* It can be fpos_t, long, uint, etc... It may be necessary to include
@@ -4704,6 +4718,6 @@
#endif
/* Generated from:
- * 5c3a0864433ad4da7f3248b108cf8e17c19bd4d71799cd56b6c2a73bb647561a config_h.SH
- * e5d6d7ffdf6717946996c0807aa7a247b46adf41f2d98c62cdd7c1bb8ffe19f2 uconfig.sh
+ * 5b5dacbb00f53ae9b440c79cf6d5c8bbf80a7adfa1db3f3814aa77dc6f461fa7 config_h.SH
+ * b5e74633486412bbc4d2a1c3847f3e85b10a86e96fb5d1efb7b8bc885956d746 uconfig.sh
* ex: set ro: */
diff --git a/uconfig.sh b/uconfig.sh
index 74a1b9143e..e7692dc693 100644
--- a/uconfig.sh
+++ b/uconfig.sh
@@ -777,6 +777,7 @@ usedl='undef'
usedtrace='undef'
usefaststdio='undef'
useithreads='undef'
+usekernprocpathname='undef'
uselargefiles='undef'
uselongdouble='undef'
usemallocwrap='undef'
@@ -784,6 +785,7 @@ usemorebits='undef'
usemultiplicity='undef'
usemymalloc='n'
usenm='false'
+usensgetexecutablepath='undef'
useopcode='true'
useperlio='undef'
useposix='true'
diff --git a/uconfig64.sh b/uconfig64.sh
index 784d0f010e..1ae544fbcd 100644
--- a/uconfig64.sh
+++ b/uconfig64.sh
@@ -778,6 +778,7 @@ usedl='undef'
usedtrace='undef'
usefaststdio='undef'
useithreads='undef'
+usekernprocpathname='undef'
uselargefiles='undef'
uselongdouble='undef'
usemallocwrap='undef'
@@ -785,6 +786,7 @@ usemorebits='undef'
usemultiplicity='undef'
usemymalloc='n'
usenm='false'
+usensgetexecutablepath='undef'
useopcode='true'
useperlio='undef'
useposix='true'
diff --git a/win32/config.ce b/win32/config.ce
index 1f58933459..62d2123605 100644
--- a/win32/config.ce
+++ b/win32/config.ce
@@ -977,6 +977,7 @@ usedl='define'
usedtrace='undef'
usefaststdio='undef'
useithreads='~USE_ITHREADS~'
+usekernprocpathname='undef'
uselargefiles='undef'
uselongdouble='undef'
usemallocwrap='define'
@@ -984,6 +985,7 @@ usemorebits='undef'
usemultiplicity='undef'
usemymalloc='n'
usenm='false'
+usensgetexecutablepath='undef'
useopcode='true'
useperlio='~USE_PERLIO~'
useposix='true'
diff --git a/win32/config.gc b/win32/config.gc
index 5741584252..cb963fb6fa 100644
--- a/win32/config.gc
+++ b/win32/config.gc
@@ -1020,6 +1020,7 @@ usedl='define'
usedtrace='undef'
usefaststdio='undef'
useithreads='undef'
+usekernprocpathname='undef'
uselargefiles='undef'
uselongdouble='undef'
usemallocwrap='define'
@@ -1027,6 +1028,7 @@ usemorebits='undef'
usemultiplicity='undef'
usemymalloc='n'
usenm='false'
+usensgetexecutablepath='undef'
useopcode='true'
useperlio='undef'
useposix='true'
diff --git a/win32/config.gc64 b/win32/config.gc64
index bc6210e558..7e06e2a9fd 100644
--- a/win32/config.gc64
+++ b/win32/config.gc64
@@ -1021,6 +1021,7 @@ usedl='define'
usedtrace='undef'
usefaststdio='undef'
useithreads='undef'
+usekernprocpathname='undef'
uselargefiles='undef'
uselongdouble='undef'
usemallocwrap='define'
@@ -1028,6 +1029,7 @@ usemorebits='undef'
usemultiplicity='undef'
usemymalloc='n'
usenm='false'
+usensgetexecutablepath='undef'
useopcode='true'
useperlio='undef'
useposix='true'
diff --git a/win32/config.gc64nox b/win32/config.gc64nox
index fc407ad7aa..92ef05f5a7 100644
--- a/win32/config.gc64nox
+++ b/win32/config.gc64nox
@@ -1021,6 +1021,7 @@ usedl='define'
usedtrace='undef'
usefaststdio='undef'
useithreads='undef'
+usekernprocpathname='undef'
uselargefiles='undef'
uselongdouble='undef'
usemallocwrap='define'
@@ -1028,6 +1029,7 @@ usemorebits='undef'
usemultiplicity='undef'
usemymalloc='n'
usenm='false'
+usensgetexecutablepath='undef'
useopcode='true'
useperlio='undef'
useposix='true'
diff --git a/win32/config.vc b/win32/config.vc
index 30957919e1..379a125bab 100644
--- a/win32/config.vc
+++ b/win32/config.vc
@@ -1020,6 +1020,7 @@ usedl='define'
usedtrace='undef'
usefaststdio='undef'
useithreads='undef'
+usekernprocpathname='undef'
uselargefiles='undef'
uselongdouble='undef'
usemallocwrap='define'
@@ -1027,6 +1028,7 @@ usemorebits='undef'
usemultiplicity='undef'
usemymalloc='n'
usenm='false'
+usensgetexecutablepath='undef'
useopcode='true'
useperlio='undef'
useposix='true'
diff --git a/win32/config.vc64 b/win32/config.vc64
index 1396a0ad00..d429f2028c 100644
--- a/win32/config.vc64
+++ b/win32/config.vc64
@@ -1020,6 +1020,7 @@ usedl='define'
usedtrace='undef'
usefaststdio='undef'
useithreads='undef'
+usekernprocpathname='undef'
uselargefiles='undef'
uselongdouble='undef'
usemallocwrap='define'
@@ -1027,6 +1028,7 @@ usemorebits='undef'
usemultiplicity='undef'
usemymalloc='n'
usenm='false'
+usensgetexecutablepath='undef'
useopcode='true'
useperlio='undef'
useposix='true'