[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] /srv/bzr/emacs/trunk r108978: Stop ns builds setting the E
From: |
Glenn Morris |
Subject: |
[Emacs-diffs] /srv/bzr/emacs/trunk r108978: Stop ns builds setting the EMACSPATH environment variable |
Date: |
Mon, 09 Jul 2012 17:28:39 -0400 |
User-agent: |
Bazaar (2.5.0) |
------------------------------------------------------------
revno: 108978
committer: Glenn Morris <address@hidden>
branch nick: trunk
timestamp: Mon 2012-07-09 17:28:39 -0400
message:
Stop ns builds setting the EMACSPATH environment variable
Ref bugs 4309, 6401, etc
* src/nsterm.m (ns_exec_path): New function, split from ns_init_paths.
(ns_init_paths): Do not set EMACSPATH.
* src/nsterm.h (ns_exec_path): Add it.
* src/callproc.c (init_callproc_1, init_callproc) [HAVE_NS]: Use ns_exec_path.
modified:
src/ChangeLog
src/callproc.c
src/nsterm.h
src/nsterm.m
=== modified file 'src/ChangeLog'
--- a/src/ChangeLog 2012-07-09 21:14:12 +0000
+++ b/src/ChangeLog 2012-07-09 21:28:39 +0000
@@ -1,5 +1,12 @@
2012-07-09 Glenn Morris <address@hidden>
+ Stop ns builds setting the EMACSPATH environment variable.
+ * nsterm.m (ns_exec_path): New function, split from ns_init_paths.
+ (ns_init_paths): Do not set EMACSPATH.
+ * nsterm.h (ns_exec_path): Add it.
+ * callproc.c (init_callproc_1, init_callproc) [HAVE_NS]:
+ Use ns_exec_path.
+
* nsterm.m, nsterm.h (ns_etc_directory): Fix type, empty return.
2012-07-09 Paul Eggert <address@hidden>
=== modified file 'src/callproc.c'
--- a/src/callproc.c 2012-07-09 07:07:24 +0000
+++ b/src/callproc.c 2012-07-09 21:28:39 +0000
@@ -1519,6 +1519,7 @@
char *doc_dir = egetenv ("EMACSDOC");
#ifdef HAVE_NS
const char *etc_dir = ns_etc_directory ();
+ const char *path_exec = ns_exec_path ();
#endif
Vdata_directory
@@ -1540,8 +1541,13 @@
/* Check the EMACSPATH environment variable, defaulting to the
PATH_EXEC path from epaths.h. */
- Vexec_path = decode_env_path ("EMACSPATH", PATH_EXEC);
+ Vexec_path = decode_env_path ("EMACSPATH",
+#ifdef HAVE_NS
+ path_exec ? path_exec :
+#endif
+ PATH_EXEC);
Vexec_directory = Ffile_name_as_directory (Fcar (Vexec_path));
+ /* FIXME? For ns, path_exec should go at the front? */
Vexec_path = nconc2 (decode_env_path ("PATH", ""), Vexec_path);
}
@@ -1576,7 +1582,14 @@
/* MSDOS uses wrapped binaries, so don't do this. */
if (NILP (Fmember (tem, Vexec_path)))
{
- Vexec_path = decode_env_path ("EMACSPATH", PATH_EXEC);
+#ifdef HAVE_NS
+ const char *path_exec = ns_exec_path ();
+#endif
+ Vexec_path = decode_env_path ("EMACSPATH",
+#ifdef HAVE_NS
+ path_exec ? path_exec :
+#endif
+ PATH_EXEC);
Vexec_path = Fcons (tem, Vexec_path);
Vexec_path = nconc2 (decode_env_path ("PATH", ""), Vexec_path);
}
=== modified file 'src/nsterm.h'
--- a/src/nsterm.h 2012-07-09 21:14:12 +0000
+++ b/src/nsterm.h 2012-07-09 21:28:39 +0000
@@ -799,6 +799,7 @@
extern void ns_run_ascript (void);
extern const char *ns_etc_directory (void);
+extern const char *ns_exec_path (void);
extern void ns_init_paths (void);
extern void syms_of_nsterm (void);
extern void syms_of_nsfns (void);
=== modified file 'src/nsterm.m'
--- a/src/nsterm.m 2012-07-09 21:14:12 +0000
+++ b/src/nsterm.m 2012-07-09 21:28:39 +0000
@@ -288,10 +288,9 @@
const char *
ns_etc_directory (void)
-{
/* If running as a self-contained app bundle, return as a string the
filename of the etc directory, if present; else nil. */
-
+{
NSBundle *bundle = [NSBundle mainBundle];
NSString *resourceDir = [bundle resourcePath];
NSString *resourcePath;
@@ -306,6 +305,66 @@
return NULL;
}
+
+const char *
+ns_exec_path (void)
+/* If running as a self-contained app bundle, return as a path string
+ the filenames of the libexec and bin directories, ie libexec:bin.
+ Otherwise, return nil.
+ Normally, Emacs does not add its own bin/ directory to the PATH.
+ However, a self-contained NS build has a different layout, with
+ bin/ and libexec/ subdirectories in the directory that contains
+ Emacs.app itself.
+ We put libexec first, because init_callproc_1 uses the first
+ element to initialize exec-directory. An alternative would be
+ for init_callproc to check for invocation-directory/libexec.
+*/
+{
+ NSBundle *bundle = [NSBundle mainBundle];
+ NSString *resourceDir = [bundle resourcePath];
+ NSString *binDir = [bundle bundlePath];
+ NSString *resourcePath, *resourcePaths;
+ NSRange range;
+ BOOL onWindows = NO; /* FIXME determine this somehow */
+ NSString *pathSeparator = onWindows ? @";" : @":";
+ NSFileManager *fileManager = [NSFileManager defaultManager];
+ NSArray *paths;
+ NSEnumerator *pathEnum;
+ BOOL isDir;
+
+ range = [resourceDir rangeOfString: @"Contents"];
+ if (range.location != NSNotFound)
+ {
+#ifdef NS_IMPL_COCOA
+ binDir = [binDir stringByAppendingPathComponent: @"MacOS"];
+#else
+ binDir = [binDir stringByAppendingPathComponent: @"Contents"];
+#endif
+ }
+
+ paths = [binDir stringsByAppendingPaths:
+ [NSArray arrayWithObjects: @"libexec", @"bin", nil]];
+ pathEnum = [paths objectEnumerator];
+ resourcePaths = @"";
+
+ while (resourcePath = [pathEnum nextObject])
+ {
+ if ([fileManager fileExistsAtPath: resourcePath isDirectory: &isDir])
+ if (isDir)
+ {
+ if ([resourcePaths length] > 0)
+ resourcePaths
+ = [resourcePaths stringByAppendingString: pathSeparator];
+ resourcePaths
+ = [resourcePaths stringByAppendingString: resourcePath];
+ }
+ }
+ if ([resourcePaths length] > 0) return [resourcePaths UTF8String];
+
+ return NULL;
+}
+
+
void
ns_init_paths (void)
/* --------------------------------------------------------------------------
@@ -314,25 +373,14 @@
--------------------------------------------------------------------------
*/
{
NSBundle *bundle = [NSBundle mainBundle];
- NSString *binDir = [bundle bundlePath], *resourceDir = [bundle resourcePath];
+ NSString *resourceDir = [bundle resourcePath];
NSString *resourcePath, *resourcePaths;
- NSRange range;
- BOOL onWindows = NO; /* how do I determine this? */
+ BOOL onWindows = NO; /* FIXME determine this somehow */
NSString *pathSeparator = onWindows ? @";" : @":";
NSFileManager *fileManager = [NSFileManager defaultManager];
BOOL isDir;
/*NSLog (@"ns_init_paths: '%@'address@hidden", [[NSBundle mainBundle]
bundlePath], [[NSBundle mainBundle] resourcePath]); */
- /* get bindir from base */
- range = [resourceDir rangeOfString: @"Contents"];
- if (range.location != NSNotFound)
- {
- binDir = [binDir stringByAppendingPathComponent: @"Contents"];
-#ifdef NS_IMPL_COCOA
- binDir = [binDir stringByAppendingPathComponent: @"MacOS"];
-#endif
- }
-
/* the following based on Andrew Choi's init_mac_osx_environment () */
if (!getenv ("EMACSLOADPATH"))
{
@@ -359,36 +407,6 @@
setenv ("EMACSLOADPATH", [resourcePaths UTF8String], 1);
/*NSLog (@"loadPath: '%@'\n", resourcePaths); */
}
-
- /* Normally, Emacs does not add its own bin/ directory to the PATH.
- However, a self-contained NS build has a different layout, with
- bin/ and libexec/ subdirectories in the directory that contains
- Emacs.app itself.
- We put libexec first, because init_callproc_1 uses the first
- element to initialize exec-directory. An alternative would be
- for init_callproc to check for invocation-directory/libexec. */
- if (!getenv ("EMACSPATH"))
- {
- NSArray *paths = [binDir stringsByAppendingPaths:
- [NSArray arrayWithObjects: @"libexec",
- @"bin", nil]];
- NSEnumerator *pathEnum = [paths objectEnumerator];
- resourcePaths = @"";
- while (resourcePath = [pathEnum nextObject])
- {
- if ([fileManager fileExistsAtPath: resourcePath isDirectory: &isDir])
- if (isDir)
- {
- if ([resourcePaths length] > 0)
- resourcePaths
- = [resourcePaths stringByAppendingString: pathSeparator];
- resourcePaths
- = [resourcePaths stringByAppendingString: resourcePath];
- }
- }
- if ([resourcePaths length] > 0)
- setenv ("EMACSPATH", [resourcePaths UTF8String], 1);
- }
}
static void
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] /srv/bzr/emacs/trunk r108978: Stop ns builds setting the EMACSPATH environment variable,
Glenn Morris <=