• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# configure.ac
2
3# Copyright (c) 2018-2022 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.39],[png-mng-implement@lists.sourceforge.net])
29AC_CONFIG_MACRO_DIR([scripts])
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.39
50PNGLIB_MAJOR=1
51PNGLIB_MINOR=6
52PNGLIB_RELEASE=39
53
54dnl End of version number stuff
55
56AC_CONFIG_SRCDIR([pngget.c])
57AC_CONFIG_HEADERS([config.h])
58
59# Checks for 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
75# Some awks crash when confronted with pnglibconf.dfa, do a test run now
76# to make sure this doesn't happen
77AC_MSG_CHECKING([that AWK works])
78if ${AWK} -f ${srcdir}/scripts/options.awk out="/dev/null" version=search\
79   ${srcdir}/pngconf.h ${srcdir}/scripts/pnglibconf.dfa\
80   ${srcdir}/pngusr.dfa 1>&2
81then
82   AC_MSG_RESULT([ok])
83else
84   AC_MSG_FAILURE([failed], 1)
85fi
86
87# This is a remnant of the old cc -E validation, where it may have been
88# necessary to use a different preprocessor for .dfn files
89DFNCPP="$CPP"
90AC_SUBST(DFNCPP)
91
92# -Werror cannot be passed to GCC in CFLAGS because configure will fail
93# (it checks the compiler with a program that generates a warning).
94# Add the following option to deal with this:
95AC_ARG_VAR(PNG_COPTS,
96   [additional flags for the C compiler, use this for options that would]
97   [cause configure itself to fail])
98AC_ARG_ENABLE(werror,
99   AS_HELP_STRING([[[--enable-werror[=OPT]]]],
100      [Pass -Werror or the given argument to the compiler if it is supported]),
101   [test "$enable_werror" = "yes" && enable_werror="-Werror"
102    if test "$enable_werror" != "no"; then
103      sav_CFLAGS="$CFLAGS"
104      CFLAGS="$enable_werror $CFLAGS"
105      AC_MSG_CHECKING([if the compiler allows $enable_werror])
106      AC_COMPILE_IFELSE(
107         [AC_LANG_SOURCE([
108            [int main(int argc, char **argv){]
109            [return argv[argc-1][0];]
110            [}]])],
111         AC_MSG_RESULT(yes)
112         PNG_COPTS="$PNG_COPTS $enable_werror",
113         AC_MSG_RESULT(no))
114      CFLAGS="$sav_CFLAGS"
115    fi],)
116
117# For GCC 5 the default mode for C is -std=gnu11 instead of -std=gnu89.
118# In pngpriv.h we request just the POSIX 1003.1 and C89 APIs by defining
119# _POSIX_SOURCE to 1. This is incompatible with the new default mode, so
120# we test for that and force the "-std=c89" compiler option:
121AC_MSG_CHECKING([if we need to force back C standard to C89])
122AC_COMPILE_IFELSE(
123   [AC_LANG_PROGRAM([
124      [#define _POSIX_SOURCE 1]
125      [#include <stdio.h>]
126   ])],
127   AC_MSG_RESULT(no),[
128      if test "x$GCC" != "xyes"; then
129         AC_MSG_ERROR(
130            [Forcing back to C89 is required but the flags are only known for GCC])
131      fi
132   AC_MSG_RESULT(yes)
133   CFLAGS="$CFLAGS -std=c89"
134])
135
136# Checks for structures and compiler characteristics.
137AC_STRUCT_TM
138AC_C_RESTRICT
139
140# Checks for library functions.
141AC_CHECK_FUNCS([pow], ,
142  [AC_CHECK_LIB([m], [pow], , [AC_MSG_ERROR([cannot find pow])])])
143
144# Some later POSIX 1003.1 functions are required for test programs, failure
145# here is soft (the corresponding test program is not built).
146AC_CHECK_FUNC([clock_gettime], , [AC_MSG_WARN([not building timepng])])
147AM_CONDITIONAL([HAVE_CLOCK_GETTIME], [test "$ac_cv_func_clock_gettime" = "yes"])
148
149AC_ARG_WITH(zlib-prefix,
150   AS_HELP_STRING([[[--with-zlib-prefix]]],
151      [prefix that may have been used in installed zlib]),
152      [ZPREFIX=${withval}],
153      [ZPREFIX='z_'])
154AC_CHECK_LIB([z], [zlibVersion], ,
155  [AC_CHECK_LIB([z], [${ZPREFIX}zlibVersion], ,
156     [AC_MSG_ERROR([zlib not installed])])])
157
158# The following is for pngvalid, to ensure it catches FP errors even on
159# platforms that don't enable FP exceptions, the function appears in the math
160# library (typically), it's not an error if it is not found.
161AC_CHECK_LIB([m], [feenableexcept])
162AC_CHECK_FUNCS([feenableexcept])
163
164AC_MSG_CHECKING([if using Solaris linker])
165SLD=`$LD --version 2>&1 | grep Solaris`
166if test "$SLD"; then
167    have_solaris_ld=yes
168    AC_MSG_RESULT(yes)
169else
170    have_solaris_ld=no
171    AC_MSG_RESULT(no)
172fi
173AM_CONDITIONAL(HAVE_SOLARIS_LD, test "$have_solaris_ld" = "yes")
174
175AC_MSG_CHECKING([if libraries can be versioned])
176# Special case for PE/COFF platforms: ld reports
177# support for version-script, but doesn't actually
178# DO anything with it.
179case $host in
180*cygwin* | *mingw32* | *interix* )
181    have_ld_version_script=no
182    AC_MSG_RESULT(no)
183;;
184* )
185
186if test "$have_solaris_ld" = "yes"; then
187    GLD=`$LD --help < /dev/null 2>&1 | grep 'M mapfile'`
188else
189    GLD=`$LD --help < /dev/null 2>/dev/null | grep version-script`
190fi
191
192if test "$GLD"; then
193    have_ld_version_script=yes
194    AC_MSG_RESULT(yes)
195else
196    have_ld_version_script=no
197    AC_MSG_RESULT(no)
198    AC_MSG_WARN(*** You have not enabled versioned symbols.)
199fi
200;;
201esac
202
203AM_CONDITIONAL(HAVE_LD_VERSION_SCRIPT, test "$have_ld_version_script" = "yes")
204
205if test "$have_ld_version_script" = "yes"; then
206    AC_MSG_CHECKING([for symbol prefix])
207    SYMBOL_PREFIX=`echo "PREFIX=__USER_LABEL_PREFIX__" \
208                  | ${CPP-${CC-gcc} -E} - 2>&1 \
209                  | ${EGREP-grep} "^PREFIX=" \
210                  | ${SED-sed} -e "s:^PREFIX=::" -e "s:__USER_LABEL_PREFIX__::"`
211    AC_SUBST(SYMBOL_PREFIX)
212    AC_MSG_RESULT($SYMBOL_PREFIX)
213fi
214
215# Substitutions for .in files
216AC_SUBST(PNGLIB_VERSION)
217AC_SUBST(PNGLIB_MAJOR)
218AC_SUBST(PNGLIB_MINOR)
219AC_SUBST(PNGLIB_RELEASE)
220
221# Additional arguments (and substitutions)
222# Allow the pkg-config directory to be set
223AC_ARG_WITH(pkgconfigdir,
224   AS_HELP_STRING([[[--with-pkgconfigdir]]],
225      [Use the specified pkgconfig dir (default is libdir/pkgconfig)]),
226   [pkgconfigdir=${withval}],
227   [pkgconfigdir='${libdir}/pkgconfig'])
228
229AC_SUBST([pkgconfigdir])
230AC_MSG_NOTICE([[pkgconfig directory is ${pkgconfigdir}]])
231
232# Make the *-config binary config scripts optional
233AC_ARG_WITH(binconfigs,
234   AS_HELP_STRING([[[--with-binconfigs]]],
235      [Generate shell libpng-config scripts as well as pkg-config data]
236      [@<:@default=yes@:>@]),
237   [if test "${withval}" = no; then
238      binconfigs=
239      AC_MSG_NOTICE([[libpng-config scripts will not be built]])
240    else
241      binconfigs='${binconfigs}'
242    fi],
243   [binconfigs='${binconfigs}'])
244AC_SUBST([binconfigs])
245
246# Support for prefixes to the API function names; this will generate defines
247# at the start of the build to rename exported library functions
248AC_ARG_WITH(libpng-prefix,
249   AS_HELP_STRING([[[--with-libpng-prefix]]],
250      [prefix libpng exported function (API) names with the given value]),
251   [if test "${withval:-no}" != "no"; then
252      AC_SUBST([PNG_PREFIX], [${withval}])
253    fi])
254AM_CONDITIONAL([DO_PNG_PREFIX], [test "${with_libpng_prefix:-no}" != "no"])
255
256# Control over what links are made for installed files.  Versioned files are
257# always installed, when the following options are turned on corresponding
258# unversioned links are also created (normally as symbolic links):
259AC_ARG_ENABLE([unversioned-links],
260   AS_HELP_STRING([[[--enable-unversioned-links]]],
261      [Installed libpng header files are placed in a versioned subdirectory]
262      [and installed libpng library (including DLL) files are versioned.]
263      [If this option is enabled unversioned links will be created pointing to]
264      [the corresponding installed files.  If you use libpng.pc or]
265      [libpng-config for all builds you do not need these links, but if you]
266      [compile programs directly they will typically #include <png.h> and]
267      [link with -lpng; in that case you need the links.]
268      [The links can be installed manually using 'make install-header-links']
269      [and 'make install-library-links' and can be removed using the]
270      [corresponding uninstall- targets.  If you do enable this option every]
271      [libpng 'make install' will recreate the links to point to the just]
272      [installed version of libpng.  The default is to create the links;]
273      [use --disable-unversioned-links to change this]))
274
275# The AM_CONDITIONAL test is written so that the default is enabled;
276# --disable-unversioned-links must be given to turn the option off.
277AM_CONDITIONAL([DO_INSTALL_LINKS],[test "$enable_unversioned_links" != "no"])
278
279AC_ARG_ENABLE([unversioned-libpng-pc],
280   AS_HELP_STRING([[[--enable-unversioned-libpng-pc]]],
281      [Install the configuration file 'libpng.pc' as a link to the versioned]
282      [version.  This is done by default - use --disable-unversioned-libpng-pc]
283      [to change this.]))
284AM_CONDITIONAL([DO_INSTALL_LIBPNG_PC],
285   [test "$enable_unversioned_libpng_pc" != "no"])
286
287AC_ARG_ENABLE([unversioned-libpng-config],
288   AS_HELP_STRING([[[--enable-unversioned-libpng-config]]],
289      [Install the configuration file 'libpng-config' as a link to the]
290      [versioned version.  This is done by default - use]
291      [--disable-unversioned-libpng-config to change this.]))
292AM_CONDITIONAL([DO_INSTALL_LIBPNG_CONFIG],
293   [test "$enable_unversioned_libpng_config" != "no"])
294
295# HOST-SPECIFIC OPTIONS
296# =====================
297#
298# DEFAULT
299# =======
300#
301AC_ARG_ENABLE([hardware-optimizations],
302   AS_HELP_STRING([[[--enable-hardware-optimizations]]],
303      [Enable hardware optimizations: =no/off, yes/on:]),
304   [case "$enableval" in
305      no|off)
306         # disable hardware optimization on all systems:
307         enable_arm_neon=no
308         AC_DEFINE([PNG_ARM_NEON_OPT], [0],
309           [Disable ARM_NEON optimizations])
310         enable_mips_msa=no
311         AC_DEFINE([PNG_MIPS_MSA_OPT], [0],
312           [Disable MIPS_MSA optimizations])
313         enable_powerpc_vsx=no
314         AC_DEFINE([PNG_POWERPC_VSX_OPT], [0],
315           [Disable POWERPC VSX optimizations])
316         enable_intel_sse=no
317         AC_DEFINE([PNG_INTEL_SSE_OPT], [0],
318           [Disable INTEL_SSE optimizations])
319         ;;
320      *)
321         # allow enabling hardware optimization on any system:
322         case "$host_cpu" in
323            arm*|aarch64*)
324              enable_arm_neon=yes
325              AC_DEFINE([PNG_ARM_NEON_OPT], [2],
326                [Enable ARM_NEON optimizations])
327              ;;
328            mipsel*|mips64el*)
329              enable_mips_msa=yes
330              AC_DEFINE([PNG_MIPS_MSA_OPT], [2],
331                [Enable MIPS_MSA optimizations])
332              ;;
333            i?86|x86_64)
334              enable_intel_sse=yes
335              AC_DEFINE([PNG_INTEL_SSE_OPT], [1],
336                [Enable Intel SSE optimizations])
337              ;;
338            powerpc*|ppc64*)
339              enable_powerpc_vsx=yes
340              AC_DEFINE([PNG_POWERPC_VSX_OPT], [2],
341                [Enable POWERPC VSX optimizations])
342              ;;
343         esac
344         ;;
345   esac])
346
347# ARM
348# ===
349#
350# ARM NEON (SIMD) support.
351
352AC_ARG_ENABLE([arm-neon],
353   AS_HELP_STRING([[[--enable-arm-neon]]],
354      [Enable ARM NEON optimizations: =no/off, check, api, yes/on:]
355      [no/off: disable the optimizations; check: use internal checking code]
356      [(deprecated and poorly supported); api: disable by default, enable by]
357      [a call to png_set_option; yes/on: turn on unconditionally.]
358      [If not specified: determined by the compiler.]),
359   [case "$enableval" in
360      no|off)
361         # disable the default enabling on __ARM_NEON__ systems:
362         AC_DEFINE([PNG_ARM_NEON_OPT], [0],
363                   [Disable ARM Neon optimizations])
364         # Prevent inclusion of the assembler files below:
365         enable_arm_neon=no ;;
366      check)
367         AC_DEFINE([PNG_ARM_NEON_CHECK_SUPPORTED], [],
368                   [Check for ARM Neon support at run-time]);;
369      api)
370         AC_DEFINE([PNG_ARM_NEON_API_SUPPORTED], [],
371                   [Turn on ARM Neon optimizations at run-time]);;
372      yes|on)
373         AC_DEFINE([PNG_ARM_NEON_OPT], [2],
374                   [Enable ARM Neon optimizations])
375         AC_MSG_WARN([--enable-arm-neon: please specify 'check' or 'api', if]
376            [you want the optimizations unconditionally pass -mfpu=neon]
377            [to the compiler.]);;
378      *)
379         AC_MSG_ERROR([--enable-arm-neon=${enable_arm_neon}: invalid value])
380   esac])
381
382# Add ARM-specific files to all builds where $host_cpu is arm ('arm*') or
383# where ARM optimizations were explicitly requested (this allows a fallback
384# if a future host CPU does not match 'arm*')
385
386AM_CONDITIONAL([PNG_ARM_NEON],
387   [test "$enable_arm_neon" != 'no' &&
388    case "$host_cpu" in
389      arm*|aarch64*) : ;;
390      *)    test "$enable_arm_neon" != '' ;;
391    esac])
392
393# MIPS
394# ====
395#
396# MIPS MSA (SIMD) support.
397
398AC_ARG_ENABLE([mips-msa],
399   AS_HELP_STRING([[[--enable-mips-msa]]],
400      [Enable MIPS MSA optimizations: =no/off, check, api, yes/on:]
401      [no/off: disable the optimizations; check: use internal checking code]
402      [(deprecated and poorly supported); api: disable by default, enable by]
403      [a call to png_set_option; yes/on: turn on unconditionally.]
404      [If not specified: determined by the compiler.]),
405   [case "$enableval" in
406      no|off)
407         # disable the default enabling on __mips_msa systems:
408         AC_DEFINE([PNG_MIPS_MSA_OPT], [0],
409                   [Disable MIPS MSA optimizations])
410         # Prevent inclusion of the assembler files below:
411         enable_mips_msa=no ;;
412      check)
413         AC_DEFINE([PNG_MIPS_MSA_CHECK_SUPPORTED], [],
414                   [Check for MIPS MSA support at run-time]);;
415      api)
416         AC_DEFINE([PNG_MIPS_MSA_API_SUPPORTED], [],
417                   [Turn on MIPS MSA optimizations at run-time]);;
418      yes|on)
419         AC_DEFINE([PNG_MIPS_MSA_OPT], [2],
420                   [Enable MIPS MSA optimizations])
421         AC_MSG_WARN([--enable-mips-msa: please specify 'check' or 'api', if]
422            [you want the optimizations unconditionally pass '-mmsa -mfp64']
423            [to the compiler.]);;
424      *)
425         AC_MSG_ERROR([--enable-mips-msa=${enable_mips_msa}: invalid value])
426   esac])
427
428# Add MIPS-specific files to all builds where $host_cpu is mips ('mips*') or
429# where MIPS optimizations were explicitly requested (this allows a fallback
430# if a future host CPU does not match 'mips*')
431
432AM_CONDITIONAL([PNG_MIPS_MSA],
433   [test "$enable_mips_msa" != 'no' &&
434    case "$host_cpu" in
435      mipsel*|mips64el*) : ;;
436    esac])
437
438# INTEL
439# =====
440#
441# INTEL SSE (SIMD) support.
442
443AC_ARG_ENABLE([intel-sse],
444   AS_HELP_STRING([[[--enable-intel-sse]]],
445      [Enable Intel SSE optimizations: =no/off, yes/on:]
446      [no/off: disable the optimizations;]
447      [yes/on: enable the optimizations.]
448      [If not specified: determined by the compiler.]),
449   [case "$enableval" in
450      no|off)
451         # disable the default enabling:
452         AC_DEFINE([PNG_INTEL_SSE_OPT], [0],
453                   [Disable Intel SSE optimizations])
454         # Prevent inclusion of the assembler files below:
455         enable_intel_sse=no ;;
456      yes|on)
457         AC_DEFINE([PNG_INTEL_SSE_OPT], [1],
458                   [Enable Intel SSE optimizations]);;
459      *)
460         AC_MSG_ERROR([--enable-intel-sse=${enable_intel_sse}: invalid value])
461   esac])
462
463# Add Intel-specific files to all builds where $host_cpu is Intel ('x86*') or
464# where Intel optimizations were explicitly requested (this allows a fallback
465# if a future host CPU does not match 'x86*')
466AM_CONDITIONAL([PNG_INTEL_SSE],
467   [test "$enable_intel_sse" != 'no' &&
468    case "$host_cpu" in
469      i?86|x86_64) : ;;
470      *)    test "$enable_intel_sse" != '' ;;
471    esac])
472
473# PowerPC
474# =======
475#
476# PowerPC VSX (SIMD) support.
477
478AC_ARG_ENABLE([powerpc-vsx],
479AS_HELP_STRING([[[--enable-powerpc-vsx]]],
480      [Enable POWERPC VSX optimizations: =no/off, check, api, yes/on:]
481      [no/off: disable the optimizations; check: use internal checking code]
482      [api: disable by default, enable by a call to png_set_option]
483      [yes/on: turn on unconditionally.]
484      [If not specified: determined by the compiler.]),
485   [case "$enableval" in
486      no|off)
487         # disable the default enabling on __ppc64__ systems:
488         AC_DEFINE([PNG_POWERPC_VSX_OPT], [0],
489                   [Disable POWERPC VSX optimizations])
490         # Prevent inclusion of the platform-specific files below:
491         enable_powerpc_vsx=no ;;
492      check)
493         AC_DEFINE([PNG_POWERPC_VSX_CHECK_SUPPORTED], [],
494                   [Check for POWERPC VSX support at run-time])
495         AC_MSG_WARN([--enable-powerpc-vsx Please check contrib/powerpc/README file]
496            [for the list of supported OSes.]);;
497      api)
498         AC_DEFINE([PNG_POWERPC_VSX_API_SUPPORTED], [],
499                   [Turn on POWERPC VSX optimizations at run-time]);;
500      yes|on)
501         AC_DEFINE([PNG_POWERPC_VSX_OPT], [2],
502                   [Enable POWERPC VSX optimizations])
503         AC_MSG_WARN([--enable-powerpc-vsx: please specify 'check' or 'api', if]
504            [you want the optimizations unconditionally pass '-maltivec -mvsx']
505            [or '-mcpu=power8' to the compiler.]);;
506      *)
507         AC_MSG_ERROR([--enable-powerpc-vsx=${enable_powerpc_vsx}: invalid value])
508   esac])
509
510# Add PowerPC-specific files to all builds where $host_cpu is powerpc('powerpc*')
511# or where PowerPC optimizations were explicitly requested (this allows a fallback
512# if a future host CPU does not match 'powerpc*')
513
514AM_CONDITIONAL([PNG_POWERPC_VSX],
515   [test "$enable_powerpc_vsx" != 'no' &&
516    case "$host_cpu" in
517      powerpc*|ppc64*) : ;;
518    esac])
519
520AC_MSG_NOTICE([[Extra options for compiler: $PNG_COPTS]])
521
522# Config files, substituting as above
523AC_CONFIG_FILES([Makefile libpng.pc:libpng.pc.in])
524AC_CONFIG_FILES([libpng-config:libpng-config.in],
525   [chmod +x libpng-config])
526
527AC_OUTPUT
528