4450 Commits

Author SHA1 Message Date
Cosmin Truta
d165a20ae4 build: Improve the search for an AWK processor in the CMake build
Add nawk to the list of AWK-processing programs that are known to work,
and show the search result in the CMake log.
2024-02-19 20:51:26 +02:00
Cosmin Truta
aa95dee697 build: Update the CMake build options PNG_TOOLS and PNG_FRAMEWORK
Update the PNG_TOOLS option: set it to OFF by default when the
target is an embedded system, yet still allow it to be overridden.

Update the PNG_FRAMEWORK option: force it back to OFF and print a
warning if the option was ON but the target is not an Apple system.
2024-02-19 14:25:55 +02:00
Dan Rosser
e7ba9c0dfc build: Fix a CMake build regression introduced in version 1.6.41
This fixes commit 4edbb4da81626a7342a22824d7a8f60a3ea71bd0.

During the move of CMake scripts to the scripts/cmake/ subdirectory,
some of the workflows have been broken.

Signed-off-by: Cosmin Truta <ctruta@gmail.com>
2024-02-19 11:19:52 +02:00
Cosmin Truta
6b5a2da072 Fix "ci: Fix the reporting in ci_lint.sh"
This fixes commit dddaf0c625a8daea4d027cb57380b7fac6f58285.

The way to reliably `find` executable files is different on BSD, Mac
and Linux, unfortunately.
2024-02-17 18:28:01 +02:00
Cosmin Truta
dddaf0c625 ci: Fix the reporting in ci_lint.sh
The variable `CI_LINT_COUNTER` was incremented inside subshells, but
remained unchanged in the main shell process. The errors detected by
the internal linters remained unreported by the main script. (Oopsie!)

Besides fixing this defect, considering that only a pass/fail status
is needed, we are replacing `CI_LINT_COUNTER` with `CI_LINT_STATUS`.
2024-02-17 16:32:21 +02:00
Cosmin Truta
72c4520d3c ci: Allow the user to force an in-tree cleanup before verification
Introduce the environment option CI_FORCE:
 * ci_verify_configure.sh is known to fail if an existing build
   configuration is found in the top-level directory.
   Setting CI_FORCE=1 will run `make distclean` before verification.
 * ci_verify_makefiles.sh cannot be reliably executed if random
   object files are found in the top-level directory.
   Setting CI_FORCE=1 will run `rm *.o *.obj` before verification.
 * ci_verify_cmake.sh is not known at this time to fail for similar
   reasons; but if it does, we will use CI_FORCE to trigger any
   necessary pre-build cleanup.
2024-02-17 11:56:35 +02:00
Cosmin Truta
0fa3c0f698 chore: Clean up the spurious uses of sizeof(png_byte); fix the manual
By definition, `sizeof(png_byte)` is 1.

Remove all the occurences of `sizeof(png_byte)` from the code, and fix
a related typo in the libpng manual.

Also update the main .editorconfig file to reflect the fixing expected
by a FIXME note.
2024-02-15 21:53:24 +02:00
Cosmin Truta
4191872d0d chore: Update the .editorconfig files and pacify editorconfig-checker 2024-02-15 18:29:26 +02:00
Cosmin Truta
42c8fcbff9 Add a GitHub Action for linting 2024-02-15 15:43:54 +02:00
Cosmin Truta
f74d5ecce8 ci: Pacify shellcheck version 0.8 and apply other linting improvements
Work around a limitation in the `shellcheck source` directive, which
does not recognize quotes in shellcheck versions older than 0.9.

Also extend the checks for YAML files over the entire source tree, in
preparation for the introduction of the GitHub Actions config file.
2024-02-15 14:37:24 +02:00
Cosmin Truta
fb65436e06 ci: Fix the check of PNG_LIBPNG_VER_BUILD in ci_verify_version.sh
`PNG_LIBPNG_VER_BUILD` should be zero for public releases and non-zero
for development versions. The ci_verify_version.sh script should check
this requirement as such.
2024-02-12 12:22:43 +02:00
Cosmin Truta
63c715b7d7 ci: Remove the workaround for CI_AR from ci_verify_makefiles.sh 2024-02-11 23:49:08 +02:00
Cosmin Truta
1cdde11877 build: Update the makefiles for the benefit of cross-compilation
Split AR_RC into AR and ARFLAGS. The variables AR and ARFLAGS are
de-facto standards (like CC and CFLAGS, LD and LDFLAGS, etc.) that
may be overridden when running make. Moreover, configuring CC, LD,
AR, etc., to point to a cross-platform compiler, linker, librarian,
etc., is a de-facto standard practice as well.

Also remove the MKDIR_P variable definitions from all makefiles.
They've been leftovers from the removal of the "install*" targets.
2024-02-11 23:14:09 +02:00
Cosmin Truta
8120345c89 ci: Update (again) the ci_verify_*.sh scripts; update .shellcheckrc
Apply stylistic improvements and remove a shellcheck exclusion.
2024-02-11 15:24:03 +02:00
Cosmin Truta
7a6148290f ci: Update the ci_verify_*.sh scripts.
Bring the coding patterns in line with the newest scripts.
2024-02-10 16:45:26 +02:00
Cosmin Truta
c6ee62af2e ci: Add ci_verify_version.sh
This program verifies the libpng source tree, expecting consistent
definitions of version numbers in the C source code, in the Autoconf
scripts, and in the CMake scripts.

The version verification is performed as follows. (Please note that
the version definitions in png.h are checked twice.)
 * The files png.h, configure.ac and CMakeLists.txt are checked by
   the ci_verify_version.sh program.
 * The files png.h, png.c and pngtest.c are checked by the pngtest
   program.
2024-02-09 18:00:24 +02:00
Cosmin Truta
46b79d4716 ci: Update and rename ci_lint_ci.sh to ci_lint.sh; update .shellcheckrc
The ci_lint.sh program can now lint the entire libpng source tree.
2024-02-08 21:37:42 +02:00
Cosmin Truta
49eeb1f8ba ci: Add ci_shellify.sh
This program can shellify png.h, configure.ac and CMakeLists.txt.
2024-02-08 19:17:33 +02:00
Cosmin Truta
366c9c6a24 ci: Reformat all scripts using 1TBS
One may truly embrace the stylishness of the One True Brace Style.
2024-02-06 16:20:33 +02:00
Cosmin Truta
920db2ecc0 api: Introduce the PNG_LIBPNG_VER_SHAREDLIB macro; update pngwin.rc
The version macros `PNG_LIBPNG_VER_SONUM` and `PNG_LIBPNG_VER_DLLNUM`
weren't always in sync, but they should be, going forward.

Or, better yet, we should keep them in, deprecated, and introduce
`PNG_LIBPNG_VER_SHAREDLIB` for all shared library builds of all kinds
on all platforms.

It is unknown how many user applications have been using these macros.
We have been using `PNG_LIBPNG_VER_DLLNUM` for pngwin.rc, for example.
Which, by the way, was last updated in 2009.
2024-02-05 21:54:19 +02:00
Cosmin Truta
cc8006c48d test: Add consistency checks for the PNG_LIBPNG_VER* numbers
Trigger a compile-time error in pngtest.c if there is any disagreement
among `PNG_LIBPNG_VER`, `PNG_LIBPNG_VER_MAJOR`, `PNG_LIBPNG_VER_MINOR`,
etc.
2024-02-05 21:31:23 +02:00
Cosmin Truta
aa9023bbd0 test: Remove compile-time option SINGLE_ROWBUF_ALLOC from pngtest.c
We have been running address-sanitized CI verifications for a while.
We can finally afford to simplify pngtest.c by removing a compile-time
option and the associated code branches that used to serve (only to a
limited extent) the purpose of bounds checking.

Also change the brief description of pngtest.c at the top of the file.
This is no longer just a simple test program.
2024-02-05 18:02:08 +02:00
Cosmin Truta
c9ac5bdba4 ci: Add a pre-build checkup stage to ci_verify_configure.sh
Also update comments and tracing printouts in ci/ci_*.sh
2024-02-04 21:53:15 +02:00
Cameron Cawley
ab6d97b7c8 build: Update and rename makefile.acorn to makefile.riscos
Co-authored-by: Cosmin Truta <ctruta@gmail.com>
Reviewed-by: John Bowler <jbowler@acm.org>
Signed-off-by: Cosmin Truta <ctruta@gmail.com>
2024-02-02 21:36:53 +02:00
Cosmin Truta
9138be341b Improve, refactor and clean up pngtest.c
Improve:
The pngtest program used to be rather relaxed upon seeing invalid
parameters in callbacks: it either ignored them, or it bailed out
of the callbacks, essentially sweeping the bug under the rug.
But no more. Now it terminates with a severe `png_error`, in which
it says what's broken and where.

Improve:
`PNG_DEBUG`, defined externally at build time, and defaulting to zero,
was assumed to be non-negative. Now it's checked.

Clean up:
In a very distant past, the pngtest program used to "travel" across
libpng versions, on its own, not necessarily accompanied by the actual
library version that it was meant to test. However, this stopped being
the case, and now is as good a time as any to remove the compatibility
workarounds that had made the aforementioned "travel" possible.

Other chores include:
 * The refactoring of the user-defined chunk handling routines;
 * The cleanup of an unnecessary use of volatile;
 * The various cosmetic improvements of code and comments.
2024-02-02 21:32:48 +02:00
John Bowler
ce1f1f001e API usage: add 'basic' configuration
This adds a new configuration file, 'contrib/conftest/basic.dfa' which
disables unused APIs on a test Linux-based system.  So support the
configuration several fixes were necessary in the test programs so that
the tests are skipped correctly when APIs are not available.

The configuration has been tested on a range of common Linux apps
including web browser code (qtwebengine), image processing code (e.g.
ImageMagick) and general display code (X11, Qt5 and Qt6, KDE).  Overall
this first step reduces libpng linked code and data size to about 2/3 of
the full configuration.

To use the new test simply copy basic.dfa to 'pngusr.dfa' in the root of
the source directory and build.

Signed-off-by: John Bowler <jbowler@acm.org>
2024-02-02 13:24:02 +02:00
John Bowler
805ed7a2d4 Correct row width check in png_check_IHDR
This changes the mask used in the IHDR width check from ~7U to
~(png_alloc_size_t)7 which is a quantity at least as big as both
png_uint_32 and size_t whereas "7U" will be 16 bits on a 16 bit system.
The change both corrects a bug in the code (on 16 bit systems) and
removes compiler warnings about the test always being false on 64-bit
architectures.

Signed-off-by: John Bowler <jbowler@acm.org>
2024-02-02 01:39:48 -08:00
guxiwei
2aebfb4aa9 loongarch: Add cmake support 2024-02-01 21:17:37 +02:00
Chris Blume
7f1f960d4f Add eXIf support to push mode
libpng already supports eXIf as of v1.6.31.
However, it seems like support was added for normal mode and not added
to push mode.

Notice PNG_READ_eXIfJSUPPORTED is in pngread.c:
https://github.com/pnggroup/libpng/blob/libpng16/pngread.c#L178
but is missing from pngpread.c:
https://github.com/pnggroup/libpng/blob/libpng16/pngpread.c#L274

This commit adds eXIf support to push mode.

Signed-off-by: Cosmin Truta <ctruta@gmail.com>
2024-02-01 20:49:15 +02:00
John Bowler
59a68c83f0 Fix contrib/conftest/pngcp.dfa
This was broken by the corrections to the 'palette max' handling; if
that is disabled the test of num_palette_max must be removed in pnread.c

Signed-off-by: John Bowler <jbowler@acm.org>
2024-01-31 15:17:49 +02:00
Cosmin Truta
3bd304e5f4 chore: Split lines in scripts/*.awk to pacify the editorconfig checker 2024-01-31 15:02:42 +02:00
Cosmin Truta
f0c578748b chore: Fix a comment in pngrtran.c 2024-01-31 14:51:52 +02:00
Cosmin Truta
2d7da9db8a chore: Add .editorconfig files 2024-01-31 13:04:26 +02:00
Cosmin Truta
4356cb0709 Bump version to 1.6.43.git 2024-01-31 11:32:51 +02:00
Cosmin Truta
35d9f5ea52 Release libpng version 1.6.42 v1.6.42 2024-01-29 22:51:33 +02:00
Cosmin Truta
31439b6b8d chore: Fix whitespace in pngpriv.h 2024-01-29 20:36:36 +02:00
Cosmin Truta
537c66660e chore: Fix and update the libpng manual
Fix various typos and whitespace errors, and clean up obsolete
formulations such as `(png_infopp)NULL`.

Bring all URLs up to date.
2024-01-29 17:53:21 +02:00
Cosmin Truta
ac944e2b36 Fix a regression introduced in "chore: Clean up the return statements"
This fixes commit 27e548af2518ff8d278b45c40d11ad1bdd68eaa0.

The macro `png_check_sig` has been deprecated and remained untested
for decades. And yet, somehow it escaped from all past API cleanups.

Also update the libpng manual.

Reported-by: Matthieu Darbois
2024-01-29 15:30:10 +02:00
Cosmin Truta
ba980b8f0c Release libpng version 1.6.41 v1.6.41 2024-01-24 18:59:00 +02:00
Cosmin Truta
27e548af25 chore: Clean up the return statements and update example.c accordingly 2024-01-23 21:25:03 +02:00
Cosmin Truta
92b2128a75 chore: Add, relocate or rephrase debug statements, for better clarity 2024-01-23 02:33:54 +02:00
Cosmin Truta
6159bad8a9 ci: Relicense again the CI scripts, from Boost License to MIT License
Many build scripts, ports and other third-party add-ons that are
circulating around appear to be distributed under the MIT License.
Examples include the Vcpkg build system (including the libpng port)
and the Meson build definitions (including the libpng definition).

I am, therefore, relicensing our CI scripts once more, as the sole
author (so far), just in case that any of the CI code might travel
from/to such projects. Hopefully, this one last license will stick.

Signed-off-by: Cosmin Truta <ctruta@gmail.com>
2024-01-22 23:55:18 +02:00
Cosmin Truta
3285bf0d4c ci: Add help options; add checks for the boolean environment options 2024-01-22 23:45:23 +02:00
Cosmin Truta
4edbb4da81 build: Move scripts/*.cmake.in to scripts/cmake/; add cmake/AUTHORS.md
From the libpng licensing point of view, the build projects, the build
scripts, the test scripts, the CI verification scripts, et cetera, have
not traditionally been part of libpng proper, although some of these,
including the CMake-based build, have been released under the libpng
license.

Considering how the CMake build grew as a result of many contributions
from many contributing authors over a long time, one may argue that it
almost became an individual piece of software in its own right.

Moving on, everything CMake-related shall be placed in the subdirectory
scripts/cmake/ (except, of course, the main CMakeLists.txt). Moreover,
contributing authors shall be acknowledged in scripts/cmake/AUTHORS.md.

Please see scripts/cmake/README.md for more information.
2024-01-22 17:24:59 +02:00
Cosmin Truta
9a774b9156 chore: Rerun ./autogen.sh --maintainer and update .gitignore
Bring the auto-generated scripts up to date with the autoconf upgrade
from version 2.71 to version 2.72.

Make the .gitignore exclusions better tailored to the autoconf- and
configure-generated artifacts.
2024-01-22 15:22:50 +02:00
Cosmin Truta
671661849a build: Move scripts/*.m4 to scripts/autoconf/
Move all Autoconf macro files (except for those that need to be in
the top-level directory) to their own subdirectory scripts/autoconf/

In this commit, we introduce a better way to organize the scripts dir,
and we make a better separation between the build scripts under the
libpng license vs. the build scripts that fall under other licenses.

Please see scripts/autoconf/README.md for more information.
2024-01-22 15:16:10 +02:00
Cosmin Truta
438a518611 Update the main AUTHORS file 2024-01-20 19:09:38 +02:00
John Bowler
8fb49b8b94 Relax pngtest-all message testing
Previously the 'make check' test pngtest-all looked for given messages
at EOL.  The match failed with Windows/MSYS2 because of the Windows
<cr><lf> line endings output by pngtest.  This changes the test to look
for the message anywhere in a line; this might give false matches but
the specific messages being searched for are not likely to cause this
problem.

Signed-off-by: John Bowler <jbowler@acm.org>
2024-01-19 15:31:53 -08:00
John Bowler
144b348e07 Use --xfail for Adler32 check in pngtest-all
The test always failed on systems with no support for zlib
inflateValidate and on systems where the png_set_option setting was
disabled, however pngtest-all succeeded because the failure was ignored.
The latter is now fixed so the badadler.png check needs to use --xfail,
not --relaxed.

Signed-off-by: John Bowler <jbowler@acm.org>
2024-01-19 11:10:00 -08:00
John Bowler
1a0d7a7481 Correct regression-palette-8.png
This corrects contrib/testpngs/badpal/regression-palette-8.png.  Despite
the comment in commit da109d3e the file checked in had 255 PLTE entries
so failed to perform the regression test.  This version of the PNG has
254 entries.

Signed-off-by: John Bowler <jbowler@acm.org>
2024-01-19 08:55:56 -08:00