Get Heretic, Hexen, Strife, and Setup compiling

Something is messed up with Strife though, it crashes on boot.
This commit is contained in:
Alex Mayfield 2018-05-09 20:03:20 -04:00
parent 59a66543a1
commit 07be64bbbf
8 changed files with 689 additions and 0 deletions

View file

@ -1,5 +1,6 @@
#cmakedefine PACKAGE_NAME "@PACKAGE_NAME@"
#cmakedefine PACKAGE_TARNAME "@PACKAGE_TARNAME@"
#cmakedefine PACKAGE_VERSION "@PACKAGE_VERSION@"
#cmakedefine PACKAGE_STRING "@PACKAGE_STRING@"
#cmakedefine PROGRAM_PREFIX "@PROGRAM_PREFIX@"

View file

@ -121,3 +121,74 @@ if(MSVC)
set_target_properties("${PROGRAM_PREFIX}doom" PROPERTIES
LINK_FLAGS "/MANIFEST:NO")
endif()
if(WIN32)
add_executable("${PROGRAM_PREFIX}heretic" ${SOURCE_FILES_WITH_DEH} "${CMAKE_CURRENT_BINARY_DIR}/resource.rc")
else()
add_executable("${PROGRAM_PREFIX}heretic" ${SOURCE_FILES_WITH_DEH})
endif()
target_include_directories("${PROGRAM_PREFIX}heretic"
PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/../")
target_link_libraries("${PROGRAM_PREFIX}heretic" heretic ${EXTRA_LIBS})
if(MSVC)
set_target_properties("${PROGRAM_PREFIX}heretic" PROPERTIES
LINK_FLAGS "/MANIFEST:NO")
endif()
if(WIN32)
add_executable("${PROGRAM_PREFIX}hexen" ${SOURCE_FILES} "${CMAKE_CURRENT_BINARY_DIR}/resource.rc")
else()
add_executable("${PROGRAM_PREFIX}hexen" ${SOURCE_FILES})
endif()
target_include_directories("${PROGRAM_PREFIX}hexen"
PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/../")
target_link_libraries("${PROGRAM_PREFIX}hexen" hexen ${EXTRA_LIBS})
if(MSVC)
set_target_properties("${PROGRAM_PREFIX}hexen" PROPERTIES
LINK_FLAGS "/MANIFEST:NO")
endif()
if(WIN32)
add_executable("${PROGRAM_PREFIX}strife" ${SOURCE_FILES_WITH_DEH} "${CMAKE_CURRENT_BINARY_DIR}/resource.rc")
else()
add_executable("${PROGRAM_PREFIX}strife" ${SOURCE_FILES_WITH_DEH})
endif()
target_include_directories("${PROGRAM_PREFIX}strife"
PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/../")
target_link_libraries("${PROGRAM_PREFIX}strife" strife ${EXTRA_LIBS})
if(MSVC)
set_target_properties("${PROGRAM_PREFIX}strife" PROPERTIES
LINK_FLAGS "/MANIFEST:NO")
endif()
# Source files needed for chocolate-setup:
set(SETUP_FILES
deh_str.c deh_str.h
d_mode.c d_mode.h
d_iwad.c d_iwad.h
i_timer.c i_timer.h
m_config.c m_config.h
m_controls.c m_controls.h
net_io.c net_io.h
net_packet.c net_packet.h
net_sdl.c net_sdl.h
net_query.c net_query.h
net_structrw.c net_structrw.h
z_native.c z_zone.h)
#if(WIN32)
#add_executable("${PROGRAM_PREFIX}setup" ${SETUP_FILES} ${COMMON_SOURCE_FILES} "${CMAKE_CURRENT_BINARY_DIR}/setup-res.rc")
#else()
add_executable("${PROGRAM_PREFIX}setup" ${SETUP_FILES} ${COMMON_SOURCE_FILES})
#endif()
target_include_directories("${PROGRAM_PREFIX}setup"
PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/../")
target_link_libraries("${PROGRAM_PREFIX}setup" setup textscreen SDL2::SDL2main SDL2::SDL2 SDL2::mixer SDL2::net)

View file

@ -0,0 +1,57 @@
add_library(heretic STATIC
am_data.h
am_map.c am_map.h
ct_chat.c ct_chat.h
deh_ammo.c
deh_frame.c
deh_htext.c
deh_htic.c deh_htic.h
deh_sound.c
deh_thing.c
deh_weapon.c
d_main.c
d_net.c
doomdata.h
doomdef.h
dstrings.h
f_finale.c
g_game.c
info.c info.h
in_lude.c
m_random.c m_random.h
mn_menu.c
p_action.h
p_ceilng.c
p_doors.c
p_enemy.c
p_floor.c
p_inter.c
p_lights.c
p_local.h
p_map.c
p_maputl.c
p_mobj.c
p_plats.c
p_pspr.c
p_saveg.c
p_setup.c
p_sight.c
p_spec.c p_spec.h
p_switch.c
p_telept.c
p_tick.c
p_user.c
r_bsp.c
r_data.c
r_draw.c
r_local.h
r_main.c
r_plane.c
r_segs.c
r_things.c
sb_bar.c
sounds.c sounds.h
s_sound.c s_sound.h)
target_include_directories(heretic PRIVATE "../" "${CMAKE_CURRENT_BINARY_DIR}/../../")
target_link_libraries(heretic textscreen SDL2::SDL2 SDL2::mixer SDL2::net)

View file

@ -0,0 +1,58 @@
add_library(hexen STATIC
a_action.c
am_data.h
am_map.c am_map.h
ct_chat.c
ct_chat.h
d_net.c
f_finale.c
g_game.c
h2def.h
h2_main.c
info.c info.h
in_lude.c
m_random.c m_random.h
mn_menu.c
p_acs.c
p_anim.c
p_ceilng.c
p_doors.c
p_enemy.c
p_floor.c
p_inter.c
p_lights.c
p_local.h
p_map.c
p_maputl.c
p_mobj.c
po_man.c
p_plats.c
p_pspr.c
p_setup.c
p_sight.c
p_spec.c p_spec.h
p_switch.c
p_telept.c
p_things.c
p_tick.c
p_user.c
r_bsp.c
r_data.c
r_draw.c
r_local.h
r_main.c
r_plane.c
r_segs.c
r_things.c
s_sound.c s_sound.h
sb_bar.c
sc_man.c
sn_sonix.c
sounds.c sounds.h
st_start.c st_start.h
sv_save.c
textdefs.h
xddefs.h)
target_include_directories(hexen PRIVATE "../" "${CMAKE_CURRENT_BINARY_DIR}/../../")
target_link_libraries(hexen SDL2::SDL2 SDL2::mixer SDL2::net)

View file

@ -0,0 +1,18 @@
add_library(setup STATIC
compatibility.c compatibility.h
display.c display.h
joystick.c joystick.h
keyboard.c keyboard.h
mainmenu.c
mode.c mode.h
mouse.c mouse.h
multiplayer.c multiplayer.h
sound.c sound.h
execute.c execute.h
txt_joyaxis.c txt_joyaxis.h
txt_joybinput.c txt_joybinput.h
txt_keyinput.c txt_keyinput.h
txt_mouseinput.c txt_mouseinput.h)
target_include_directories(setup PRIVATE "../" "${CMAKE_CURRENT_BINARY_DIR}/../../")
target_link_libraries(setup textscreen SDL2::SDL2 SDL2::mixer)

View file

@ -0,0 +1,75 @@
set(STRIFE_SOURCES
am_map.c am_map.h
deh_ammo.c
deh_cheat.c
deh_strife.c
deh_frame.c
deh_misc.c deh_misc.h
deh_ptr.c
deh_sound.c
deh_thing.c
deh_weapon.c
d_englsh.h
d_items.c d_items.h
d_main.c d_main.h
d_net.c
doomdata.h
doomdef.c doomdef.h
doomstat.c doomstat.h
d_player.h
dstrings.c dstrings.h
d_textur.h
d_think.h
f_finale.c f_finale.h
f_wipe.c f_wipe.h
g_game.c g_game.h
hu_lib.c hu_lib.h
hu_stuff.c hu_stuff.h
info.c info.h
m_menu.c m_menu.h
m_random.c m_random.h
m_saves.c m_saves.h
p_ceilng.c
p_dialog.c p_dialog.h
p_doors.c
p_enemy.c
p_floor.c
p_inter.c p_inter.h
p_lights.c
p_local.h
p_map.c
p_maputl.c
p_mobj.c p_mobj.h
p_plats.c
p_pspr.c p_pspr.h
p_saveg.c p_saveg.h
p_setup.c p_setup.h
p_sight.c
p_spec.c p_spec.h
p_switch.c
p_telept.c
p_tick.c p_tick.h
p_user.c
r_bsp.c r_bsp.h
r_data.c r_data.h
r_defs.h
r_draw.c r_draw.h
r_local.h
r_main.c r_main.h
r_plane.c r_plane.h
r_segs.c r_segs.h
r_sky.c r_sky.h
r_state.h
r_things.c r_things.h
s_sound.c s_sound.h
sounds.c sounds.h
st_lib.c st_lib.h
st_stuff.c st_stuff.h
wi_stuff.c wi_stuff.h)
if(MSVC)
list(APPEND STRIFE_SOURCES "../../win32/win_opendir.c" "../../win32/win_opendir.h")
endif()
add_library(strife STATIC ${STRIFE_SOURCES})
target_include_directories(strife PRIVATE "../" "../../win32/" "${CMAKE_CURRENT_BINARY_DIR}/../../")
target_link_libraries(strife textscreen SDL2::SDL2 SDL2::mixer SDL2::net)

336
win32/win_opendir.c Normal file
View file

@ -0,0 +1,336 @@
//
// 03/10/2006 James Haley
//
// For this module only:
// This code is public domain. No change sufficient enough to constitute a
// significant or original work has been made, and thus it remains as such.
//
//
// DESCRIPTION:
//
// Implementation of POSIX opendir for Visual C++.
// Derived from the MinGW C Library Extensions Source (released to the
// public domain). As with other Win32 modules, don't include most DOOM
// headers into this or conflicts will occur.
//
// Original Header:
//
// * dirent.c
// * This file has no copyright assigned and is placed in the Public Domain.
// * This file is a part of the mingw-runtime package.
// * No warranty is given; refer to the file DISCLAIMER within the package.
// *
// * Derived from DIRLIB.C by Matt J. Weinstein
// * This note appears in the DIRLIB.H
// * DIRLIB.H by M. J. Weinstein Released to public domain 1-Jan-89
// *
// * Updated by Jeremy Bettis <jeremy@hksys.com>
// * Significantly revised and rewinddir, seekdir and telldir added by Colin
// * Peters <colin@fu.is.saga-u.ac.jp>
//
#ifndef _MSC_VER
#error i_opndir.c is for Microsoft Visual C++ only
#endif
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#define WIN32_LEAN_AND_MEAN
#include <windows.h> /* for GetFileAttributes */
#include <tchar.h>
#define SUFFIX _T("*")
#define SLASH _T("\\")
#include "win_opendir.h"
//
// opendir
//
// Returns a pointer to a DIR structure appropriately filled in to begin
// searching a directory.
//
DIR *opendir(const _TCHAR *szPath)
{
DIR *nd;
unsigned int rc;
_TCHAR szFullPath[MAX_PATH];
errno = 0;
if(!szPath)
{
errno = EFAULT;
return (DIR *)0;
}
if(szPath[0] == _T('\0'))
{
errno = ENOTDIR;
return (DIR *)0;
}
/* Attempt to determine if the given path really is a directory. */
rc = GetFileAttributes(szPath);
if(rc == (unsigned int)-1)
{
/* call GetLastError for more error info */
errno = ENOENT;
return (DIR *)0;
}
if(!(rc & FILE_ATTRIBUTE_DIRECTORY))
{
/* Error, entry exists but not a directory. */
errno = ENOTDIR;
return (DIR *)0;
}
/* Make an absolute pathname. */
_tfullpath(szFullPath, szPath, MAX_PATH);
/* Allocate enough space to store DIR structure and the complete
* directory path given. */
nd = (DIR *)(malloc(sizeof(DIR) + (_tcslen(szFullPath)
+ _tcslen(SLASH)
+ _tcslen(SUFFIX) + 1)
* sizeof(_TCHAR)));
if(!nd)
{
/* Error, out of memory. */
errno = ENOMEM;
return (DIR *)0;
}
/* Create the search expression. */
_tcscpy(nd->dd_name, szFullPath);
/* Add on a slash if the path does not end with one. */
if(nd->dd_name[0] != _T('\0')
&& _tcsrchr(nd->dd_name, _T('/')) != nd->dd_name
+ _tcslen(nd->dd_name) - 1
&& _tcsrchr(nd->dd_name, _T('\\')) != nd->dd_name
+ _tcslen(nd->dd_name) - 1)
{
_tcscat(nd->dd_name, SLASH);
}
/* Add on the search pattern */
_tcscat(nd->dd_name, SUFFIX);
/* Initialize handle to -1 so that a premature closedir doesn't try
* to call _findclose on it. */
nd->dd_handle = -1;
/* Initialize the status. */
nd->dd_stat = 0;
/* Initialize the dirent structure. ino and reclen are invalid under
* Win32, and name simply points at the appropriate part of the
* findfirst_t structure. */
nd->dd_dir.d_ino = 0;
nd->dd_dir.d_reclen = 0;
nd->dd_dir.d_namlen = 0;
memset(nd->dd_dir.d_name, 0, FILENAME_MAX);
return nd;
}
//
// readdir
//
// Return a pointer to a dirent structure filled with the information on the
// next entry in the directory.
//
struct dirent *readdir(DIR *dirp)
{
errno = 0;
/* Check for valid DIR struct. */
if(!dirp)
{
errno = EFAULT;
return (struct dirent *)0;
}
if (dirp->dd_stat < 0)
{
/* We have already returned all files in the directory
* (or the structure has an invalid dd_stat). */
return (struct dirent *)0;
}
else if (dirp->dd_stat == 0)
{
/* We haven't started the search yet. */
/* Start the search */
dirp->dd_handle = _tfindfirst(dirp->dd_name, &(dirp->dd_dta));
if(dirp->dd_handle == -1)
{
/* Whoops! Seems there are no files in that
* directory. */
dirp->dd_stat = -1;
}
else
{
dirp->dd_stat = 1;
}
}
else
{
/* Get the next search entry. */
if(_tfindnext(dirp->dd_handle, &(dirp->dd_dta)))
{
/* We are off the end or otherwise error.
_findnext sets errno to ENOENT if no more file
Undo this. */
DWORD winerr = GetLastError();
if(winerr == ERROR_NO_MORE_FILES)
errno = 0;
_findclose(dirp->dd_handle);
dirp->dd_handle = -1;
dirp->dd_stat = -1;
}
else
{
/* Update the status to indicate the correct
* number. */
dirp->dd_stat++;
}
}
if (dirp->dd_stat > 0)
{
/* Successfully got an entry. Everything about the file is
* already appropriately filled in except the length of the
* file name. */
dirp->dd_dir.d_namlen = _tcslen(dirp->dd_dta.name);
_tcscpy(dirp->dd_dir.d_name, dirp->dd_dta.name);
return &dirp->dd_dir;
}
return (struct dirent *)0;
}
//
// closedir
//
// Frees up resources allocated by opendir.
//
int closedir(DIR *dirp)
{
int rc;
errno = 0;
rc = 0;
if(!dirp)
{
errno = EFAULT;
return -1;
}
if(dirp->dd_handle != -1)
{
rc = _findclose(dirp->dd_handle);
}
/* Delete the dir structure. */
free(dirp);
return rc;
}
//
// rewinddir
//
// Return to the beginning of the directory "stream". We simply call findclose
// and then reset things like an opendir.
//
void rewinddir(DIR * dirp)
{
errno = 0;
if(!dirp)
{
errno = EFAULT;
return;
}
if(dirp->dd_handle != -1)
{
_findclose(dirp->dd_handle);
}
dirp->dd_handle = -1;
dirp->dd_stat = 0;
}
//
// telldir
//
// Returns the "position" in the "directory stream" which can be used with
// seekdir to go back to an old entry. We simply return the value in stat.
//
long telldir(DIR *dirp)
{
errno = 0;
if(!dirp)
{
errno = EFAULT;
return -1;
}
return dirp->dd_stat;
}
//
// seekdir
//
// Seek to an entry previously returned by telldir. We rewind the directory
// and call readdir repeatedly until either dd_stat is the position number
// or -1 (off the end). This is not perfect, in that the directory may
// have changed while we weren't looking. But that is probably the case with
// any such system.
//
void seekdir(DIR *dirp, long lPos)
{
errno = 0;
if(!dirp)
{
errno = EFAULT;
return;
}
if(lPos < -1)
{
/* Seeking to an invalid position. */
errno = EINVAL;
return;
}
else if(lPos == -1)
{
/* Seek past end. */
if(dirp->dd_handle != -1)
{
_findclose(dirp->dd_handle);
}
dirp->dd_handle = -1;
dirp->dd_stat = -1;
}
else
{
/* Rewind and read forward to the appropriate index. */
rewinddir(dirp);
while((dirp->dd_stat < lPos) && readdir(dirp))
; /* do-nothing loop */
}
}
// EOF

73
win32/win_opendir.h Normal file
View file

@ -0,0 +1,73 @@
//
// 03/10/2006 James Haley
//
// For this module only:
// This code is public domain. No change sufficient enough to constitute a
// significant or original work has been made, and thus it remains as such.
//
//
// DESCRIPTION:
//
// Implementation of POSIX opendir for Visual C++.
// Derived from the MinGW C Library Extensions Source (released to the
// public domain).
//
#ifndef I_OPNDIR_H__
#define I_OPNDIR_H__
#include <io.h>
#ifndef FILENAME_MAX
#define FILENAME_MAX 260
#endif
struct dirent
{
long d_ino; /* Always zero. */
unsigned short d_reclen; /* Always zero. */
unsigned short d_namlen; /* Length of name in d_name. */
char d_name[FILENAME_MAX]; /* File name. */
};
/*
* This is an internal data structure. Good programmers will not use it
* except as an argument to one of the functions below.
* dd_stat field is now int (was short in older versions).
*/
typedef struct
{
/* disk transfer area for this dir */
struct _finddata_t dd_dta;
/* dirent struct to return from dir (NOTE: this makes this thread
* safe as long as only one thread uses a particular DIR struct at
* a time) */
struct dirent dd_dir;
/* _findnext handle */
long dd_handle;
/*
* Status of search:
* 0 = not started yet (next entry to read is first entry)
* -1 = off the end
* positive = 0 based index of next entry
*/
int dd_stat;
/* given path for dir with search pattern (struct is extended) */
char dd_name[1];
} DIR;
DIR *opendir(const char *);
struct dirent *readdir(DIR *);
int closedir(DIR *);
void rewinddir(DIR *);
long telldir(DIR *);
void seekdir(DIR *, long);
#endif
// EOF