emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] /srv/bzr/emacs/trunk r108964: Stop ns builds polluting the


From: Glenn Morris
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r108964: Stop ns builds polluting the environment with EMACSDATA, EMACSDOC
Date: Mon, 09 Jul 2012 00:07:24 -0700
User-agent: Bazaar (2.5.0)

------------------------------------------------------------
revno: 108964
committer: Glenn Morris <address@hidden>
branch nick: trunk
timestamp: Mon 2012-07-09 00:07:24 -0700
message:
  Stop ns builds polluting the environment with EMACSDATA, EMACSDOC
  
  It's bad form for one part of a program to communicate with another
  part by making persistent changes to the environment of all subsequent
  child processes.  For example, it can cause odd bugs when building
  Emacs from within Emacs (eg bug#6401, maybe).
  
  * nsterm.m (ns_etc_directory): New function, split from ns_init_paths.
  (ns_init_paths): Do not set EMACSDATA, EMACSDOC.
  * nsterm.h (ns_etc_directory): Add it.
  * callproc.c [HAVE_NS]: Include nsterm.h.
  (init_callproc_1, init_callproc) [HAVE_NS]: Use ns_etc_directory.
modified:
  src/ChangeLog
  src/callproc.c
  src/nsterm.h
  src/nsterm.m
=== modified file 'src/ChangeLog'
--- a/src/ChangeLog     2012-07-09 03:15:10 +0000
+++ b/src/ChangeLog     2012-07-09 07:07:24 +0000
@@ -1,3 +1,12 @@
+2012-07-09  Glenn Morris  <address@hidden>
+
+       Stop ns builds polluting the environment with EMACSDATA, EMACSDOC.
+       * nsterm.m (ns_etc_directory): New function, split from ns_init_paths.
+       (ns_init_paths): Do not set EMACSDATA, EMACSDOC.
+       * nsterm.h (ns_etc_directory): Add it.
+       * callproc.c [HAVE_NS]: Include nsterm.h.
+       (init_callproc_1, init_callproc) [HAVE_NS]: Use ns_etc_directory.
+
 2012-07-09  Dmitry Antipov  <address@hidden>
 
        Move marker debugging code under MARKER_DEBUG.

=== modified file 'src/callproc.c'
--- a/src/callproc.c    2012-07-05 18:35:48 +0000
+++ b/src/callproc.c    2012-07-09 07:07:24 +0000
@@ -61,6 +61,10 @@
 #include "msdos.h"
 #endif
 
+#ifdef HAVE_NS
+#include "nsterm.h"
+#endif
+
 #ifndef USE_CRT_DLL
 extern char **environ;
 #endif
@@ -1513,13 +1517,26 @@
 {
   char *data_dir = egetenv ("EMACSDATA");
   char *doc_dir = egetenv ("EMACSDOC");
+#ifdef HAVE_NS
+  const char *etc_dir = ns_etc_directory ();
+#endif
 
   Vdata_directory
     = Ffile_name_as_directory (build_string (data_dir ? data_dir
-                                            : PATH_DATA));
+#ifdef HAVE_NS
+                                             : (etc_dir ? etc_dir : PATH_DATA)
+#else
+                                             : PATH_DATA
+#endif
+                                             ));
   Vdoc_directory
     = Ffile_name_as_directory (build_string (doc_dir ? doc_dir
-                                            : PATH_DOC));
+#ifdef HAVE_NS
+                                             : (etc_dir ? etc_dir : PATH_DOC)
+#else
+                                             : PATH_DOC
+#endif
+                                             ));
 
   /* Check the EMACSPATH environment variable, defaulting to the
      PATH_EXEC path from epaths.h.  */
@@ -1537,6 +1554,17 @@
 
   register char * sh;
   Lisp_Object tempdir;
+#ifdef HAVE_NS
+  if (data_dir == 0)
+    {
+      const char *etc_dir = ns_etc_directory ();
+      if (etc_dir)
+        {
+          data_dir = alloca (strlen (etc_dir) + 1);
+          strcpy (data_dir, etc_dir);
+        }
+    }
+#endif
 
   if (!NILP (Vinstallation_directory))
     {

=== modified file 'src/nsterm.h'
--- a/src/nsterm.h      2012-07-03 18:24:42 +0000
+++ b/src/nsterm.h      2012-07-09 07:07:24 +0000
@@ -798,6 +798,7 @@
 #define NSAPP_DATA2_RUNASSCRIPT 10
 extern void ns_run_ascript (void);
 
+extern char *ns_etc_directory (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-06 21:07:46 +0000
+++ b/src/nsterm.m      2012-07-09 07:07:24 +0000
@@ -286,6 +286,26 @@
 }
 
 
+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;
+     NSFileManager *fileManager = [NSFileManager defaultManager];
+     BOOL isDir;
+
+     resourcePath = [resourceDir stringByAppendingPathComponent: @"etc"];
+     if ([fileManager fileExistsAtPath: resourcePath isDirectory: &isDir])
+     {
+          if (isDir) return [resourcePath UTF8String];
+     }
+     return nil;
+}
+
 void
 ns_init_paths (void)
 /* --------------------------------------------------------------------------
@@ -369,18 +389,6 @@
       if ([resourcePaths length] > 0)
         setenv ("EMACSPATH", [resourcePaths UTF8String], 1);
     }
-
-  resourcePath = [resourceDir stringByAppendingPathComponent: @"etc"];
-  if ([fileManager fileExistsAtPath: resourcePath isDirectory: &isDir])
-    {
-      if (isDir)
-        {
-          if (!getenv ("EMACSDATA"))
-            setenv ("EMACSDATA", [resourcePath UTF8String], 1);
-          if (!getenv ("EMACSDOC"))
-            setenv ("EMACSDOC", [resourcePath UTF8String], 1);
-        }
-    }
 }
 
 static void


reply via email to

[Prev in Thread] Current Thread [Next in Thread]