From 46369f35c5d6da2f9eea583e39935e006cd91f9c Mon Sep 17 00:00:00 2001 From: John Bowler Date: Thu, 20 Dec 2012 22:58:13 -0600 Subject: [PATCH] [libpng17] Fixed Windows build issues, enabled ARM compilation. Various warnings issued by earlier versions of GCC fixed for Cygwin and Min/GW (which both use old GCCs.) ARM support is enabled by default in zlib.props (unsupported by Microsoft) and ARM compilation is made possible by deleting the check for x86. The test programs cannot be run because they are not signed. --- ANNOUNCE | 5 ++++ CHANGES | 5 ++++ png.c | 8 +++---- pngconf.h | 23 ++++++++++--------- pngrtran.c | 11 +++++---- pngset.c | 3 ++- pngstruct.h | 16 ++++++++----- pngwrite.c | 1 - projects/vstudio/libpng/libpng.vcxproj | 2 +- .../vstudio/pnglibconf/pnglibconf.vcxproj | 1 + projects/vstudio/pngstest/pngstest.vcxproj | 10 ++++---- projects/vstudio/pngtest/pngtest.vcxproj | 2 +- .../vstudio/pngunknown/pngunknown.vcxproj | 6 ++--- projects/vstudio/pngvalid/pngvalid.vcxproj | 2 +- projects/vstudio/readme.txt | 2 +- projects/vstudio/zlib.props | 10 +++++++- projects/vstudio/zlib/zlib.vcxproj | 2 +- 17 files changed, 67 insertions(+), 42 deletions(-) diff --git a/ANNOUNCE b/ANNOUNCE index 8170b9d46..86be50ed2 100644 --- a/ANNOUNCE +++ b/ANNOUNCE @@ -94,6 +94,11 @@ Version 1.7.0alpha04 [December 21, 2012] Added scripts/makefile.msys contributed by Christopher M. Wheeler Made default Zlib compression settings be configurable. This adds #defines to pnglibconf.h to control the defaults. + Fixed Windows build issues, enabled ARM compilation. Various warnings issued by + earlier versions of GCC fixed for Cygwin and Min/GW (which both use old GCCs.) + ARM support is enabled by default in zlib.props (unsupported by Microsoft) and + ARM compilation is made possible by deleting the check for x86. The test programs + cannot be run because they are not signed. =========================================================================== NOTICE November 17, 2012: diff --git a/CHANGES b/CHANGES index 5cfcb8936..02291f822 100644 --- a/CHANGES +++ b/CHANGES @@ -4379,6 +4379,11 @@ Version 1.7.0alpha04 [December 21, 2012] Added scripts/makefile.msys contributed by Christopher M. Wheeler Made default Zlib compression settings be configurable. This adds #defines to pnglibconf.h to control the defaults. + Fixed Windows build issues, enabled ARM compilation. Various warnings issued by + earlier versions of GCC fixed for Cygwin and Min/GW (which both use old GCCs.) + ARM support is enabled by default in zlib.props (unsupported by Microsoft) and + ARM compilation is made possible by deleting the check for x86. The test programs + cannot be run because they are not signed. =========================================================================== NOTICE November 17, 2012: diff --git a/png.c b/png.c index 50fb67f88..108ac697a 100644 --- a/png.c +++ b/png.c @@ -691,13 +691,13 @@ png_get_copyright(png_const_structrp png_ptr) #else # ifdef __STDC__ return PNG_STRING_NEWLINE \ - "libpng version 1.7.0alpha04 - December 19, 2012" PNG_STRING_NEWLINE \ + "libpng version 1.7.0alpha04 - December 21, 2012" PNG_STRING_NEWLINE \ "Copyright (c) 1998-2012 Glenn Randers-Pehrson" PNG_STRING_NEWLINE \ "Copyright (c) 1996-1997 Andreas Dilger" PNG_STRING_NEWLINE \ "Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc." \ PNG_STRING_NEWLINE; # else - return "libpng version 1.7.0alpha04 - December 19, 2012\ + return "libpng version 1.7.0alpha04 - December 21, 2012\ Copyright (c) 1998-2012 Glenn Randers-Pehrson\ Copyright (c) 1996-1997 Andreas Dilger\ Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc."; @@ -3589,7 +3589,7 @@ typedef struct png_uint_32 mult; unsigned int add; unsigned int shift; /* input value is (i * mult + add) >> shift */ - unsigned int output; /* One of the above values */ + int output; /* One of the above values */ int adjust; /* Divide or multiple output by 257 */ png_voidp table; /* Lookup table */ } gamma_table_data; @@ -3679,7 +3679,7 @@ write_gamma_table(const gamma_table_data *data, png_uint_32 lo, static void * png_build_gamma_table(png_structrp png_ptr, png_fixed_point gamma_val, - unsigned int output/*as above*/, unsigned int input_depth, int use_shift) + int output/*as above*/, int input_depth, int use_shift) /* Build a gamma lookup table to encode input_depth bit input values. * The table will have 2^input_depth entries plus an extra one if use_shift * is specified. With shift the table is accessed: diff --git a/pngconf.h b/pngconf.h index 8c5ed5da3..3a0cfacc0 100644 --- a/pngconf.h +++ b/pngconf.h @@ -1,7 +1,7 @@ /* pngconf.h - machine configurable file for libpng * - * libpng version 1.7.0alpha04 - December 19, 2012 + * libpng version 1.7.0alpha04 - December 21, 2012 * * Copyright (c) 1998-2012 Glenn Randers-Pehrson * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) @@ -198,18 +198,16 @@ * ========================== * This code is used at build time to find PNG_IMPEXP, the API settings * and PNG_EXPORT_TYPE(), it may also set a macro to indicate the DLL - * import processing is possible. On Windows/x86 systems it also sets + * import processing is possible. On Windows systems it also sets * compiler-specific macros to the values required to change the calling * conventions of the various functions. */ -#if ( defined(_Windows) || defined(_WINDOWS) || defined(WIN32) ||\ - defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) ) &&\ - ( defined(_X86_) || defined(_X64_) || defined(_M_IX86) ||\ - defined(_M_X64) || defined(_M_IA64) ) - /* Windows system (DOS doesn't support DLLs) running on x86/x64. Includes - * builds under Cygwin or MinGW. Also includes Watcom builds but these need - * special treatment because they are not compatible with GCC or Visual C - * because of different calling conventions. +#if defined(_Windows) || defined(_WINDOWS) || defined(WIN32) ||\ + defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) + /* Windows system (DOS doesn't support DLLs). Includes builds under Cygwin or + * MinGW on any architecture currently supported by Windows. Also includes + * Watcom builds but these need special treatment because they are not + * compatible with GCC or Visual C because of different calling conventions. */ # if PNG_API_RULE == 2 /* If this line results in an error, either because __watcall is not @@ -223,6 +221,9 @@ # if defined(__GNUC__) || (defined (_MSC_VER) && (_MSC_VER >= 800)) # define PNGCAPI __cdecl # if PNG_API_RULE == 1 + /* If this line results in an error __stdcall is not understood and + * PNG_API_RULE should not have been set to '1'. + */ # define PNGAPI __stdcall # endif # else @@ -260,7 +261,7 @@ # endif # endif /* compiler */ -#else /* !Windows/x86 */ +#else /* !Windows */ # if (defined(__IBMC__) || defined(__IBMCPP__)) && defined(__OS2__) # define PNGAPI _System # else /* !Windows/x86 && !OS/2 */ diff --git a/pngrtran.c b/pngrtran.c index 93a6d5598..8a62fe905 100644 --- a/pngrtran.c +++ b/pngrtran.c @@ -1289,14 +1289,15 @@ png_init_background_transformations(png_structrp png_ptr) */ if (expand && (color_type & PNG_COLOR_MASK_PALETTE) != 0) { - unsigned int index = png_ptr->background.index; + unsigned int background_index = png_ptr->background.index; - if (index < png_ptr->num_palette && png_ptr->palette != NULL) + if (background_index < png_ptr->num_palette && + png_ptr->palette != NULL) { /* In fact 'mult' is always 1 at present in this case */ - CORRECT(png_ptr->palette[index].red, red); - CORRECT(png_ptr->palette[index].green, green); - CORRECT(png_ptr->palette[index].blue, blue); + CORRECT(png_ptr->palette[background_index].red, red); + CORRECT(png_ptr->palette[background_index].green, green); + CORRECT(png_ptr->palette[background_index].blue, blue); } else diff --git a/pngset.c b/pngset.c index c0c2d9664..36f1d6604 100644 --- a/pngset.c +++ b/pngset.c @@ -959,7 +959,8 @@ png_set_tRNS(png_structrp png_ptr, png_inforp info_ptr, PNG_MAX_PALETTE_LENGTH)); info_ptr->free_me |= PNG_FREE_TRNS; - memcpy(info_ptr->trans_alpha, trans_alpha, num_trans); + memcpy(info_ptr->trans_alpha, trans_alpha, + (unsigned)/*SAFE*/num_trans); info_ptr->valid |= PNG_INFO_tRNS; info_ptr->num_trans = (png_uint_16)num_trans; /* SAFE */ } diff --git a/pngstruct.h b/pngstruct.h index 8822ec575..0eee78572 100644 --- a/pngstruct.h +++ b/pngstruct.h @@ -148,8 +148,16 @@ struct png_struct_def * (char), (short), (int) and pointer types are kept separate, however * associated members under the control of the same #define are still * together. - * - * First the frequently accessed fields. Many processors perform arithmetic + */ +#ifdef PNG_SETJMP_SUPPORTED + /* jmp_buf can have very high alignment requirements on some systems, so put + * it first (the other setjmp members are later as they are infrequently + * accesed.) + */ + jmp_buf jmp_buf_local; +#endif + + /* Next the frequently accessed fields. Many processors perform arithmetic * in the address pipeline, but frequently the amount of addition or * subtraction is limited. By putting these fields at the head of png_struct * the hope is that such processors will generate code that is both smaller @@ -198,10 +206,6 @@ struct png_struct_def /* ERROR HANDLING */ #ifdef PNG_SETJMP_SUPPORTED - /* jmp_buf can have very high alignment requirements on some systems, so put - * it first. - */ - jmp_buf jmp_buf_local; jmp_buf *jmp_buf_ptr; /* passed to longjmp_fn */ png_longjmp_ptr longjmp_fn; /* setjmp non-local goto function. */ size_t jmp_buf_size; /* size of *jmp_buf_ptr, if allocated */ diff --git a/pngwrite.c b/pngwrite.c index 9c09dd439..77861b29e 100644 --- a/pngwrite.c +++ b/pngwrite.c @@ -452,7 +452,6 @@ png_write_end(png_structrp png_ptr, png_inforp info_ptr) } #ifdef PNG_CONVERT_tIME_SUPPORTED -/* "tm" structure is not supported on WindowsCE */ void PNGAPI png_convert_from_struct_tm(png_timep ptime, PNG_CONST struct tm * ttime) { diff --git a/projects/vstudio/libpng/libpng.vcxproj b/projects/vstudio/libpng/libpng.vcxproj index ffb03e02e..5b8f0bb00 100644 --- a/projects/vstudio/libpng/libpng.vcxproj +++ b/projects/vstudio/libpng/libpng.vcxproj @@ -23,8 +23,8 @@ Win32Proj libpng - + DynamicLibrary MultiByte diff --git a/projects/vstudio/pnglibconf/pnglibconf.vcxproj b/projects/vstudio/pnglibconf/pnglibconf.vcxproj index 7c691c32d..e2a232cb6 100644 --- a/projects/vstudio/pnglibconf/pnglibconf.vcxproj +++ b/projects/vstudio/pnglibconf/pnglibconf.vcxproj @@ -17,6 +17,7 @@ true MultiByte + diff --git a/projects/vstudio/pngstest/pngstest.vcxproj b/projects/vstudio/pngstest/pngstest.vcxproj index fc2e9d5d8..b3bb27b3e 100644 --- a/projects/vstudio/pngstest/pngstest.vcxproj +++ b/projects/vstudio/pngstest/pngstest.vcxproj @@ -23,8 +23,8 @@ Win32Proj pngstest - + Application Unicode @@ -96,7 +96,7 @@ Console true - libpng16.lib;zlib.lib + libpng17.lib $(OutDir) @@ -129,7 +129,7 @@ Console true - libpng16.lib;zlib.lib + libpng17.lib;zlib.lib $(OutDir) @@ -163,7 +163,7 @@ true true true - libpng16.lib;zlib.lib + libpng17.lib $(OutDir) UseLinkTimeCodeGeneration @@ -199,7 +199,7 @@ true true true - libpng16.lib;zlib.lib + libpng17.lib;zlib.lib $(OutDir) UseLinkTimeCodeGeneration diff --git a/projects/vstudio/pngtest/pngtest.vcxproj b/projects/vstudio/pngtest/pngtest.vcxproj index e13770c03..536e39a08 100644 --- a/projects/vstudio/pngtest/pngtest.vcxproj +++ b/projects/vstudio/pngtest/pngtest.vcxproj @@ -23,8 +23,8 @@ Win32Proj pngtest - + Application Unicode diff --git a/projects/vstudio/pngunknown/pngunknown.vcxproj b/projects/vstudio/pngunknown/pngunknown.vcxproj index 4eacf7850..2e2a78d28 100644 --- a/projects/vstudio/pngunknown/pngunknown.vcxproj +++ b/projects/vstudio/pngunknown/pngunknown.vcxproj @@ -23,8 +23,8 @@ Win32Proj pngunknown - + Application Unicode @@ -96,7 +96,7 @@ Console true - libpng17.lib;zlib.lib + libpng17.lib $(OutDir) @@ -163,7 +163,7 @@ true true true - libpng17.lib;zlib.lib + libpng17.lib $(OutDir) UseLinkTimeCodeGeneration diff --git a/projects/vstudio/pngvalid/pngvalid.vcxproj b/projects/vstudio/pngvalid/pngvalid.vcxproj index 9a962c9a9..a53baf833 100644 --- a/projects/vstudio/pngvalid/pngvalid.vcxproj +++ b/projects/vstudio/pngvalid/pngvalid.vcxproj @@ -23,8 +23,8 @@ Win32Proj pngvalid - + Application Unicode diff --git a/projects/vstudio/readme.txt b/projects/vstudio/readme.txt index b08e411b4..0871f5bca 100644 --- a/projects/vstudio/readme.txt +++ b/projects/vstudio/readme.txt @@ -1,7 +1,7 @@ VisualStudio instructions -libpng version 1.7.0alpha04 - December 19, 2012 +libpng version 1.7.0alpha04 - December 21, 2012 Copyright (c) 1998-2010 Glenn Randers-Pehrson diff --git a/projects/vstudio/zlib.props b/projects/vstudio/zlib.props index 8932f698d..553222485 100644 --- a/projects/vstudio/zlib.props +++ b/projects/vstudio/zlib.props @@ -2,7 +2,7 @@ ..\..\..\..\zlib-1.2.5 + + + true diff --git a/projects/vstudio/zlib/zlib.vcxproj b/projects/vstudio/zlib/zlib.vcxproj index 8e271988f..6e5b94a61 100644 --- a/projects/vstudio/zlib/zlib.vcxproj +++ b/projects/vstudio/zlib/zlib.vcxproj @@ -36,8 +36,8 @@ Win32Proj zlib - + StaticLibrary