diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index 334220de476a8a7d21b10a38ab5c60bd5331a093..54802747dc979350a0df53c2d6c42ae1d9a18b66 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -1,3 +1,12 @@
+2013-05-04  David Edelsohn  <dje.gcc@gmail.com>
+
+	* runtime/environ.c: Include unistd.h.
+	* runtime/pause.c: Test HAVE_UNISTD_H.
+	* runtime/stop.c: Same.
+	* io/open.c: Same.
+	* io/unix.c: Same.
+	* io/read.c (si_max): Protect declaration of value.
+
 2013-04-29  Janne Blomqvist  <jb@gcc.gnu.org>
 
         * intrinsics/system_clock (gf_gettime_mono): Use variable
diff --git a/libgfortran/io/open.c b/libgfortran/io/open.c
index 19fab1d683f2646342a1f1ccc57b0d80f46b231a..cca0ecc714fce73fbe00db6a5565a83db9ba9733 100644
--- a/libgfortran/io/open.c
+++ b/libgfortran/io/open.c
@@ -26,7 +26,11 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #include "io.h"
 #include "fbuf.h"
 #include "unix.h"
+
+#ifdef HAVE_UNISTD_H
 #include <unistd.h>
+#endif
+
 #include <string.h>
 #include <errno.h>
 #include <stdlib.h>
diff --git a/libgfortran/io/read.c b/libgfortran/io/read.c
index 2da1048f8ae8d1504a1b601e24b37dc49a307d85..d7d5c4167c713f6a2961812e7b5e6d84a05f8eb7 100644
--- a/libgfortran/io/read.c
+++ b/libgfortran/io/read.c
@@ -91,7 +91,9 @@ set_integer (void *dest, GFC_INTEGER_LARGEST value, int length)
 GFC_UINTEGER_LARGEST
 si_max (int length)
 {
+#if defined HAVE_GFC_REAL_16 || defined HAVE_GFC_REAL_10
   GFC_UINTEGER_LARGEST value;
+#endif
 
   switch (length)
       {
diff --git a/libgfortran/io/unix.c b/libgfortran/io/unix.c
index 08fe4fe5212eb0940273fa0f364236c48a149320..dd2715b6b6d8caf28ac7993af62cbf51b88cebb8 100644
--- a/libgfortran/io/unix.c
+++ b/libgfortran/io/unix.c
@@ -30,7 +30,10 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #include <stdlib.h>
 #include <limits.h>
 
+#ifdef HAVE_UNISTD_H
 #include <unistd.h>
+#endif
+
 #include <sys/stat.h>
 #include <fcntl.h>
 #include <assert.h>
diff --git a/libgfortran/runtime/environ.c b/libgfortran/runtime/environ.c
index 8c09391f0c8176a4a7c6e13945caf7f008d36ad5..a29785bab21c9e2416a99a4b563aba5eabc368a0 100644
--- a/libgfortran/runtime/environ.c
+++ b/libgfortran/runtime/environ.c
@@ -28,6 +28,10 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #include <stdlib.h>
 #include <ctype.h>
 
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
 
 /* Environment scanner.  Examine the environment for controlling minor
  * aspects of the program's execution.  Our philosophy here that the
diff --git a/libgfortran/runtime/pause.c b/libgfortran/runtime/pause.c
index ad69c95ca0fdeddbbc0d89a9fb67aa796df82a3b..f193314634e4b51aaa25e521e4e2b4989bae8c33 100644
--- a/libgfortran/runtime/pause.c
+++ b/libgfortran/runtime/pause.c
@@ -25,7 +25,11 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 
 #include "libgfortran.h"
 #include <string.h>
+
+#ifdef HAVE_UNISTD_H
 #include <unistd.h>
+#endif
+
 
 static void
 do_pause (void)
diff --git a/libgfortran/runtime/stop.c b/libgfortran/runtime/stop.c
index 1f0f453bcb3dda136ab5bcc906f55c5c007f06e1..4805412e761e930521ad1c3f4bf75f1a70306cb1 100644
--- a/libgfortran/runtime/stop.c
+++ b/libgfortran/runtime/stop.c
@@ -26,7 +26,11 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #include "libgfortran.h"
 #include <stdlib.h>
 #include <string.h>
+
+#ifdef HAVE_UNISTD_H
 #include <unistd.h>
+#endif
+
 
 /* A numeric STOP statement.  */