Made the minimal changes to allow Starfighter to be compiled on Windows.

It's not perfect, but I honestly just can't be arsed to figure out
how to use the Windows API to do the same thing that pwd.h does.
At the very least, Starfighter can now be successfully compiled for
Windows with MinGW simply by defining the "SF_WINDOWS" environment
variable to 1 (or any other non-empty value). The only downside is
that it uses the current working directory to decide where
.config/starfighter should go, meaning it can't be installed into
restricted directories like Program Files.
This commit is contained in:
onpon4 2017-02-01 16:10:48 -05:00
parent fd6949120e
commit e981acded2
2 changed files with 26 additions and 2 deletions

View File

@ -31,12 +31,16 @@ PKG_CHECK_EXISTS([SDL2_mixer], [
AC_ARG_VAR([SF_SCREEN_WIDTH], [The width of the game window in pixels]) AC_ARG_VAR([SF_SCREEN_WIDTH], [The width of the game window in pixels])
AC_ARG_VAR([SF_SCREEN_HEIGHT], [The height of the game window in pixels]) AC_ARG_VAR([SF_SCREEN_HEIGHT], [The height of the game window in pixels])
AC_ARG_VAR([SF_WINDOWS], [Set to "1" to indicate that the build is for Windows])
AS_IF([test -n "$SF_SCREEN_WIDTH"], [ AS_IF([test -n "$SF_SCREEN_WIDTH"], [
STARFIGHTER_CFLAGS="$STARFIGHTER_CFLAGS -DSCREEN_WIDTH=$SF_SCREEN_WIDTH" STARFIGHTER_CFLAGS="$STARFIGHTER_CFLAGS -DSCREEN_WIDTH=$SF_SCREEN_WIDTH"
]) ])
AS_IF([test -n "$SF_SCREEN_HEIGHT"], [ AS_IF([test -n "$SF_SCREEN_HEIGHT"], [
STARFIGHTER_CFLAGS="$STARFIGHTER_CFLAGS -DSCREEN_HEIGHT=$SF_SCREEN_HEIGHT" STARFIGHTER_CFLAGS="$STARFIGHTER_CFLAGS -DSCREEN_HEIGHT=$SF_SCREEN_HEIGHT"
]) ])
AS_IF([test -n "$SF_WINDOWS"], [
STARFIGHTER_CFLAGS="$STARFIGHTER_CFLAGS -DWINDOWS"
])
AC_SUBST([STARFIGHTER_CFLAGS]) AC_SUBST([STARFIGHTER_CFLAGS])

View File

@ -18,11 +18,14 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#include <errno.h> #include <errno.h>
#include <pwd.h>
#include <stdio.h> #include <stdio.h>
#include <sys/stat.h> #include <sys/stat.h>
#include <unistd.h> #include <unistd.h>
#ifndef WINDOWS
#include <pwd.h>
#endif
#include "SDL.h" #include "SDL.h"
#ifndef NOSOUND #ifndef NOSOUND
@ -157,20 +160,37 @@ This gets the user's home directory, then creates the config directory.
void engine_setupConfigDirectory() void engine_setupConfigDirectory()
{ {
const char *userHome; const char *userHome;
char dir[PATH_MAX];
#ifdef WINDOWS
// XXX: This is a bad design, but I just can't be bothered to learn
// the Windows API so I can do this properly. If anyone wants to
// make this point to the proper directory, be my guest!
userHome = ".";
#else
if ((userHome = getenv("HOME")) == NULL) if ((userHome = getenv("HOME")) == NULL)
userHome = getpwuid(getuid())->pw_dir; userHome = getpwuid(getuid())->pw_dir;
#endif
char dir[PATH_MAX];
strcpy(dir, ""); strcpy(dir, "");
sprintf(dir, "%s/.config", userHome); sprintf(dir, "%s/.config", userHome);
#ifdef WINDOWS
if ((mkdir(dir) != 0) && (errno != EEXIST))
engine_showError(2, dir);
sprintf(dir, "%s/.config/starfighter", userHome);
if ((mkdir(dir) != 0) && (errno != EEXIST))
engine_showError(2, dir);
#else
if ((mkdir(dir, S_IRWXU|S_IRWXG|S_IROTH|S_IXOTH) != 0) && (errno != EEXIST)) if ((mkdir(dir, S_IRWXU|S_IRWXG|S_IROTH|S_IXOTH) != 0) && (errno != EEXIST))
engine_showError(2, dir); engine_showError(2, dir);
sprintf(dir, "%s/.config/starfighter", userHome); sprintf(dir, "%s/.config/starfighter", userHome);
if ((mkdir(dir, S_IRWXU|S_IRWXG|S_IROTH|S_IXOTH) != 0) && (errno != EEXIST)) if ((mkdir(dir, S_IRWXU|S_IRWXG|S_IROTH|S_IXOTH) != 0) && (errno != EEXIST))
engine_showError(2, dir); engine_showError(2, dir);
#endif
sprintf(engine.configDirectory, "%s/.config/starfighter/", userHome); sprintf(engine.configDirectory, "%s/.config/starfighter/", userHome);
} }