diff --git a/config/CMakeLists.txt b/config/CMakeLists.txt index 71103738d7..a21d2d75c4 100644 --- a/config/CMakeLists.txt +++ b/config/CMakeLists.txt @@ -1,10 +1,15 @@ include(CheckTypeSize) +include(CheckIncludeFiles) +include(CheckSymbolExists) check_type_size("int" SIZEOF_INT) check_type_size("long" SIZEOF_LONG) check_type_size("time_t" SIZEOF_TIME_T) check_type_size("off_t" SIZEOF_OFF_T) +check_include_files(crt_externs.h HAVE_CRT_EXTERNS_H) +check_symbol_exists(_NSGetEnviron "crt_externs.h" HAVE__NSGETENVIRON) + # generate configuration header and update include directories configure_file ( "${PROJECT_SOURCE_DIR}/config/config.h.in" diff --git a/config/config.h.in b/config/config.h.in index 34aa72a52f..762da7e13d 100644 --- a/config/config.h.in +++ b/config/config.h.in @@ -12,7 +12,9 @@ #define SIZEOF_OFF_T @SIZEOF_OFF_T@ #define _FILE_OFFSET_BITS 64 +#cmakedefine HAVE__NSGETENVIRON #define HAVE_BCMP 1 +#cmakedefine HAVE_CRT_EXTERNS_H #define HAVE_DATE_TIME 1 #define HAVE_DIRENT_H 1 #define HAVE_DLFCN_H 1 diff --git a/src/misc1.c b/src/misc1.c index b92d57a03a..47e8b19e24 100644 --- a/src/misc1.c +++ b/src/misc1.c @@ -45,6 +45,10 @@ #include "window.h" #include "os/os.h" +#ifdef HAVE_CRT_EXTERNS_H +#include +#endif + static char_u *vim_version_dir __ARGS((char_u *vimdir)); static char_u *remove_tail __ARGS((char_u *p, char_u *pend, char_u *name)); static void init_users __ARGS((void)); @@ -3642,6 +3646,7 @@ void vim_setenv(char_u *name, char_u *val) } } + /* * Function given to ExpandGeneric() to obtain an environment variable name. */ @@ -3653,9 +3658,11 @@ char_u *get_env_name(expand_T *xp, int idx) */ return NULL; # else -# ifndef __WIN32__ +# if !defined(__WIN32__) && !defined(HAVE__NSGETENVIRON) /* Borland C++ 5.2 has this in a header file. */ extern char **environ; +# else + char **environ = *_NSGetEnviron(); # endif # define ENVNAMELEN 100 static char_u name[ENVNAMELEN];