1# configure.ac 2 3# Copyright (c) 2018-2024 Cosmin Truta 4# Copyright (c) 2004-2016 Glenn Randers-Pehrson 5 6# This code is released under the libpng license. 7# For conditions of distribution and use, see the disclaimer 8# and license in png.h 9 10dnl Process this file with autoconf to produce a configure script. 11dnl 12dnl Minor upgrades (compatible ABI): increment the package version 13dnl (third field in two places below) and set the PNGLIB_RELEASE 14dnl variable. 15dnl 16dnl Major upgrades (incompatible ABI): increment the package major 17dnl version (second field, or first if desired), set the minor 18dnl to 0, set PNGLIB_MAJOR below *and* follow the instructions in 19dnl Makefile.am to upgrade the package name. 20 21dnl This is here to prevent earlier autoconf from being used, it 22dnl should not be necessary to regenerate configure if the time 23dnl stamps are correct 24AC_PREREQ([2.68]) 25 26dnl Version number stuff here: 27 28AC_INIT([libpng],[1.6.44],[[email protected]]) 29AC_CONFIG_MACRO_DIR([scripts/autoconf]) 30 31# libpng does not follow GNU file name conventions (hence 'foreign') 32# color-tests requires automake 1.11 or later 33# silent-rules requires automake 1.11 or later 34# dist-xz requires automake 1.11 or later 35# 1.12.2 fixes a security issue in 1.11.2 and 1.12.1 36# 1.13 is required for parallel tests 37AM_INIT_AUTOMAKE([1.13 foreign dist-xz color-tests silent-rules subdir-objects]) 38# The following line causes --disable-maintainer-mode to be the default to 39# configure. This is necessary because libpng distributions cannot rely on the 40# time stamps of the autotools generated files being correct 41AM_MAINTAINER_MODE 42 43dnl configure.ac and Makefile.am expect automake 1.11.2 or a compatible later 44dnl version; aclocal.m4 will generate a failure if you use a prior version of 45dnl automake, so the following is not necessary (and is not defined anyway): 46dnl AM_PREREQ([1.11.2]) 47dnl stop configure from automagically running automake 48 49PNGLIB_VERSION=1.6.44 50PNGLIB_MAJOR=1 51PNGLIB_MINOR=6 52PNGLIB_RELEASE=44 53 54dnl End of version number stuff 55 56AC_CONFIG_SRCDIR([pngget.c]) 57AC_CONFIG_HEADERS([config.h]) 58 59# Check the basic programs. 60AC_LANG([C]) 61AC_PROG_CC 62AM_PROG_AS 63LT_PATH_LD 64AC_PROG_CPP 65AC_PROG_AWK 66AC_PROG_INSTALL 67AC_PROG_LN_S 68AC_PROG_MAKE_SET 69 70dnl libtool/libtoolize; version 2.4.2 is the tested version. This or any 71dnl compatible later version may be used 72LT_INIT([win32-dll]) 73LT_PREREQ([2.4.2]) 74 75dnl Declare the AWK variable. 76AC_ARG_VAR(AWK, [AWK language processor]) 77 78# Some awk implementations crash when confronted with pnglibconf.dfa. 79# Run a test now, to make sure this doesn't happen. 80AC_MSG_CHECKING([if awk ($AWK) works]) 81if ${AWK} -f ${srcdir}/scripts/options.awk out="/dev/null" version=search\ 82 ${srcdir}/pngconf.h ${srcdir}/scripts/pnglibconf.dfa\ 83 ${srcdir}/pngusr.dfa 1>&2 84then 85 AC_MSG_RESULT([yes]) 86else 87 AC_MSG_FAILURE([no], 1) 88fi 89 90# This is a remnant of the old cc -E validation, where it may have been 91# necessary to use a different preprocessor for .dfn files 92DFNCPP="$CPP" 93AC_SUBST(DFNCPP) 94 95AC_ARG_ENABLE([tests], 96 AS_HELP_STRING([--disable-tests], 97 [do not build the test programs (default is to build)]), 98 [enable_tests="$enableval"], 99 [enable_tests=yes]) 100 101AM_CONDITIONAL([ENABLE_TESTS], 102 [test "$enable_tests" != "no"]) 103 104AC_ARG_ENABLE([tools], 105 AS_HELP_STRING([--disable-tools], 106 [do not build the auxiliary tools (default is to build)]), 107 [enable_tools="$enableval"], 108 [enable_tools=yes]) 109 110AM_CONDITIONAL([ENABLE_TOOLS], 111 [test "$enable_tools" != "no"]) 112 113# -Werror cannot be passed to GCC in CFLAGS because configure will fail 114# (it checks the compiler with a program that generates a warning). 115# Add the following option to deal with this: 116AC_ARG_VAR(PNG_COPTS, 117 [additional flags for the C compiler, to be used for options that would] 118 [cause configure itself to fail]) 119AC_ARG_ENABLE(werror, 120 AS_HELP_STRING([[[--enable-werror[=OPT]]]], 121 [Pass -Werror or the given argument to the compiler if it is supported]), 122 [test "$enable_werror" = "yes" && enable_werror="-Werror" 123 if test "$enable_werror" != "no"; then 124 sav_CFLAGS="$CFLAGS" 125 CFLAGS="$enable_werror $CFLAGS" 126 AC_MSG_CHECKING([if the compiler allows $enable_werror]) 127 AC_COMPILE_IFELSE( 128 [AC_LANG_SOURCE([ 129 [int main(int argc, char **argv){] 130 [return argv[argc-1][0];] 131 [}]])], 132 AC_MSG_RESULT(yes) 133 PNG_COPTS="$PNG_COPTS $enable_werror", 134 AC_MSG_RESULT(no)) 135 CFLAGS="$sav_CFLAGS" 136 fi],) 137 138# For GCC 5 the default mode for C is -std=gnu11 instead of -std=gnu89. 139# In pngpriv.h we request just the POSIX 1003.1 and C89 APIs by defining 140# _POSIX_SOURCE to 1. This is incompatible with the new default mode, so 141# we test for that and force the "-std=c89" compiler option: 142AC_MSG_CHECKING([if we need to force back C standard to C89]) 143AC_COMPILE_IFELSE( 144 [AC_LANG_PROGRAM([ 145 [#define _POSIX_SOURCE 1] 146 [#include <stdio.h>] 147 ])], 148 AC_MSG_RESULT(no),[ 149 if test "x$GCC" != "xyes"; then 150 AC_MSG_ERROR( 151 [Forcing back to C89 is required but the flags are only known for GCC]) 152 fi 153 AC_MSG_RESULT(yes) 154 CFLAGS="$CFLAGS -std=c89" 155]) 156 157# Checks for structures and compiler characteristics. 158AC_STRUCT_TM 159AC_C_RESTRICT 160 161# Checks for library functions. 162AC_CHECK_FUNCS([pow], , 163 [AC_CHECK_LIB([m], [pow], , [AC_MSG_ERROR([cannot find pow])])]) 164 165# Some later POSIX 1003.1 functions are required for test programs, failure 166# here is soft (the corresponding test program is not built). 167AC_CHECK_FUNC([clock_gettime], , [AC_MSG_WARN([not building timepng])]) 168AM_CONDITIONAL([HAVE_CLOCK_GETTIME], [test "$ac_cv_func_clock_gettime" = "yes"]) 169 170AC_ARG_WITH(zlib-prefix, 171 AS_HELP_STRING([[[--with-zlib-prefix]]], 172 [prefix that may have been used in installed zlib]), 173 [ZPREFIX=${withval}], 174 [ZPREFIX='z_']) 175AC_CHECK_LIB([z], [zlibVersion], , 176 [AC_CHECK_LIB([z], [${ZPREFIX}zlibVersion], , 177 [AC_MSG_ERROR([zlib not installed])])]) 178 179# The following is for pngvalid, to ensure it catches FP errors even on 180# platforms that don't enable FP exceptions, the function appears in the math 181# library (typically), it's not an error if it is not found. 182AC_CHECK_LIB([m], [feenableexcept]) 183AC_CHECK_FUNCS([feenableexcept]) 184 185AC_MSG_CHECKING([if using Solaris linker]) 186SLD=`$LD --version 2>&1 | grep Solaris` 187if test "$SLD"; then 188 have_solaris_ld=yes 189 AC_MSG_RESULT(yes) 190else 191 have_solaris_ld=no 192 AC_MSG_RESULT(no) 193fi 194AM_CONDITIONAL(HAVE_SOLARIS_LD, test "$have_solaris_ld" = "yes") 195 196AC_MSG_CHECKING([if libraries can be versioned]) 197# Special case for PE/COFF platforms: ld reports 198# support for version-script, but doesn't actually 199# DO anything with it. 200case $host in 201*cygwin* | *mingw32* | *interix* ) 202 have_ld_version_script=no 203 AC_MSG_RESULT(no) 204;; 205* ) 206 207if test "$have_solaris_ld" = "yes"; then 208 GLD=`$LD --help < /dev/null 2>&1 | grep 'M mapfile'` 209else 210 GLD=`$LD --help < /dev/null 2>/dev/null | grep version-script` 211fi 212 213if test "$GLD"; then 214 have_ld_version_script=yes 215 AC_MSG_RESULT(yes) 216else 217 have_ld_version_script=no 218 AC_MSG_RESULT(no) 219 AC_MSG_WARN(*** You have not enabled versioned symbols.) 220fi 221;; 222esac 223 224AM_CONDITIONAL(HAVE_LD_VERSION_SCRIPT, test "$have_ld_version_script" = "yes") 225 226if test "$have_ld_version_script" = "yes"; then 227 AC_MSG_CHECKING([for symbol prefix]) 228 SYMBOL_PREFIX=`echo "PREFIX=__USER_LABEL_PREFIX__" \ 229 | ${CPP:-${CC:-gcc} -E} - 2>&1 \ 230 | ${EGREP:-grep} "^PREFIX=" \ 231 | ${SED:-sed} -e "s:^PREFIX=::" -e "s:__USER_LABEL_PREFIX__::"` 232 AC_SUBST(SYMBOL_PREFIX) 233 AC_MSG_RESULT($SYMBOL_PREFIX) 234fi 235 236# Substitutions for .in files 237AC_SUBST(PNGLIB_VERSION) 238AC_SUBST(PNGLIB_MAJOR) 239AC_SUBST(PNGLIB_MINOR) 240AC_SUBST(PNGLIB_RELEASE) 241 242# Additional arguments (and substitutions) 243# Allow the pkg-config directory to be set 244AC_ARG_WITH(pkgconfigdir, 245 AS_HELP_STRING([[[--with-pkgconfigdir]]], 246 [Use the specified pkgconfig dir (default is libdir/pkgconfig)]), 247 [pkgconfigdir=${withval}], 248 [pkgconfigdir='${libdir}/pkgconfig']) 249 250AC_SUBST([pkgconfigdir]) 251AC_MSG_NOTICE([[pkgconfig directory is ${pkgconfigdir}]]) 252 253# Make the *-config binary config scripts optional 254AC_ARG_WITH(binconfigs, 255 AS_HELP_STRING([[[--with-binconfigs]]], 256 [Generate shell libpng-config scripts as well as pkg-config data] 257 [@<:@default=yes@:>@]), 258 [if test "${withval}" = no; then 259 binconfigs= 260 AC_MSG_NOTICE([[libpng-config scripts will not be built]]) 261 else 262 binconfigs='${binconfigs}' 263 fi], 264 [binconfigs='${binconfigs}']) 265AC_SUBST([binconfigs]) 266 267# Support for prefixes to the API function names; this will generate defines 268# at the start of the build to rename exported library functions 269AC_ARG_WITH(libpng-prefix, 270 AS_HELP_STRING([[[--with-libpng-prefix]]], 271 [prefix libpng exported function (API) names with the given value]), 272 [if test "${withval:-no}" != "no"; then 273 AC_SUBST([PNG_PREFIX], [${withval}]) 274 fi]) 275AM_CONDITIONAL([DO_PNG_PREFIX], [test "${with_libpng_prefix:-no}" != "no"]) 276 277# Control over what links are made for installed files. Versioned files are 278# always installed, when the following options are turned on corresponding 279# unversioned links are also created (normally as symbolic links): 280AC_ARG_ENABLE([unversioned-links], 281 AS_HELP_STRING([[[--enable-unversioned-links]]], 282 [Installed libpng header files are placed in a versioned subdirectory] 283 [and installed libpng library (including DLL) files are versioned.] 284 [If this option is enabled unversioned links will be created pointing to] 285 [the corresponding installed files. If you use libpng.pc or] 286 [libpng-config for all builds you do not need these links, but if you] 287 [compile programs directly they will typically #include <png.h> and] 288 [link with -lpng; in that case you need the links.] 289 [The links can be installed manually using 'make install-header-links'] 290 [and 'make install-library-links' and can be removed using the] 291 [corresponding uninstall- targets. If you do enable this option every] 292 [libpng 'make install' will recreate the links to point to the just] 293 [installed version of libpng. The default is to create the links;] 294 [use --disable-unversioned-links to change this])) 295 296# The AM_CONDITIONAL test is written so that the default is enabled; 297# --disable-unversioned-links must be given to turn the option off. 298AM_CONDITIONAL([DO_INSTALL_LINKS],[test "$enable_unversioned_links" != "no"]) 299 300AC_ARG_ENABLE([unversioned-libpng-pc], 301 AS_HELP_STRING([[[--enable-unversioned-libpng-pc]]], 302 [Install the configuration file 'libpng.pc' as a link to the versioned] 303 [version. This is done by default - use --disable-unversioned-libpng-pc] 304 [to change this.])) 305AM_CONDITIONAL([DO_INSTALL_LIBPNG_PC], 306 [test "$enable_unversioned_libpng_pc" != "no"]) 307 308AC_ARG_ENABLE([unversioned-libpng-config], 309 AS_HELP_STRING([[[--enable-unversioned-libpng-config]]], 310 [Install the configuration file 'libpng-config' as a link to the] 311 [versioned version. This is done by default - use] 312 [--disable-unversioned-libpng-config to change this.])) 313AM_CONDITIONAL([DO_INSTALL_LIBPNG_CONFIG], 314 [test "$enable_unversioned_libpng_config" != "no"]) 315 316# HOST-SPECIFIC OPTIONS 317# ===================== 318# 319# DEFAULT 320# ======= 321# 322AC_ARG_ENABLE([hardware-optimizations], 323 AS_HELP_STRING([[[--enable-hardware-optimizations]]], 324 [Enable hardware optimizations: =no/off, yes/on.]), 325 [case "$enableval" in 326 no|off) 327 # disable hardware optimization on all systems: 328 enable_arm_neon=no 329 AC_DEFINE([PNG_ARM_NEON_OPT], [0], 330 [Disable ARM_NEON optimizations]) 331 enable_mips_msa=no 332 AC_DEFINE([PNG_MIPS_MSA_OPT], [0], 333 [Disable MIPS_MSA optimizations]) 334 enable_mips_mmi=no 335 AC_DEFINE([PNG_MIPS_MMI_OPT], [0], 336 [Disable MIPS_MMI optimizations]) 337 enable_powerpc_vsx=no 338 AC_DEFINE([PNG_POWERPC_VSX_OPT], [0], 339 [Disable POWERPC VSX optimizations]) 340 enable_intel_sse=no 341 AC_DEFINE([PNG_INTEL_SSE_OPT], [0], 342 [Disable INTEL_SSE optimizations]) 343 enable_loongarch_lsx=no 344 AC_DEFINE([PNG_LOONGARCH_LSX_OPT], [0], 345 [Disable LOONGARCH_LSX optimizations]) 346 ;; 347 *) 348 # allow enabling hardware optimization on any system: 349 case "$host_cpu" in 350 arm*|aarch64*) 351 enable_arm_neon=yes 352 AC_DEFINE([PNG_ARM_NEON_OPT], [2], 353 [Enable ARM_NEON optimizations]) 354 ;; 355 mipsel*|mips64el*) 356 enable_mips_mmi=yes 357 enable_mips_msa=yes 358 AC_DEFINE([PNG_MIPS_MMI_OPT], [1], 359 [Enable MIPS_MMI optimizations]) 360 AC_DEFINE([PNG_MIPS_MSA_OPT], [2], 361 [Enable MIPS_MSA optimizations]) 362 ;; 363 i?86|x86_64) 364 enable_intel_sse=yes 365 AC_DEFINE([PNG_INTEL_SSE_OPT], [1], 366 [Enable Intel SSE optimizations]) 367 ;; 368 powerpc*|ppc64*) 369 enable_powerpc_vsx=yes 370 AC_DEFINE([PNG_POWERPC_VSX_OPT], [2], 371 [Enable POWERPC VSX optimizations]) 372 ;; 373 loongarch*) 374 enable_loongarch_lsx=yes 375 AC_DEFINE([PNG_LOONGARCH_LSX_OPT], [1], 376 [Enable LOONGARCH_LSX optimizations]) 377 ;; 378 esac 379 ;; 380 esac]) 381 382# ARM NEON 383# ======== 384 385AC_ARG_ENABLE([arm-neon], 386 AS_HELP_STRING([[[--enable-arm-neon]]], 387 [Enable ARM NEON optimizations: =no/off, check, api, yes/on.] 388 [no/off: disable the optimizations;] 389 [check: use internal checking code (deprecated and poorly supported);] 390 [api: disable by default, enable by a call to png_set_option;] 391 [yes/on: turn on unconditionally.] 392 [If not specified: determined by the compiler.]), 393 [case "$enableval" in 394 no|off) 395 # disable the default enabling on __ARM_NEON__ systems: 396 AC_DEFINE([PNG_ARM_NEON_OPT], [0], 397 [Disable ARM Neon optimizations]) 398 # Prevent inclusion of the assembler files below: 399 enable_arm_neon=no ;; 400 check) 401 AC_DEFINE([PNG_ARM_NEON_CHECK_SUPPORTED], [], 402 [Check for ARM Neon support at run-time]);; 403 api) 404 AC_DEFINE([PNG_ARM_NEON_API_SUPPORTED], [], 405 [Turn on ARM Neon optimizations at run-time]);; 406 yes|on) 407 AC_DEFINE([PNG_ARM_NEON_OPT], [2], 408 [Enable ARM Neon optimizations]) 409 AC_MSG_WARN([--enable-arm-neon: please specify 'check' or 'api';] 410 [if you want the optimizations unconditionally,] 411 [pass '-mfpu=neon' to the compiler.]);; 412 *) 413 AC_MSG_ERROR([--enable-arm-neon=${enable_arm_neon}:] 414 [invalid argument]) 415 esac]) 416 417# Add ARM-specific files to all builds where $host_cpu is arm ('arm*') or 418# where ARM optimizations were explicitly requested. (This allows a fallback 419# if a future host CPU does not match 'arm*'.) 420 421AM_CONDITIONAL([PNG_ARM_NEON], 422 [test "$enable_arm_neon" != 'no' && 423 case "$host_cpu" in 424 arm*|aarch64*) : ;; 425 *) test "$enable_arm_neon" != '' ;; 426 esac]) 427 428# MIPS MSA 429# ======== 430 431AC_ARG_ENABLE([mips-msa], 432 AS_HELP_STRING([[[--enable-mips-msa]]], 433 [Enable MIPS MSA optimizations: =no/off, check, api, yes/on.] 434 [no/off: disable the optimizations;] 435 [check: use internal checking code (deprecated and poorly supported);] 436 [api: disable by default, enable by a call to png_set_option;] 437 [yes/on: turn on unconditionally.] 438 [If not specified: determined by the compiler.]), 439 [case "$enableval" in 440 no|off) 441 # disable the default enabling on __mips_msa systems: 442 AC_DEFINE([PNG_MIPS_MSA_OPT], [0], 443 [Disable MIPS MSA optimizations]) 444 # Prevent inclusion of the assembler files below: 445 enable_mips_msa=no ;; 446 check) 447 AC_DEFINE([PNG_MIPS_MSA_CHECK_SUPPORTED], [], 448 [Check for MIPS MSA support at run-time]);; 449 api) 450 AC_DEFINE([PNG_MIPS_MSA_API_SUPPORTED], [], 451 [Turn on MIPS MSA optimizations at run-time]);; 452 yes|on) 453 AC_DEFINE([PNG_MIPS_MSA_OPT], [2], 454 [Enable MIPS MSA optimizations]) 455 AC_MSG_WARN([--enable-mips-msa: please specify 'check' or 'api';] 456 [if you want the optimizations unconditionally,] 457 [pass '-mmsa -mfp64' to the compiler.]);; 458 *) 459 AC_MSG_ERROR([--enable-mips-msa=${enable_mips_msa}:] 460 [invalid argument]) 461 esac]) 462 463# Add MIPS-specific files to all builds where $host_cpu is mips ('mips*') or 464# where MIPS optimizations were explicitly requested. (This allows a fallback 465# if a future host CPU does not match 'mips*'.) 466 467AM_CONDITIONAL([PNG_MIPS_MSA], 468 [test "$enable_mips_msa" != 'no' && 469 case "$host_cpu" in 470 mipsel*|mips64el*) : ;; 471 esac]) 472 473# MIPS MMI 474# ======== 475 476AC_ARG_ENABLE([mips-mmi], 477 AS_HELP_STRING([[[--enable-mips-mmi]]], 478 [Enable MIPS MMI optimizations: =no/off, check, api, yes/on.] 479 [no/off: disable the optimizations;] 480 [check: use internal checking code (deprecated and poorly supported);] 481 [api: disable by default, enable by a call to png_set_option;] 482 [yes/on: turn on unconditionally.] 483 [If not specified: determined by the compiler.]), 484 [case "$enableval" in 485 no|off) 486 # disable the default enabling on __mips_mmi systems: 487 AC_DEFINE([PNG_MIPS_MMI_OPT], [0], 488 [Disable MIPS MMI optimizations]) 489 # Prevent inclusion of the assembler files below: 490 enable_mips_mmi=no;; 491 check) 492 AC_DEFINE([PNG_MIPS_MMI_CHECK_SUPPORTED], [], 493 [Check for MIPS MMI support at run-time]);; 494 api) 495 AC_DEFINE([PNG_MIPS_MMI_API_SUPPORTED], [], 496 [Turn on MIPS MMI optimizations at run-time]);; 497 yes|on) 498 AC_DEFINE([PNG_MIPS_MMI_OPT], [1], 499 [Enable MIPS MMI optimizations]) 500 AC_MSG_WARN([--enable-mips-mmi: please specify 'check' or 'api';] 501 [if you want the optimizations unconditionally] 502 [pass '-mloongson-mmi -march=loongson3a' to the compiler.]);; 503 *) 504 AC_MSG_ERROR([--enable-mips-mmi=${enable_mips_mmi}:] 505 [invalid argument]) 506 esac]) 507 508# Add MIPS specific files to all builds where the host_cpu is mips ('mips*') or 509# where MIPS optimizations were explicitly requested. (This allows a fallback 510# if a future host CPU does not match 'mips*'.) 511 512AM_CONDITIONAL([PNG_MIPS_MMI], 513 [test "$enable_mips_mmi" != 'no' && 514 case "$host_cpu" in 515 mipsel*|mips64el*) : ;; 516 esac]) 517 518# INTEL SSE 519# ========= 520 521AC_ARG_ENABLE([intel-sse], 522 AS_HELP_STRING([[[--enable-intel-sse]]], 523 [Enable Intel SSE optimizations: =no/off, yes/on.] 524 [no/off: disable the optimizations;] 525 [yes/on: enable the optimizations.] 526 [If not specified: determined by the compiler.]), 527 [case "$enableval" in 528 no|off) 529 # disable the default enabling: 530 AC_DEFINE([PNG_INTEL_SSE_OPT], [0], 531 [Disable Intel SSE optimizations]) 532 # Prevent inclusion of the assembler files below: 533 enable_intel_sse=no ;; 534 yes|on) 535 AC_DEFINE([PNG_INTEL_SSE_OPT], [1], 536 [Enable Intel SSE optimizations]);; 537 *) 538 AC_MSG_ERROR([--enable-intel-sse=${enable_intel_sse}:] 539 [invalid argument]) 540 esac]) 541 542# Add Intel-specific files to all builds where $host_cpu is Intel ('x86*') or 543# where Intel optimizations were explicitly requested. (This allows a fallback 544# if a future host CPU does not match 'x86*'.) 545AM_CONDITIONAL([PNG_INTEL_SSE], 546 [test "$enable_intel_sse" != 'no' && 547 case "$host_cpu" in 548 i?86|x86_64) : ;; 549 *) test "$enable_intel_sse" != '' ;; 550 esac]) 551 552# POWERPC VSX 553# =========== 554 555AC_ARG_ENABLE([powerpc-vsx], 556AS_HELP_STRING([[[--enable-powerpc-vsx]]], 557 [Enable POWERPC VSX optimizations: =no/off, check, api, yes/on.] 558 [no/off: disable the optimizations;] 559 [check: use internal checking code;] 560 [api: disable by default, enable by a call to png_set_option;] 561 [yes/on: turn on unconditionally.] 562 [If not specified: determined by the compiler.]), 563 [case "$enableval" in 564 no|off) 565 # disable the default enabling on __ppc64__ systems: 566 AC_DEFINE([PNG_POWERPC_VSX_OPT], [0], 567 [Disable POWERPC VSX optimizations]) 568 # Prevent inclusion of the platform-specific files below: 569 enable_powerpc_vsx=no ;; 570 check) 571 AC_DEFINE([PNG_POWERPC_VSX_CHECK_SUPPORTED], [], 572 [Check for POWERPC VSX support at run-time]) 573 AC_MSG_WARN([--enable-powerpc-vsx: please see contrib/powerpc/README] 574 [for the list of supported systems.]);; 575 api) 576 AC_DEFINE([PNG_POWERPC_VSX_API_SUPPORTED], [], 577 [Turn on POWERPC VSX optimizations at run-time]);; 578 yes|on) 579 AC_DEFINE([PNG_POWERPC_VSX_OPT], [2], 580 [Enable POWERPC VSX optimizations]) 581 AC_MSG_WARN([--enable-powerpc-vsx: please specify 'check' or 'api';] 582 [if you want the optimizations unconditionally,] 583 [pass '-maltivec -mvsx' or '-mcpu=power8' to the compiler.]);; 584 *) 585 AC_MSG_ERROR([--enable-powerpc-vsx=${enable_powerpc_vsx}:] 586 [invalid argument]) 587 esac]) 588 589# Add PowerPC-specific files to all builds where $host_cpu is powerpc 590# ('powerpc*') or where PowerPC optimizations were explicitly requested. 591# (This allows a fallback if a future host CPU does not match 'powerpc*'.) 592 593AM_CONDITIONAL([PNG_POWERPC_VSX], 594 [test "$enable_powerpc_vsx" != 'no' && 595 case "$host_cpu" in 596 powerpc*|ppc64*) : ;; 597 esac]) 598 599# LOONGARCH LSX 600# ============= 601 602AC_ARG_ENABLE([loongarch-lsx], 603 AS_HELP_STRING([[[--enable-loongarch-lsx]]], 604 [Enable LOONGARCH LSX optimizations: =no/off, yes/on:] 605 [no/off: disable the optimizations;] 606 [yes/on: turn on unconditionally.] 607 [If not specified: determined by the compiler.]), 608 [case "$enableval" in 609 no|off) 610 # disable the default enabling on __loongarch_simd systems: 611 AC_DEFINE([PNG_LOONGARCH_LSX_OPT], [0], 612 [Disable LOONGARCH LSX optimizations]) 613 # Prevent inclusion of the assembler files below: 614 enable_loongarch_lsx=no;; 615 yes|on) 616 AC_DEFINE([PNG_LOONGARCH_LSX_OPT], [1], 617 [Enable LOONGARCH LSX optimizations]) 618 ;; 619 *) 620 AC_MSG_ERROR([--enable-loongarch-lsx=${enable_loongarch_lsx}:] 621 [invalid argument]) 622 esac]) 623 624if test "$enable_loongarch_lsx" != "no" && 625 case "$host_cpu" in 626 loongarch*) : ;; 627 *) test "$enable_loongarch_lsx" != '' ;; 628 esac 629then 630 compiler_support_loongarch_lsx=no 631 AC_MSG_CHECKING(whether to use LoongArch LSX intrinsics) 632 save_CFLAGS="$CFLAGS" 633 LSX_CFLAGS="${LSX_CFLAGS:-"-mlsx"}" 634 CFLAGS="$CFLAGS $LSX_CFLAGS" 635 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ 636#include <lsxintrin.h> 637int main(){ 638 __m128i a, b, c; 639 a = __lsx_vadd_w(b, c); 640 return 0; 641}]])],compiler_support_loongarch_lsx=yes) 642 CFLAGS="$save_CFLAGS" 643 AC_MSG_RESULT($compiler_support_loongarch_lsx) 644 if test "$compiler_support_loongarch_lsx" = "yes"; then 645 AC_DEFINE([PNG_LOONGARCH_LSX_OPT], [1], 646 [Enable LOONGARCH LSX optimizations]) 647 else 648 AC_MSG_WARN([Compiler does not support loongarch LSX.]) 649 fi 650fi 651 652# Add LoongArch specific files to all builds where the host_cpu is loongarch 653# ('loongarch*') or where LoongArch optimizations were explicitly requested. 654# (This allows a fallback if a future host CPU does not match 'loongarch*'.) 655 656AM_CONDITIONAL([PNG_LOONGARCH_LSX], 657 [test "$enable_loongarch_lsx" != "no" && 658 test "$compiler_support_loongarch_lsx" = "yes" && 659 case "$host_cpu" in 660 loongarch*) : ;; 661 *) test "$enable_loongarch_lsx" != '' ;; 662 esac]) 663 664AC_MSG_NOTICE([[Extra options for compiler: $PNG_COPTS]]) 665 666# Config files, substituting as above 667AC_CONFIG_FILES([Makefile libpng.pc:libpng.pc.in]) 668AC_CONFIG_FILES([libpng-config:libpng-config.in], 669 [chmod +x libpng-config]) 670 671AC_OUTPUT 672