summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLouie Shprung <lshprung@scu.edu>2023-01-01 16:50:24 -0800
committerLouie Shprung <lshprung@scu.edu>2023-01-01 16:50:24 -0800
commit42807fa75746d991d0d4cae907c86cf52f973044 (patch)
tree2f042e7b747ee393e62b7e60bd713c80fbe1c20a
parent62a1724a7fc336ebe20652a7185abd3cd7f1cb19 (diff)
Working Windows builds under MinGW
-rw-r--r--aclocal.m4100
-rw-r--r--config.h.in6
-rwxr-xr-xconfigure52
-rw-r--r--configure.ac5
-rw-r--r--src/body.c2
-rw-r--r--src/draw.c7
6 files changed, 170 insertions, 2 deletions
diff --git a/aclocal.m4 b/aclocal.m4
index f05b441..d0d5c05 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -21,6 +21,106 @@ If you have problems, you may need to regenerate the build system entirely.
To do so, use the procedure documented by the package, typically 'autoreconf'.])])
# ===========================================================================
+# https://www.gnu.org/software/autoconf-archive/ax_func_mkdir.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+# AX_FUNC_MKDIR
+#
+# DESCRIPTION
+#
+# Check whether mkdir() is mkdir or _mkdir, and whether it takes one or
+# two arguments.
+#
+# This macro can define HAVE_MKDIR, HAVE__MKDIR, and MKDIR_TAKES_ONE_ARG,
+# which are expected to be used as follows:
+#
+# #if HAVE_MKDIR
+# # if MKDIR_TAKES_ONE_ARG
+# /* MinGW32 */
+# # define mkdir(a, b) mkdir(a)
+# # endif
+# #else
+# # if HAVE__MKDIR
+# /* plain Windows 32 */
+# # define mkdir(a, b) _mkdir(a)
+# # else
+# # error "Don't know how to create a directory on this system."
+# # endif
+# #endif
+#
+# LICENSE
+#
+# Copyright (c) 2008 Alexandre Duret-Lutz <adl@gnu.org>
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 2 of the License, or (at your
+# option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+# Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+# As a special exception, the respective Autoconf Macro's copyright owner
+# gives unlimited permission to copy, distribute and modify the configure
+# scripts that are the output of Autoconf when processing the Macro. You
+# need not follow the terms of the GNU General Public License when using
+# or distributing such scripts, even though portions of the text of the
+# Macro appear in them. The GNU General Public License (GPL) does govern
+# all other use of the material that constitutes the Autoconf Macro.
+#
+# This special exception to the GPL applies to versions of the Autoconf
+# Macro released by the Autoconf Archive. When you make and distribute a
+# modified version of the Autoconf Macro, you may extend this special
+# exception to the GPL to apply to your modified version as well.
+
+#serial 6
+
+AU_ALIAS([AC_FUNC_MKDIR], [AX_FUNC_MKDIR])
+AC_DEFUN([AX_FUNC_MKDIR],
+[AC_CHECK_FUNCS([mkdir _mkdir])
+AC_CACHE_CHECK([whether mkdir takes one argument],
+ [ac_cv_mkdir_takes_one_arg],
+[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#include <sys/stat.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+]], [[mkdir (".");]])],
+[ac_cv_mkdir_takes_one_arg=yes], [ac_cv_mkdir_takes_one_arg=no])])
+if test x"$ac_cv_mkdir_takes_one_arg" = xyes; then
+ AC_DEFINE([MKDIR_TAKES_ONE_ARG], 1,
+ [Define if mkdir takes only one argument.])
+fi
+])
+
+dnl Note:
+dnl =====
+dnl I have not implemented the following suggestion because I don't have
+dnl access to such a broken environment to test the macro. So I'm just
+dnl appending the comments here in case you have, and want to fix
+dnl AX_FUNC_MKDIR that way.
+dnl
+dnl |Thomas E. Dickey (dickey@herndon4.his.com) said:
+dnl | it doesn't cover the problem areas (compilers that mistreat mkdir
+dnl | may prototype it in dir.h and dirent.h, for instance).
+dnl |
+dnl |Alexandre:
+dnl | Would it be sufficient to check for these headers and #include
+dnl | them in the AC_COMPILE_IFELSE block? (and is AC_HEADER_DIRENT
+dnl | suitable for this?)
+dnl |
+dnl |Thomas:
+dnl | I think that might be a good starting point (with the set of recommended
+dnl | ifdef's and includes for AC_HEADER_DIRENT, of course).
+
+# ===========================================================================
# https://www.gnu.org/software/autoconf-archive/ax_require_defined.html
# ===========================================================================
#
diff --git a/config.h.in b/config.h.in
index 3062b76..3cd09d7 100644
--- a/config.h.in
+++ b/config.h.in
@@ -73,6 +73,12 @@
/* Define to 1 if the system has the type `_Bool'. */
#undef HAVE__BOOL
+/* Define to 1 if you have the `_mkdir' function. */
+#undef HAVE__MKDIR
+
+/* Define if mkdir takes only one argument. */
+#undef MKDIR_TAKES_ONE_ARG
+
/* Name of package */
#undef PACKAGE
diff --git a/configure b/configure
index 3878556..2abf9ce 100755
--- a/configure
+++ b/configure
@@ -4506,7 +4506,7 @@ done
ac_config_files="$ac_config_files Makefile src/Makefile"
-# Additional Macro Checks
+# Check that curses.h exists
@@ -5671,6 +5671,56 @@ if test "x$ax_cv_curses" != xyes; then
as_fn_error $? "requires an X/Open-compatible Curses library with color" "$LINENO" 5
fi
+# Check if mkdir takes one or more arguments
+for ac_func in mkdir _mkdir
+do :
+ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mkdir takes one argument" >&5
+$as_echo_n "checking whether mkdir takes one argument... " >&6; }
+if ${ac_cv_mkdir_takes_one_arg+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+#include <sys/stat.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
+int
+main ()
+{
+mkdir (".");
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_mkdir_takes_one_arg=yes
+else
+ ac_cv_mkdir_takes_one_arg=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_mkdir_takes_one_arg" >&5
+$as_echo "$ac_cv_mkdir_takes_one_arg" >&6; }
+if test x"$ac_cv_mkdir_takes_one_arg" = xyes; then
+
+$as_echo "#define MKDIR_TAKES_ONE_ARG 1" >>confdefs.h
+
+fi
+
+
cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
# tests run on this system so they can be shared between configure
diff --git a/configure.ac b/configure.ac
index 86ed508..e9e1da1 100644
--- a/configure.ac
+++ b/configure.ac
@@ -23,10 +23,13 @@ AC_CHECK_FUNCS([mkdir])
AC_CONFIG_FILES([Makefile
src/Makefile])
-# Additional Macro Checks
+# Check that curses.h exists
AX_WITH_CURSES
if test "x$ax_cv_curses" != xyes; then
AC_MSG_ERROR([requires an X/Open-compatible Curses library with color])
fi
+# Check if mkdir takes one or more arguments
+AX_FUNC_MKDIR
+
AC_OUTPUT
diff --git a/src/body.c b/src/body.c
index ad06411..36a81ce 100644
--- a/src/body.c
+++ b/src/body.c
@@ -1,3 +1,5 @@
+#include "config.h"
+
#include <assert.h>
#include <stdbool.h>
#include <stdlib.h>
diff --git a/src/draw.c b/src/draw.c
index 55f9013..e49d636 100644
--- a/src/draw.c
+++ b/src/draw.c
@@ -1,3 +1,5 @@
+#include "config.h"
+
#include <errno.h>
#include <math.h>
#include <ncurses.h>
@@ -12,6 +14,11 @@
#include "include/body.h"
+#ifdef MKDIR_TAKES_ONE_ARG /* MinGW32 */
+#undef mkdir
+#define mkdir(a, b) mkdir(a)
+#endif
+
#define START_SIZE 4
//TODO consider having speed be affected by window size
#define SPEED 50000 //global refresh rate (for usleep())