Dirty hacks to get MinGW to compile again (hopefully I haven't broken MSVC in the process)

git-svn-id: https://svn.code.sf.net/p/fteqw/code/branches/wip@3686 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
Lance 2010-12-07 12:23:56 +00:00
parent da1924e583
commit 19207aa590
4 changed files with 168 additions and 79 deletions

View file

@ -659,7 +659,7 @@ qboolean LibPNG_Init(void)
#if defined(MINGW) //hehehe... add annother symbol so the statically linked cygwin libpng can link
#if defined(MING) //hehehe... add annother symbol so the statically linked cygwin libpng can link
#undef setjmp
int setjmp (jmp_buf jb)
{
@ -908,6 +908,7 @@ int Image_WritePNG (char *filename, int compression, qbyte *pixels, int width, i
qjpeg_CreateDecompress((cinfo), JPEG_LIB_VERSION, \
(size_t) sizeof(struct jpeg_decompress_struct))
#ifdef DYNAMIC_LIBJPEG
boolean (VARGS *qjpeg_resync_to_restart) JPP((j_decompress_ptr cinfo, int desired)) JSTATIC(jpeg_resync_to_restart);
boolean (VARGS *qjpeg_finish_decompress) JPP((j_decompress_ptr cinfo)) JSTATIC(jpeg_finish_decompress);
JDIMENSION (VARGS *qjpeg_read_scanlines) JPP((j_decompress_ptr cinfo, JSAMPARRAY scanlines, JDIMENSION max_lines)) JSTATIC(jpeg_read_scanlines);
@ -925,6 +926,7 @@ void (VARGS *qjpeg_set_quality) JPP((j_compress_ptr cinfo, int quality, boolean
void (VARGS *qjpeg_set_defaults) JPP((j_compress_ptr cinfo)) JSTATIC(jpeg_set_defaults);
void (VARGS *qjpeg_CreateCompress) JPP((j_compress_ptr cinfo, int version, size_t structsize)) JSTATIC(jpeg_CreateCompress);
void (VARGS *qjpeg_destroy_compress) JPP((j_compress_ptr cinfo)) JSTATIC(jpeg_destroy_compress);
#endif
qboolean LibJPEG_Init(void)
{
@ -1096,7 +1098,11 @@ ftejpeg_mem_src (j_decompress_ptr cinfo, qbyte * infile, int maxlen)
src->pub.init_source = init_source;
src->pub.fill_input_buffer = fill_input_buffer;
src->pub.skip_input_data = skip_input_data;
src->pub.resync_to_restart = qjpeg_resync_to_restart; /* use default method */
#ifdef DYNAMIC_LIBJPEG
src->pub.resync_to_restart = qjpeg_resync_to_restart; /* use default method */
#else
src->pub.resync_to_restart = jpeg_resync_to_restart; /* use default method */
#endif
src->pub.term_source = term_source;
src->infile = infile;
src->pub.bytes_in_buffer = 0; /* forces fill_input_buffer on first read */
@ -1130,26 +1136,46 @@ qbyte *ReadJPEGFile(qbyte *infile, int length, int *width, int *height)
/* Step 1: allocate and initialize JPEG decompression object */
/* We set up the normal JPEG error routines, then override error_exit. */
cinfo.err = qjpeg_std_error(&jerr.pub);
#ifdef DYNAMIC_LIBJPEG
cinfo.err = qjpeg_std_error(&jerr.pub);
#else
cinfo.err = jpeg_std_error(&jerr.pub);
#endif
jerr.pub.error_exit = my_error_exit;
/* Establish the setjmp return context for my_error_exit to use. */
if (setjmp(jerr.setjmp_buffer))
{
// If we get here, the JPEG code has signaled an error.
badjpeg:
qjpeg_destroy_decompress(&cinfo);
#ifdef DYNAMIC_LIBJPEG
qjpeg_destroy_decompress(&cinfo);
#else
jpeg_destroy_decompress(&cinfo);
#endif
if (mem)
BZ_Free(mem);
return 0;
}
qjpeg_create_decompress(&cinfo);
#ifdef DYNAMIC_LIBJPEG
qjpeg_create_decompress(&cinfo);
#else
jpeg_create_decompress(&cinfo);
#endif
ftejpeg_mem_src(&cinfo, infile, length);
(void) qjpeg_read_header(&cinfo, TRUE);
#ifdef DYNAMIC_LIBJPEG
(void) qjpeg_read_header(&cinfo, TRUE);
#else
(void) jpeg_read_header(&cinfo, TRUE);
#endif
(void) qjpeg_start_decompress(&cinfo);
#ifdef DYNAMIC_LIBJPEG
(void) qjpeg_start_decompress(&cinfo);
#else
(void) jpeg_start_decompress(&cinfo);
#endif
if (cinfo.output_components == 0)
@ -1175,7 +1201,11 @@ badjpeg:
while (cinfo.output_scanline < cinfo.output_height)
{
(void) qjpeg_read_scanlines(&cinfo, buffer, 1);
#ifdef DYNAMIC_LIBJPEG
(void) qjpeg_read_scanlines(&cinfo, buffer, 1);
#else
(void) jpeg_read_scanlines(&cinfo, buffer, 1);
#endif
in = buffer[0];
for (i = 0; i < cinfo.output_width; i++)
@ -1187,9 +1217,17 @@ badjpeg:
}
}
(void) qjpeg_finish_decompress(&cinfo);
#ifdef DYNAMIC_LIBJPEG
(void) qjpeg_finish_decompress(&cinfo);
#else
(void) jpeg_finish_decompress(&cinfo);
#endif
qjpeg_destroy_decompress(&cinfo);
#ifdef DYNAMIC_LIBJPEG
qjpeg_destroy_decompress(&cinfo);
#else
jpeg_destroy_decompress(&cinfo);
#endif
*width = cinfo.output_width;
*height = cinfo.output_height;
@ -1292,17 +1330,29 @@ void screenshotJPEG(char *filename, int compression, qbyte *screendata, int scre
}
}
cinfo.err = qjpeg_std_error(&jerr.pub);
#ifdef DYNAMIC_LIBJPEG
cinfo.err = qjpeg_std_error(&jerr.pub);
#else
cinfo.err = jpeg_std_error(&jerr.pub);
#endif
jerr.pub.error_exit = jpeg_error_exit;
if (setjmp(jerr.setjmp_buffer))
{
qjpeg_destroy_compress(&cinfo);
#ifdef DYNAMIC_LIBJPEG
qjpeg_destroy_compress(&cinfo);
#else
jpeg_destroy_compress(&cinfo);
#endif
VFS_CLOSE(outfile);
FS_Remove(filename, FS_GAME);
Con_Printf("Failed to create jpeg\n");
return;
}
qjpeg_create_compress(&cinfo);
#ifdef DYNAMIC_LIBJPEG
qjpeg_create_compress(&cinfo);
#else
jpeg_create_compress(&cinfo);
#endif
buffer = screendata;
@ -1311,19 +1361,42 @@ void screenshotJPEG(char *filename, int compression, qbyte *screendata, int scre
cinfo.image_height = screenheight;
cinfo.input_components = 3;
cinfo.in_color_space = JCS_RGB;
qjpeg_set_defaults(&cinfo);
qjpeg_set_quality (&cinfo, bound(0, compression, 100), true);
qjpeg_start_compress(&cinfo, true);
#ifdef DYNAMIC_LIBJPEG
qjpeg_set_defaults(&cinfo);
#else
jpeg_set_defaults(&cinfo);
#endif
#ifdef DYNAMIC_LIBJPEG
qjpeg_set_quality (&cinfo, bound(0, compression, 100), true);
#else
jpeg_set_quality (&cinfo, bound(0, compression, 100), true);
#endif
#ifdef DYNAMIC_LIBJPEG
qjpeg_start_compress(&cinfo, true);
#else
jpeg_start_compress(&cinfo, true);
#endif
while (cinfo.next_scanline < cinfo.image_height)
{
*row_pointer = &buffer[(cinfo.image_height - cinfo.next_scanline - 1) * cinfo.image_width * 3];
qjpeg_write_scanlines(&cinfo, row_pointer, 1);
#ifdef DYNAMIC_LIBJPEG
qjpeg_write_scanlines(&cinfo, row_pointer, 1);
#else
jpeg_write_scanlines(&cinfo, row_pointer, 1);
#endif
}
qjpeg_finish_compress(&cinfo);
#ifdef DYNAMIC_LIBJPEG
qjpeg_finish_compress(&cinfo);
#else
jpeg_finish_compress(&cinfo);
#endif
VFS_CLOSE(outfile);
qjpeg_destroy_compress(&cinfo);
#ifdef DYNAMIC_LIBJPEG
qjpeg_destroy_compress(&cinfo);
#else
jpeg_destroy_compress(&cinfo);
#endif
}
#endif

View file

@ -1265,9 +1265,12 @@ HWND hwnd_dialog;
#define COBJMACROS
#include <Shobjidl.h>
#ifndef MINGW
#include <shobjidl.h>
#endif
#include <shlguid.h>
#include <Shlobj.h>
#include <shlobj.h>
//#include <Propsys.h>
#ifndef SHARD_APPIDINFOLINK
@ -1284,6 +1287,7 @@ typedef struct {
} PROPERTYKEY;
typedef struct IPropertyStore IPropertyStore;
;
#ifndef MINGW
typedef struct IPropertyStore
{
CONST_VTBL struct
@ -1322,6 +1326,7 @@ typedef struct IPropertyStore
IPropertyStore * This);
} *lpVtbl;
} IPropertyStore;
#endif
static const IID IID_IPropertyStore = {0x886d8eeb, 0x8cf2, 0x4446, {0x8d, 0x02, 0xcd, 0xba, 0x1d, 0xbd, 0xcf, 0x99}};
#endif
@ -1357,6 +1362,8 @@ void Sys_RecentServer(char *command, char *target, char *title, char *desc)
IShellLinkW_SetDescription(link, buf); /*tooltip*/
hr = IShellLinkW_QueryInterface(link, &IID_IPropertyStore, &prop_store);
#ifndef MINGW
if(SUCCEEDED(hr))
{
PROPVARIANT pv;
@ -1369,6 +1376,7 @@ void Sys_RecentServer(char *command, char *target, char *title, char *desc)
hr = prop_store->lpVtbl->Commit(prop_store);
prop_store->lpVtbl->Release(prop_store);
}
#endif
appinfo.pszAppID=WIN7_APPNAME;
appinfo.psl=link;
@ -1414,7 +1422,9 @@ int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLin
if (hPrevInstance)
return 0;
Win7_Init();
#ifndef MINGW
Win7_Init();
#endif
#ifdef _MSC_VER
#if _M_IX86_FP >= 1
@ -1630,6 +1640,7 @@ int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLin
//client console should now be initialized.
#ifndef MINGW
switch(M_GameType())
{
case MGT_QUAKE1:
@ -1645,6 +1656,7 @@ int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLin
Sys_RecentServer("+map demo1", "", "Start New Game (Hexen2)", "Begin a new game");
break;
}
#endif
/* main window message loop */
while (1)

View file

@ -84,6 +84,10 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#define ODE_DYNAMIC
#ifdef NO_OPENAL
#undef AVAIL_OPENAL
#endif
#ifdef NO_PNG
#undef AVAIL_PNGLIB
#endif

View file

@ -3113,7 +3113,7 @@ void COM_Version_f (void)
#endif
#ifdef __MINGW64__
Con_Printf("Compiled with MinGW64 version: %i.%i\n",__MINGW64_MAJOR_VERSION, __MINGW64_MINOR_VERSION);
Con_Printf("Compiled with MinGW64 version: %i.%i\n",__MINGW32_MAJOR_VERSION, __MINGW32_MINOR_VERSION);
#endif
#ifdef __CYGWIN__