acinclude.m40000664000175000017500000000551714751072121012541 0ustar janla64janla64# acinclude.m4 #************************************************************************ # # Part of the dvipng distribution # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as # published by the Free Software Foundation, either version 3 of the # License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this program. If not, see # . # # Copyright (C) 2002-2015,2019 Jan-Ã…ke Larsson # #************************************************************************ dnl dnl MAKEINFO_CHECK_MACRO( MACRO, [ACTION-IF-FOUND dnl [, ACTION-IF-NOT-FOUND]]) dnl AC_DEFUN([MAKEINFO_CHECK_MACRO], [if test -n "$MAKEINFO" -a "$makeinfo" != ":"; then AC_MSG_CHECKING([for @$1{}]) echo \\\\input texinfo > conftest.texi echo @$1{test} >> conftest.texi if $MAKEINFO conftest.texi > /dev/null 2> /dev/null; then AC_MSG_RESULT(yes) ifelse([$2], , :, [$2]) else AC_MSG_RESULT(no) ifelse([$3], , :, [$3]) fi rm -f conftest.texi conftest.info fi ]) dnl dnl MAKEINFO_CHECK_MACROS( MACRO ... [, ACTION-IF-FOUND dnl [, ACTION-IF-NOT-FOUND]]) dnl AC_DEFUN([MAKEINFO_CHECK_MACROS], [for ac_macro in $1; do MAKEINFO_CHECK_MACRO($ac_macro, $2, [MAKEINFO_MACROS="-D no-$ac_macro $MAKEINFO_MACROS" $3])dnl done AC_SUBST(MAKEINFO_MACROS) ]) dnl dnl Check for enc, cmap, sfd formats dnl AC_DEFUN([AC_HAS_KPSE_ENC_FORMATS], [AC_MSG_CHECKING([for kpse_enc_format]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include #include ]], [[kpse_enc_format;kpse_cmap_format;kpse_sfd_format]])],[AC_MSG_RESULT(yes) AC_DEFINE(HAVE_KPSE_ENC_FORMATS, 1, [Define to 1 if your kpathsea has kpse_enc_format])],[AC_MSG_RESULT(no)])]) dnl dnl Check devices for GS dnl AC_GS_HAS_DEVICE(DEVICE,ACTION-IF-FAILED) dnl AC_DEFUN([AC_GS_HAS_DEVICE], [AC_MSG_CHECKING([whether $GS has the $1 device]) if $GS -h | grep $1 >/dev/null; then AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) $2 fi ]) dnl dnl GS_CHECK_DEVICES dnl AC_DEFUN([GS_CHECK_DEVICES], [GS_WARN="" AC_GS_HAS_DEVICE(pngalpha, [GS_WARN="Your EPS inclusions will be cropped to the boundingbox, and rendered on an opaque background. Upgrade GhostScript to avoid this." AC_GS_HAS_DEVICE(png16m, [GS_WARN="Your EPS inclusions may not work. Upgrade/install GhostScript to avoid this."])]) if test -n "$GS_WARN"; then AC_MSG_WARN([$GS_WARN]) fi ]) aclocal.m40000664000175000017500000003216514747712062012221 0ustar janla64janla64# generated automatically by aclocal 1.16.5 -*- Autoconf -*- # Copyright (C) 1996-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) # pkg.m4 - Macros to locate and use pkg-config. -*- Autoconf -*- # serial 12 (pkg-config-0.29.2) dnl Copyright © 2004 Scott James Remnant . dnl Copyright © 2012-2015 Dan Nicholson dnl dnl This program is free software; you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by dnl the Free Software Foundation; either version 2 of the License, or dnl (at your option) any later version. dnl dnl This program is distributed in the hope that it will be useful, but dnl WITHOUT ANY WARRANTY; without even the implied warranty of dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU dnl General Public License for more details. dnl dnl You should have received a copy of the GNU General Public License dnl along with this program; if not, write to the Free Software dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA dnl 02111-1307, USA. dnl dnl As a special exception to the GNU General Public License, if you dnl distribute this file as part of a program that contains a dnl configuration script generated by Autoconf, you may include it under dnl the same distribution terms that you use for the rest of that dnl program. dnl PKG_PREREQ(MIN-VERSION) dnl ----------------------- dnl Since: 0.29 dnl dnl Verify that the version of the pkg-config macros are at least dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's dnl installed version of pkg-config, this checks the developer's version dnl of pkg.m4 when generating configure. dnl dnl To ensure that this macro is defined, also add: dnl m4_ifndef([PKG_PREREQ], dnl [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])]) dnl dnl See the "Since" comment for each macro you use to see what version dnl of the macros you require. m4_defun([PKG_PREREQ], [m4_define([PKG_MACROS_VERSION], [0.29.2]) m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1, [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])]) ])dnl PKG_PREREQ dnl PKG_PROG_PKG_CONFIG([MIN-VERSION]) dnl ---------------------------------- dnl Since: 0.16 dnl dnl Search for the pkg-config tool and set the PKG_CONFIG variable to dnl first found in the path. Checks that the version of pkg-config found dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is dnl used since that's the first version where most current features of dnl pkg-config existed. AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi[]dnl ])dnl PKG_PROG_PKG_CONFIG dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl ------------------------------------------------------------------- dnl Since: 0.18 dnl dnl Check to see whether a particular set of modules exists. Similar to dnl PKG_CHECK_MODULES(), but does not set variables or print errors. dnl dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) dnl only at the first occurrence in configure.ac, so if the first place dnl it's called might be skipped (such as if it is within an "if", you dnl have to call PKG_CHECK_EXISTS manually AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_default([$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) dnl --------------------------------------------- dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting dnl pkg_failed based on the result. m4_define([_PKG_CONFIG], [if test -n "$$1"; then pkg_cv_[]$1="$$1" elif test -n "$PKG_CONFIG"; then PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) else pkg_failed=untried fi[]dnl ])dnl _PKG_CONFIG dnl _PKG_SHORT_ERRORS_SUPPORTED dnl --------------------------- dnl Internal check to see if pkg-config supports short errors. AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ])dnl _PKG_SHORT_ERRORS_SUPPORTED dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], dnl [ACTION-IF-NOT-FOUND]) dnl -------------------------------------------------------------- dnl Since: 0.4.0 dnl dnl Note that if there is a possibility the first call to dnl PKG_CHECK_MODULES might not happen, you should be sure to include an dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $2]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then AC_MSG_RESULT([no]) _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` else $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD m4_default([$4], [AC_MSG_ERROR( [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT])[]dnl ]) elif test $pkg_failed = untried; then AC_MSG_RESULT([no]) m4_default([$4], [AC_MSG_FAILURE( [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see .])[]dnl ]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) $3 fi[]dnl ])dnl PKG_CHECK_MODULES dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], dnl [ACTION-IF-NOT-FOUND]) dnl --------------------------------------------------------------------- dnl Since: 0.29 dnl dnl Checks for existence of MODULES and gathers its build flags with dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags dnl and VARIABLE-PREFIX_LIBS from --libs. dnl dnl Note that if there is a possibility the first call to dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to dnl include an explicit call to PKG_PROG_PKG_CONFIG in your dnl configure.ac. AC_DEFUN([PKG_CHECK_MODULES_STATIC], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl _save_PKG_CONFIG=$PKG_CONFIG PKG_CONFIG="$PKG_CONFIG --static" PKG_CHECK_MODULES($@) PKG_CONFIG=$_save_PKG_CONFIG[]dnl ])dnl PKG_CHECK_MODULES_STATIC dnl PKG_INSTALLDIR([DIRECTORY]) dnl ------------------------- dnl Since: 0.27 dnl dnl Substitutes the variable pkgconfigdir as the location where a module dnl should install pkg-config .pc files. By default the directory is dnl $libdir/pkgconfig, but the default can be changed by passing dnl DIRECTORY. The user can override through the --with-pkgconfigdir dnl parameter. AC_DEFUN([PKG_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([pkgconfigdir], [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],, [with_pkgconfigdir=]pkg_default) AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ])dnl PKG_INSTALLDIR dnl PKG_NOARCH_INSTALLDIR([DIRECTORY]) dnl -------------------------------- dnl Since: 0.27 dnl dnl Substitutes the variable noarch_pkgconfigdir as the location where a dnl module should install arch-independent pkg-config .pc files. By dnl default the directory is $datadir/pkgconfig, but the default can be dnl changed by passing DIRECTORY. The user can override through the dnl --with-noarch-pkgconfigdir parameter. AC_DEFUN([PKG_NOARCH_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([noarch-pkgconfigdir], [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],, [with_noarch_pkgconfigdir=]pkg_default) AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ])dnl PKG_NOARCH_INSTALLDIR dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl ------------------------------------------- dnl Since: 0.28 dnl dnl Retrieves the value of the pkg-config variable for the given module. AC_DEFUN([PKG_CHECK_VAR], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl _PKG_CONFIG([$1], [variable="][$3]["], [$2]) AS_VAR_COPY([$1], [pkg_cv_][$1]) AS_VAR_IF([$1], [""], [$5], [$4])dnl ])dnl PKG_CHECK_VAR dnl PKG_WITH_MODULES(VARIABLE-PREFIX, MODULES, dnl [ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND], dnl [DESCRIPTION], [DEFAULT]) dnl ------------------------------------------ dnl dnl Prepare a "--with-" configure option using the lowercase dnl [VARIABLE-PREFIX] name, merging the behaviour of AC_ARG_WITH and dnl PKG_CHECK_MODULES in a single macro. AC_DEFUN([PKG_WITH_MODULES], [ m4_pushdef([with_arg], m4_tolower([$1])) m4_pushdef([description], [m4_default([$5], [build with ]with_arg[ support])]) m4_pushdef([def_arg], [m4_default([$6], [auto])]) m4_pushdef([def_action_if_found], [AS_TR_SH([with_]with_arg)=yes]) m4_pushdef([def_action_if_not_found], [AS_TR_SH([with_]with_arg)=no]) m4_case(def_arg, [yes],[m4_pushdef([with_without], [--without-]with_arg)], [m4_pushdef([with_without],[--with-]with_arg)]) AC_ARG_WITH(with_arg, AS_HELP_STRING(with_without, description[ @<:@default=]def_arg[@:>@]),, [AS_TR_SH([with_]with_arg)=def_arg]) AS_CASE([$AS_TR_SH([with_]with_arg)], [yes],[PKG_CHECK_MODULES([$1],[$2],$3,$4)], [auto],[PKG_CHECK_MODULES([$1],[$2], [m4_n([def_action_if_found]) $3], [m4_n([def_action_if_not_found]) $4])]) m4_popdef([with_arg]) m4_popdef([description]) m4_popdef([def_arg]) ])dnl PKG_WITH_MODULES dnl PKG_HAVE_WITH_MODULES(VARIABLE-PREFIX, MODULES, dnl [DESCRIPTION], [DEFAULT]) dnl ----------------------------------------------- dnl dnl Convenience macro to trigger AM_CONDITIONAL after PKG_WITH_MODULES dnl check._[VARIABLE-PREFIX] is exported as make variable. AC_DEFUN([PKG_HAVE_WITH_MODULES], [ PKG_WITH_MODULES([$1],[$2],,,[$3],[$4]) AM_CONDITIONAL([HAVE_][$1], [test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"]) ])dnl PKG_HAVE_WITH_MODULES dnl PKG_HAVE_DEFINE_WITH_MODULES(VARIABLE-PREFIX, MODULES, dnl [DESCRIPTION], [DEFAULT]) dnl ------------------------------------------------------ dnl dnl Convenience macro to run AM_CONDITIONAL and AC_DEFINE after dnl PKG_WITH_MODULES check. HAVE_[VARIABLE-PREFIX] is exported as make dnl and preprocessor variable. AC_DEFUN([PKG_HAVE_DEFINE_WITH_MODULES], [ PKG_HAVE_WITH_MODULES([$1],[$2],[$3],[$4]) AS_IF([test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"], [AC_DEFINE([HAVE_][$1], 1, [Enable ]m4_tolower([$1])[ support])]) ])dnl PKG_HAVE_DEFINE_WITH_MODULES m4_include([acinclude.m4]) ChangeLog0000664000175000017500000007401014747705002012122 0ustar janla64janla642025-02-02 Jan-Åke Larsson Release 1.18 2025-02-02 Jan-Åke Larsson Adapt to autoconf 2.71 2025-02-02 Jan-Åke Larsson Do not try to render Postscript special that only is PS comments 2025-02-02 Jan-Åke Larsson Fix division by zero error if DVI magnification too large 2021-03-13 Jan-Åke Larsson Prevent division-by-zero, and make image-file not found error message more informative 2020-01-05 Jan-Åke Larsson Release 1.17 2019-11-29 Jan-Åke Larsson Fix typo that cause PK files to fail 2019-07-03 Jan-Åke Larsson Fix format for gamma interactive printout. Add credit. 2019-07-01 Jan-Åke Larsson Fix segfault when starting interactive mode without DVI. Thanks to Ahzo for finding the issue. 2019-06-29 Jan-Åke Larsson Revert change for acinclude.m4, and add test for strncasecmp 2019-06-27 Jan-Åke Larsson Remove segfault for invalid color names 2019-04-06 Jan-Åke Larsson Release 1.16 2019-04-06 Jan-Åke Larsson Check for a possible integer addition overflow Check bounds for mmap access Update copyright notice 2019-02-26 Jan-Åke Larsson Add sentence on disabling Freetype for identical output on different platforms. Amend FT2 test, move remaining local scripts to acinclude.m4, regenerate aclocal.m4 2015-03-28 Jan-Åke Larsson Add const where needed Don't re-define pipe and snprintf Test for and use texlive_gs_init() Use WIN32 _spawnlp Use char* in debug printout calculations Don't use basename, ignore case, and use correct directory delimiter 2015-03-05 Jan-Åke Larsson Change libgd download address 2015-03-02 Jan-Åke Larsson Remove datarootdir configure warning, adjust distclean target Remove texi2pod.pl, we only use that for building the man page Remove cvs remnants Adjust distclean target 2015-03-01 Jan-Åke Larsson * RELEASE: Release 1.15 * color.c, config.h.in, configure.ac, dvi.c, dvipng.h, misc.c, pk.c, set.c, sfd.c, tfm.c, vf.c: Remove references to kpathsea xmalloc, and enable non-GNU malloc * dvi.c: Fix long sleep interval in --follow * INSTALL, Makefile.in, README, config.h.in, configure.ac, draw.c, dvipng.1, dvipng.c, dvipng.h, dvipng.texi, font.c, fontmap.c, install.texi, miktex.h, misc.c, readme.texi, t1.c: Remove support for the now dead libt1 * special.c: Use * color.c: Fix segfault at missing xcolor.sty * set.c: Added check for out of memory in libgd allocate 2012-09-15 Jan-Åke Larsson * ft.c: Add warning for missing target_light hinting 2012-09-15 Jan-Åke Larsson * dvipng.c: Use return value of fgets better 2010-12-17 Jan-Åke Larsson * COPYING.gd: Inclusion of the gd copyright notice 2010-12-14 Jan-Åke Larsson * RELEASE: Spell correctly 2010-12-06 Jan-Åke Larsson * special.c: Warn when --norawps hinders output * dvipng.texi: Document usage of a fallback * Makefile.in: Add www directory 2010-10-23 Jan-Åke Larsson * dvipng.1, RELEASE: Prepare for 1.14 2010-10-22 Jan-Åke Larsson * configure.ac: Prepare for 1.14 * special.c: Tidy up the three different calls to gs on different systems. * dvipng.texi: Some adjustments, document handling of raw PostScript 2010-10-21 Jan-Åke Larsson * special.c: Code cleanup 2010-10-14 Jan-Åke Larsson * dvipng.h (malloc): Put malloc def first * special.c (ps2png): Ensure one and only one showpage, and do it in PostScript instead of in C as suggested by Akira's previous patch 2010-10-02 Peter Breitenlohner * special.c (ps2png): Drop unused 'bool showpage' for WIN32. 2010-10-01 Jan-Åke Larsson * special.c: Add heuristics to ignore non-rendering specials from hyperref 2010-09-30 Jan-Åke Larsson * special.c, misc.c, dvipng.h, dvipng.texi: Add option to not try converting raw PostScript 2010-09-29 Jan-Åke Larsson * special.c (ps2png): Reap zombies * papersiz.c: Fix bug in length decoder 2010-09-22 Jan-Åke Larsson * color.c, enc.c, fontmap.c, misc.c, sfd.c: Handle CRLF correctly 2010-09-20 Akira Kakuto * special.c (ps2png): fix WIN32 bug that dvipng.exe waits infinitely for some kind of eps files. 2010-03-17 Jan-Ake Larsson * Release 1.13 * misc.c: Correct copyright year * RELEASE: Prepare for 1.13 2010-03-17 Peter Breitenlohner * configure.ac: Check for kpse_set_program_name() as used in dvipng.c instead of kpse_set_progname(). Support WIN32 builds (native or MinGW32). * dvipng.h (min, max): Always undefine before defining. * dvi.c: For WIN32 use Sleep(1000) instead of sleeep(1). * misc.c: #include depends on HAVE_MMAP. * dvipng.h, font.c, misc.c: For mmap code use '#ifdef WIN32' instead of '#ifdef MIKTEX'. * special.c: WIN32 specific replacement for fork and pipe, using code from Akira Kakuto, (e-mail from 23 Feb 2010 23:33:58). 2010-03-17 Jan-Ake Larsson * test_dvipng.tex: Don't use mathptmx * color.c, dvi.c, dvipng.h, fontmap.c, misc.c, papersiz.c, ppagelist.c, special.c: Avoid compiler warnings * dvipng.texi, configure.ac: Prepare for 1.13 * draw.c, dvipng.h, set.c, vf.c: Adjust glyph-index bounds test. Remove possible segfault from isprint(). 2010-02-11 Jan-Ake Larsson * color.c, draw.c, dvi.c, enc.c, font.c, fontmap.c, ft.c, papersiz.c, pk.c, ppagelist.c, set.c, sfd.c, special.c, t1.c: Declare functions used only in one file as static to avoid warnings when compiling with 'gcc --Wmissing-prototypes', suggested by Peter Breitenlohner 2010-01-28 Jan-Ake Larsson * draw.c, dvipng.h, dvipng.texi, misc.c: Add width reporting 2009-04-14 Jan-Ake Larsson * fontmap.c: Make the thing build without FT2 2009-03-28 Jan-Ake Larsson * config.h.in: Remove the last remnants of alloca 2009-03-26 Jan-Ake Larsson * configure.ac, dvipng.h: Remove the last remnants of alloca * draw.c, font.c, ft.c, pk.c, t1.c, vf.c: Make the name element of the font struct a pointer, not an array * dvi.c, ppagelist.c: Change error msg to mention malloc * color.c, enc.c, pk.c, set.c, sfd.c, special.c, tfm.c: Don't use alloca 2009-03-25 Jan-Ake Larsson * config.h.in, configure.ac: Check for libgen.h, not libgen * special.c: Put declarations before code * color.c, dvipng.h, fontmap.c, ft.c, misc.c, pk.c, set.c, t1.c, tfm.c: Exchange #if for #ifdef 2009-02-23 Jan-Ake Larsson * Release 1.12 * INSTALL, README, install.texi, readme.texi, special.c: Correct date for copyright * RELEASE, configure.ac, dvipng.1, dvipng.texi: Prepare for 1.12 2009-01-23 Jan-Ake Larsson * special.c: Keep transparent background in rescaled included bitmaps 2008-06-04 Jan-Ake Larsson * special.c: Add the color PostScript prologue 2008-06-03 Jan-Ake Larsson * dvipng.h, special.c: Support xcolor PostScript prologue * color.c: Support x11nam.def, fix handling of xcolor multiple-model color values, and xcolor PostScript prologue 2008-06-02 Jan-Ake Larsson * special.c: Some (most?) literal PostScript specials seem to depend on tex.pro and possibly special.pro, always load these * configure.ac: Fix gs checks * misc.c: Correct last mmap element 2008-05-27 Jan-Ake Larsson * readme.texi: Mention new color models in xcolor * color.c: Adjust for new version of xcolor, mainly color prefixes 2008-05-14 Jan-Ake Larsson * Release 1.11 * configure.ac, dvipng.1, dvipng.texi, RELEASE: Prepare for 1.11 * special.c: Fix PS inclusion regression 2008-05-09 Jan-Ake Larsson * Release 1.10 * RELEASE: Prepare for 1.10 2008-05-08 Jan-Ake Larsson * special.c: Add warning about DVI code in PS environment 2008-05-07 Jan-Ake Larsson * README, readme.texi: Mention gs interpreter lib in TODO * aclocal.m4, configure.ac: Move gs device check so that it can be called from different points 2008-05-05 Jan-Ake Larsson * draw.c, dvi.c, dvipng.h: Revert creation of dvi command struct * draw.c, dvi.c: Init dvi command struct * draw.c, dvi.c, dvipng.h: Create dvi command struct * special.c: Rearrange code * color.c, dvipng.h, enc.c, fontmap.c, misc.c, pk.c, sfd.c, special.c, tfm.c, vf.c: Change name of fmmap struct element 2008-04-29 Jan-Ake Larsson * dvipng.1: Prepare for 1.10 * configure.ac: Prepare for 1.10, check for gdImageCreateJpeg * aclocal.m4: Cosmetic changes * special.c: Change to HAVE_...JPEG * dvipng.h: Remove c++ comment * dvipng.texi: Prepare for 1.10. Use 'active' in the 'preview' package, remove unused text * Makefile.in: Install dvipng.1 from the tarball, mark maintainer targets 2008-02-08 Jan-Ake Larsson * Makefile.in, INSTALL, README, color.c, commands.h, configure.ac, * draw.c, dvi.c, dvipng.1, dvipng.c, dvipng.h, dvipng.texi, enc.c, * font.c, fontmap.c, ft.c, install.texi, macros.texi, miktex.h, * misc.c, papersiz.c, pk.c, ppagelist.c, readme.texi, set.c, sfd.c, * special.c, t1.c, test_dvipng.tex, tfm.c, vf.c, COPYING, * COPYING.LESSER: Change to LGPLv3 * install.texi: * README: * dvipng.texi: Add blurb about MediaWiki, and cosmetic changes 2008-01-10 Jan-Ake Larsson * set.c: Correct typo 2007-12-12 Jan-Ake Larsson * special.c: Correct header test, add proper ps::[start] and ps::[end] detection, add code to make tikz/pgf dvips (~PostScript) specials work 2007-10-26 Jan-Ake Larsson * draw.c: * dvi.c: * special.c: Change DVIGetCommand so that the command is zero-terminated. This simplifies string operations on specials and makes the length argument to SetSpecial unnecessary. Handle preview-bop-hook correctly * special.c: Simplify PostScript header and multi-special handling * color.c: * draw.c: * dvi.c: * dvipng.h: * font.c: * ft.c: * misc.c: * set.c: * special.c: * t1.c: Split the flags variable into page_flags, option_flags and dvi->flags * dvi.c: * dvipng.c: dvi->flags resets now when the dvi is reopened 2007-08-06 Jan-Ake Larsson * ft.c: * misc.c: * t1.c: * tfm.c: * vf.c: Memory fixes 2007-07-24 Jan-Ake Larsson * special.c: Fix PostScript header usage 2007-07-22 Jan-Ake Larsson * misc.c: Change version info slightly * ft.c: Change debug info slightly 2007-07-21 Jan-Ake Larsson * special.c: Rewrite to allow for raw PostScript specials, also use PostScript headers * dvipng.h: * dvi.c: Add read-ahead for PostScript specials * config.h.in: * configure.ac: Add test for gd pointer->image conversion 2007-03-19 Jan-Ake Larsson * draw.c: Better handling of glyph index bounds * set.c: Check bounds for glyph index 2006-12-11 Jan-Ake Larsson * readme.texi: Fix TODO, mention MediaWiki * dvipng.h: Fix for alloca under AIX * Makefile.in: mkinstalldirs is in $(srcdir) 2006-11-11 Jan-Ake Larsson * Release 1.9 * INSTALL: * README: Update for 1.9 * Makefile.in: Make the test fail if fonts not found * configure.ac: Don't use "which". Add info about the selfauto stuff. Report if CJK support present * test_dvipng.tex: Remove the (intentional) failing special 2006-11-07 Jan-Ake Larsson * fontmap.c: Don't warn if ttfonts.map is missing, fix pointer * Makefile.in: Adjust manpage target so manual intervention isn't needed anymore * dvipng.1: Update manpage * dvipng.texi: Update for 1.9 * COPYING, Makefile.in, color.c, commands.h, configure.ac, draw.c, dvi.c, dvipng.c, dvipng.h, dvipng.texi, enc.c, font.c, fontmap.c, ft.c, macros.texi, miktex.h, miktex.mak, misc.c, papersiz.c, pk.c, ppagelist.c, set.c, sfd.c, special.c, t1.c, test_dvipng.tex, tfm.c, vf.c: Update FSF address * fontmap.c: Add ttfonts.map to the searched font maps * RELEASE: Prepare for 1.9 2006-11-02 Jan-Ake Larsson * dvipng.texi: Nitpicking on bitmapped graphics 2006-10-13 Jan-Ake Larsson * readme.texi: Add note about subfont (CJK) support * install.texi: Add that FreeType2 is needed for subfont (CJK) support 2006-10-12 Jan-Ake Larsson * readme.texi: Fix todo 2006-10-11 Jan-Ake Larsson * sfd.c: Change && to || so that multiple subfonts work * ft.c: Adjust debug output * configure.ac: Add sfd.o 2006-10-04 Jan-Ake Larsson * configure.ac: Prepare for 1.9 * sfd.c: Only look for subfont file on recent kpathsea * dvipng.c, ft.c, fontmap.c, dvipng.h: Prepare for subfonts (CJK) * sfd.c: Added. Used for subfonts (CJK) * configure.ac: Change wording of gs helptext * ft.c: Adjust debug message, and encoding selection * special.c: Adjust debug messages * dvipng.texi: Document the --strict option * dvipng.c: Fix timer * Makefile.in: Add dist target, simplify distclean * fontmap.c: Remove segfault occuring for non-existent font 2006-08-08 Jan-Ake Larsson * special.c: Make showpage flag static * special.c: Fix bug with -dSAFER and non-. paths, and bug with pngalpha and background color 2006-05-17 Jan-Ake Larsson * fontmap.c: Rearrange, simplify, speed up 2006-05-16 Jan-Ake Larsson * ft.c: FT_LOAD_TARGET_LIGHT does not work in some cases, fall back to FT_LOAD_NO_HINTING 2006-05-08 Jan-Ake Larsson * dvipng.texi: Add credit * Makefile.in: add www target * README: * readme.texi: Update capabilities info and preview-latex link 2006-03-30 Jan-Ake Larsson * Release 1.8 * RELEASE: Update for 1.8 * set.c: * readme.texi: * install.texi: * ft.c: * dvi.c: * draw.c: * README: * INSTALL: Update copyright 2006-03-29 Jan-Ake Larsson * dvipng.1: * dvipng.texi: Document new switch, new PostScript inclusion, rearrange and adjust * misc.c: * INSTALL: * README: * install.texi: * readme.texi: Minimal documentation adjustments 2006-03-27 Jan-Ake Larsson * ft.c: Change to FT_LOAD_TARGET_LIGHT * draw.c: Fix segfault in debug mode * aclocal.m4: Make sure the kpse_enc_format test fails for the right reason only 2006-02-27 Jan-Ake Larsson * special.c: Use gs' pngalpha device, render without clipping, adjust image position * set.c: Simplify code, make color cache (page-)persistent * draw.c: Reset new flag * misc.c: New switch, remove some old switches from fast-help, use new flag name * dvipng.h: New flags * configure.ac: * config.h.in: Simplify gd tests * configure.ac: * aclocal.m4: Check gs devices 2006-02-10 Jan-Ake Larsson * special.c: Use execlp for gs call 2006-02-03 Jan-Ake Larsson * special.c: Revert message about file type, debug information is enough * special.c: Warn for nonexistent image decoder 2006-02-01 Jan-Ake Larsson * special.c: Warn with file type when unable to load included image * special.c: Read the first byte of file to be included and compare with magic number 2006-01-31 Jan-Ake Larsson * special.c: Temporary version, just try the different image decoders and see * special.c: Use correct variables 2006-01-29 Jan-Ake Larsson * special.c: Add code to check image access permission 2006-01-28 Jan-Ake Larsson * special.c: Simplify some code * papersiz.c: Fix rounding error for length calculation 2006-01-26 Jan-Ake Larsson * color.c: Fix typo that gave a segfault * config.h.in: Remove unneeded function check * configure.ac: Update for 1.8, remove unneeded function check * dvipng.h: Switch debug numbers to coincide with the manual * misc.c: Remove isdigit * special.c: Add code to include PNG, JPEG and GIF images 2006-01-12 Jan-Ake Larsson * special.c: Add a space in message * misc.c: Do more tests for numeric-parameter options * dvi.c: Outfilename: only remove .dvi extension, not others 2005-10-11 Jan-Ake Larsson * Release 1.7 * INSTALL: Typographic changes * README: * RELEASE: * configure.ac: * dvipng.1: * dvipng.texi: Adjust for 1.7 * install.texi: Insert space * miktex.h: Adjust for 1.7, I am uncertain which of the new calls are available in the MIKTeX environment * readme.texi: Remove reference to my old laptop 2005-09-30 Jan-Ake Larsson * config.h.in, configure.ac, ft.c: Only use FT_Library_Version if available 2005-07-05 jalar * Makefile.in: Enable srcdir != builddir 2005-07-04 jalar * font.c: Add length check for font name 2005-06-28 Jan-Ake Larsson * special.c: Read preview-latex version 2005-06-27 Jan-Ake Larsson * Release 1.6 * RELEASE: Report what fixes have been done * dvipng.texi: Document xcolor adaptations * misc.c: Add 'Transparent' in the quick-help * special.c: Cosmetics, do a _small_ message for bop-hook redef 2005-06-16 Jan-Ake Larsson * dvipng.h: * dvipng.c: * color.c: Revamp colorname interpreter for xcolor 2005-06-14 Jan-Ake Larsson * misc.c: Adjust MIKTeX stuff 2005-06-13 Jan-Ake Larsson * color.c: Don't use strtok, adjust for xcolor * special.c: Don't use strtok 2005-04-25 Jan-Ake Larsson * config.h.in: * configure.ac: * set.c: Don't do alpha blending in truecolor mode, write alpha channel to file 2005-04-20 Jan-Ake Larsson * dvipng.texi: Add Credits 2005-04-19 Jan-Ake Larsson * dvipng.h: Fix for sys/types.h conflict in old IRIX systems * special.c: Adjust tightpage test 2005-04-04 Jan-Ake Larsson * special.c: Make tightpage option backwards compatible * RELEASE: Prepare for 1.6 * dvipng.1: Regenerate man page * configure.ac: * dvipng.texi: * miktex.h: Update version info * configure.ac: * dvipng.texi: * README: * readme.texi: Update mailing list address * configure.ac: * config.h.in: * special.c: Simplify string search 2005-04-03 Jan-Ake Larsson * special.c: Try to detect all preview-latex versions tightpage code 2005-03-02 Jan-Ake Larsson * set.c: Remove extra debug printout * t1.c: Sizes are given in big points in T1lib, in TeX points in DVI files * ft.c: Sizes are given in big points in FreeType, in TeX points in DVI files * dvipng.h: Fix boolean type again 2005-02-10 Jan-Ake Larsson * config.h.in: * configure.ac: * dvipng.texi: * dvipng.h: * misc.c: * set.c: Add proper alpha channel 2005-02-04 Jan-Ake Larsson * color.c: * draw.c: * dvi.c: * dvipng.c: * font.c: * ft.c: * misc.c: * papersiz.c: * pk.c: * set.c: * special.c: * t1.c: * tfm.c: * vf.c: Cosmetic changes to warnings and fatals * Release 1.5 * RELEASE: Prepare for 1.5 * INSTALL: * Makefile.in: * README: * color.c: * commands.h: * configure.ac: * draw.c: * dvi.c: * dvipng.1: * dvipng.c: * dvipng.h: * dvipng.texi: * enc.c: * font.c: * fontmap.c: * ft.c: * install.texi: * macros.texi: * miktex.h: * misc.c: * papersiz.c: * pk.c: * ppagelist.c: * readme.texi: * set.c: * special.c: * t1.c: * test_dvipng.tex: * tfm.c: * vf.c: Update Copyright, set version 1.5 2005-02-03 Jan-Ake Larsson * draw.c: * dvipng.h: * set.c: Fix bug in --picky mode 2005-01-27 Jan-Ake Larsson * dvipng.c: Restore --mfmode and --bdpi functionality 2005-01-25 Jan-Ake Larsson * color.c: Fix segfault when trying to find nonexisting dvipsnam color * dvipng.c: Make dvipsnam colors available on command line 2004-12-10 Jan-Ake Larsson * Release 1.4 * RELEASE: * configure.ac: * dvipng.1: * dvipng.texi: Set version 1.4 * README: Fix formatting * misc.c: Use mmap test. Hopefully, it will fail on ULTRIX, mmap only works on character special devices (and not on regular files) 2004-12-02 Jan-Ake Larsson * config.h.in: * configure.ac: * dvipng.h: Move int64_t and uint64_t tests entirely to autoconf * dvi.c: Fix signedness 2004-11-30 Jan-Ake Larsson * misc.c: Fix NULL dereference. 2004-11-25 Jan-Ake Larsson * Release 1.3 * Makefile.in, README, dvipng.1, readme.texi: Fix dvigif installation and docs * INSTALL: * README: Add license * dvipng.c: Remove duplicate copyright * config.h.in: * configure.ac: Add some tests * dvipng.1: * dvipng.texi: Add some minor things 2004-11-24 Jan-Ake Larsson * config.h.in: * configure.ac: Test for 64-bit types. * dvipng.h: Use char* arithmetic, not void*. And enable use of gcc -ansi -pedantic. * special.c: Don't use C++ comments. * papersiz.c: Rewrite * draw.c: * dvi.c: * font.c: * ft.c: * misc.c: * pk.c: * tfm.c: * vf.c: Fix signedness 2004-11-15 Reiner Steib * draw.c, dvipng.c, enc.c, font.c, ft.c, pk.c, special.c, t1.c: Don't use C++ comments. 2004-11-05 David Kastrup * Makefile.in (install-dvigif): Don't fail if dvigif already exists. 2004-11-02 Jan-Åke Larsson * dvipng.h: Fix boolean type 2004-11-01 Jan-Åke Larsson * RELEASE: Update for 1.3 * dvipng.h: Load alloca.h when available * font.c: * fontmap.c: Remove inline * Makefile.in: * commands.h: * config.h.in: * configure.ac: * install.texi: * macros.texi: * miktex.h: * readme.texi: * test_dvipng.tex: Add copyright notice * color.c: * draw.c: * dvi.c: * dvipng.c: * dvipng.h: * enc.c: * font.c: * fontmap.c: * ft.c: * misc.c: * papersiz.c: * pk.c: * ppagelist.c: * set.c: * special.c: * t1.c: * tfm.c: * vf.c: Change c-in-a-circle to (C) 2004-10-27 Jan-Åke Larsson * dvipng.1: * dvipng.texi: Amend docs * misc.c: Amend helptext 2004-10-26 Jan-Åke Larsson * set.c: * misc.c: * dvipng.h: Change background transparency * configure.ac: Bump version, add test for libz 2004-10-07 Jan-Åke Larsson * dvipng.texi: document change in -o switch 2004-10-06 Jan-Åke Larsson * set.c: Allow longer pagenumbers in output file (e.g., %06d) 2004-08-18 Jan-Åke Larsson * Release 1.2 * RELEASE: Change for 1.2 * config.h.in: Update * dvipng.1: change help text * dvipng.texi: update mailing list text. And version. * README: * readme.texi: update info and todo list * draw.c, misc.c, dvipng.c, dvipng.h: Add an intermediate exit status 2004-08-17 Jan-Åke Larsson * misc.c: add --gamma switch * special.c: Fix comment * set.c: * dvipng.h: new Gamma function * configure.ac: libm is needed by new gamma code * dvipng.1: * dvipng.texi: document new switches * draw.c: change name of picky flag * special.c: do not call ghostscript when switch given * misc.c: add picky and ghostscript switches * dvipng.h: add picky and ghostscript flags 2004-08-06 Jan-Åke Larsson * dvipng.texi: Document --png, --gif, and --picky * .cvsignore: Add *.gif * Makefile.in: Install 'dvigif' if we have GIF support * configure.ac: Test for gdImageGif and 'ln -s' * config.h.in: GIF support * set.c: GIF writing * misc.c: basename fixes, --png and --gif fixes, --no-image-on-warn changes name to --picky * dvi.c: basename fixes * dvipng.h: Portability fixes, add GIF image flag 2004-08-02 Jan-Åke Larsson * draw.c: Fix behaviour of --no-image-on-warn 2004-07-01 Jan-Åke Larsson * miktex.mak: New, for MIKTeX * dvi.c: * dvipng.c: * dvipng.h: * special.c: Adjust for MIKTeX * color.c: * enc.c: * font.c: * fontmap.c: * misc.c: * pk.c: * tfm.c: * vf.c: Move file-mmapping to misc.c, adjust it for MIKTeX 2004-06-29 Jan-Åke Larsson * configure.ac: * dvipng.h: inttypes.h not available on all platforms * special.c: Remove snprintf, not available on certain platforms 2004-06-27 Jan-Åke Larsson * dvipng.c: Fix case of missing font libs * fontmap.c: Remove debug printf * draw.c: Fix for case of absent font lib(s), correct typo 2004-06-24 Jan-Åke Larsson * fontmap.c: * pk.c: * vf.c: More memory fixes 2004-06-21 Jan-Åke Larsson * config.h.in: * configure.ac: Test for stdbool, munmap and strtol * test_dvipng.tex: Change color test * dvipng.h: * misc.c: * ppagelist.c: Fix -r switch * dvipng.h: * font.c: * misc.c: * ppagelist.c: * special.c: * t1.c: * tfm.c: Use stdbool * color.c: * dvi.c: * dvipng.c: * dvipng.h: * enc.c: * font.c: * fontmap.c: * ppagelist.c: * special.c: Fix memory leak(s) * color.c: * draw.c: * dvi.c: * dvipng.h: * misc.c: * set.c: * special.c: Fix color stack * draw.c: * dvipng.h: * ft.c: * pk.c: * set.c: * t1.c: * tfm.c: * vf.c: Simplify char structs * color.c: * draw.c: * dvi.c: * dvipng.c: * dvipng.h: * enc.c: * font.c: * fontmap.c: * ft.c: * misc.c: * papersiz.c: * pk.c: * ppagelist.c: * set.c: * special.c: * t1.c: * tfm.c: * vf.c: Add copyright notice 2004-05-31 Jan-Åke Larsson * dvipng.1: * configure.ac: * RELEASE: * INSTALL: Release 1.1 2004-05-26 Jan-Åke Larsson * special.c: Handle source specials * test_dvipng.tex: Add failing special and color test * dvipng.c: Adjust coment about SELFAUTO... * dvi.c: Fix possible overflow 2004-05-24 Jan-Åke Larsson * misc.c: Remove -t, it is not implemented yet * dvipng.h: Undef malloc, if defined 2004-05-18 Jan-Åke Larsson * dvipng.texi: Fix build 2004-05-14 Jan-Åke Larsson * config.h.in: Use more tests * dvipng.1: Add documentation * dvipng.texi: Fix build. Revert to four-argument @node, my makeinfo cannot handle the one-argument form (yet). 2004-05-11 Jan-Åke Larsson * configure.ac: More tests 2004-05-09 Jan-Åke Larsson * install.texi: T1lib docs * dvipng.1: * dvipng.texi: Add documentation, and spellcheck * special.c: * color.c: Make colors work again. 2004-05-08 David Kastrup * Create new ChangeLog for dvipng 2004-05-05 Jan-Åke Larsson * fontmap.c: Use both kpse_fontmap_format and _dvips_header_ * enc.c: Use configure test * configure.ac: Add test for kpse_enc_format, reorder gd and png tests * aclocal.m4: Add test for kpse_enc_format * special.c: More informative warnings 2004-05-04 Jan-Åke Larsson * enc.c: Use the new kpathsea search format kpse_enc_format if available, otherwise use kpse_tex_ps_header_format * fontmap.c: Fix new kpathsea search type kpse_fontmap_format, use kpse_dvips_config_format if not available * ft.c: Fix sizing * draw.c: Simplify LoadT1 call * t1.c: Shorten call, fix sizing * dvipng.h: Simplify char-storing structure 2004-05-03 Jan-Åke Larsson * fontmap.c, font.c, t1.c, ft.c: Fix for ps fonts not in psfontmap 2004-05-02 Jan-Åke Larsson * Makefile.in: * config.h.in: * configure.ac: * draw.c: * dvipng.c: * dvipng.h: * enc.c: * font.c: * fontmap.c: * ft.c: * t1.c: * misc.c: Add t1lib support 2004-04-05 Jan-Åke Larsson * dvipng.1: * readme.texi: * dvipng.texi: * Makefile.in: Add man page 2004-03-27 Jan-Åke Larsson * dvipng.texi: Fix debug documentations * dvipng.c: Dont fail on --mode without --bdpi, output a warning. 2004-03-26 Jan-Åke Larsson * papersiz.c: Remove compiler warning * dvipng.texi: * misc.c: Change year 2004-03-25 Jan-Åke Larsson * special.c: Revert change, not only resolution but also offset is needed when generating png from ps * misc.c: Change helptext * configure.ac: Change version number * README: Checkin updated README * pk.c: * ft.c: Speed up color cache * dvipng.texi: Add info on resolution, change version number 2004-03-24 Jan-Åke Larsson * special.c: Fix missing 'showpage' and a memory leak * font.c: Adjust error message * dvipng.h: * ft.c: * pk.c: Change ink darkness map * draw.c: Output page numbers more often. If the user has a slow terminal he's to blame himself, not me. * tfm.c: Include alloca.h if present 2004-03-23 Jan-Åke Larsson * dvipng.texi: Adjust for the new -D option 2004-03-19 dakas * RELEASE: Remove spurious blanks. 2004-03-19 Jan-Åke Larsson * RELEASE: Update, shorten 2004-03-18 Jan-Åke Larsson * RELEASE: * dvi.c: * dvipng.c: * dvipng.h: * font.c: * misc.c: * papersiz.c: * special.c: Change the behaviour of the -D switch 2004-03-08 Jan-Åke Larsson * font.c: Don't retry on PK generation failure 2004-03-02 David Kastrup * dvi.c (DVIOpen): Fix a buffer overrun error. ChangeLog.00000664000175000017500000004612414737210011012253 0ustar janla64janla642004-01-16 Jan-Åke Larsson * font.c: fix compile without FT2 2004-01-12 Jan-Ake Larsson * RELEASE: Prepare for 0.9 * misc.c: Enable --expand-bbox * color.c: * draw.c: * dvipng.h: * font.c: * misc.c: * special.c: Enable --no-image-on-warn * draw.c: * dvi.c: * dvipng.c: * dvipng.h: * readme.texi: * special.c: Fix tightpage behaviour 2004-01-09 Jan-Ake Larsson * special.c: Add preview-latex's "tightpage" code 2004-01-08 Jan-Ake Larsson * dvipng.texi: * configure.ac: Prepare for 0.9 * Makefile.in: clean target 2004-01-07 Jan-Ake Larsson * color.c: * draw.c: * dvi.c: * dvipng.c: * dvipng.h: * enc.c: * font.c: * fontmap.c: * ft.c: * pk.c: * set.c: * special.c: * tfm.c: * vf.c: Speedup DEBUG * pk.c: Fix subpixel offsets * dvipng.c: * dvipng.h: * font.c: * misc.c: * set.c: * special.c: Fix flags * draw.c: Fix bbox * dvipng.h: Adjust for freetype >= 2.1.6 2003-12-15 Jan-Ake Larsson * tfm.c: * fontmap.c: * font.c: Fix freeeeeeeeeing 2003-12-08 Jan-Ake Larsson * dvipng.texi: * configure.ac: * RELEASE: Prepare for 0.8 * ft.c: Fix debug output * draw.c: * dvipng.h: * dvipng.texi: * misc.c: Add --height option * test_dvipng.tex: A nice equation is true. Behave! 2003-12-07 Jan-Ake Larsson * enc.c: Encodings are _ps_header_s 2003-12-05 Jan-Åke Larsson * misc.c: * dvipng.texi: * dvipng.h: * draw.c: Change --baseline to --depth 2003-12-01 Jan-Ake Larsson * draw.c: * dvipng.h: * misc.c: Change to physical pagenumbers, instead of DVI pagenumbers. DVI pagenumbers will be indicated on STDOUT if they differ from physical pagenumbers, but the numbering of PNG files is physical pagenumbers. Old behaviour can be chosen with the option -dvinum. * ppagelist.c: * misc.c: * dvipng.texi: Make negative pages render. Now -pp handles negative pages gracefully too. Remove -pp code taken from dvips. 2003-11-30 Jan-Ake Larsson * draw.c: * dvipng.c: * dvipng.h: * font.c: * ft.c: * misc.c: * pk.c: * set.c: * tfm.c: * vf.c: Include alloca.h when necessary, start preparing transition to subpixel rendering, do proper cleanup on exit 2003-11-18 Jan-Åke Larsson * enc.c: Fix bug * ft.c: * tfm.c: * font.c: * dvipng.h: Add fallback from FT to PK 2003-11-14 Jan-Åke Larsson * Makefile.in: Use $DESTDIR 2003-11-06 Jan-Åke Larsson * special.c: Fix postscript inclusion: placement and background color 2003-10-17 Jan-Åke Larsson * misc.c: * font.c: * dvipng.texi: * dvipng.h: Add option for freetype activation * configure.ac: Add message when freetype is present * ft.c: Apparently FreeType hinting is a no-no. Load glyphs with FT_LOAD_NO_HINTING. Only then output is acceptable. 2003-10-15 Jan-Åke Larsson * fontmap.c: Remove erroneous match 2003-10-13 Jan-Åke Larsson * font.c: Fix font searching order * RELEASE: Prepare for 0.7 * fontmap.c: * psfontmap.c: * configure.ac: Rename psfontmap.c to fontmap.c 2003-10-08 Jan-Ake Larsson * psfontmap.c: Add third bare word: encoding 2003-10-07 Jan-Ake Larsson * misc.c: * dvipng.texi: Allow for -- on options * configure.ac: Prepare for 0.7 * Makefile.in: Adjust hint * configure.ac: * config.h.in: Fix helptext in config.h.in * test_dvipng.tex: Add some tests for ligatures and sizes 2003-10-03 Jan-Åke Larsson * readme.texi: Document new font support and switches * psfontmap.c: Redesign psfontmap loading to use the syntax from dvips' docs * font.c: Enhance TrueType font finding * draw.c: Warn if setting char from null font * dvipng.h: * color.c: Load and use psnames.def 2003-09-28 Jan-Ake Larsson * misc.c: Warn for all bad options 2003-09-24 Jan-Ake Larsson * dvipng.texi: * install.texi: * misc.c: Fix documentation 2003-09-23 Jan-Ake Larsson * ft.c: * enc.c: * dvipng.h: Only load encodings once 2003-09-18 Jan-Åke Larsson * draw.c: * dvipng.h: * misc.c: Add -baseline switch 2003-09-17 Jan-Ake Larsson * font.c: Remove compiler warning * config.h.in: * psfontmap.c: * dvipng.c: * configure.ac: Fix SELFAUTO... variables if dvipng is not being installed in main texmf tree. This will make it find config files and fonts anyway. 2003-09-16 Jan-Ake Larsson * tfm.c: * psfontmap.c: * ft.c: * enc.c: Added for postscript font handling with freetype * font.c: Use freetype font loading * dvipng.h: Add freetype-related types and declarations, and simplify glyph rendering * pk.c: Simplify glyph rendering * dvipng.c: Init freetype * dvi.c: Fix strlen bugs * draw.c: Add FONT_TYPE_FT drawing * configure.ac: * config.h.in: * Makefile.in: Adjust for freetype things 2003-08-29 Jan-Åke Larsson * special.c: fix color handling * dvipng.c: Increase TIMING output * misc.c: * draw.c: small speedups * dvipng.h: * configure.ac: * config.h.in: * Makefile.in: Change handling of the DEBUG and TIMING flags 2003-08-26 Jan-Åke Larsson * RELEASE, dvipng.texi, configure.ac: prepare for 0.6 * Makefile.in: another install-docs fix 2003-08-13 Jan-Åke Larsson * configure.ac: new test (ps inclusion speedup) * draw.c: simplify preprocessor processing, fix SetSpecial call * special.c: speedup for ps image inclusion, fix SetSpecial call * Makefile.in: fix install-docs 2003-08-04 Jan-Åke Larsson * special.c: Argh!, fix compilation for non-truecolor version * dvipng.h: Argh!, fix image cache * dvipng.texi: * configure.ac: * RELEASE: Prepare for 0.5 * misc.c: * dvipng.h: * set.c: Add preliminary truecolor support * pk.c: Benchmark truecolor rendering, no real code change * special.c: * misc.c: * dvipng.h: Add preliminary image cacheing * draw.c: Small adjustments 2003-07-30 Jan-Åke Larsson * draw.c: Fix two bugs so that bounding box again is correct * configure.ac: configuration printout improved 2003-07-02 Jan-Åke Larsson * dvipng.h: Add prototypes * draw.c: minor change * RELEASE: prepare for 0.4 2003-07-01 Jan-Åke Larsson * draw.c, set.c: Fix rules (again), this time taking maxdrift into account. * pk.c: Unfortunately gdImageColorResolveAlpha only works on truecolor images. Some other day, then. I did fix the performance of PROPER_OVERSTRIKE, though. * readme.texi: Add todo 2003-06-30 Jan-Åke Larsson * dvipng.texi: small fixes * vf.c: Speedup macro start/end * set.c: Handle offset in draw.c only, allow choice of compression if gd can do this * pk.c: Handle overstrike, either with gd alpha level, if support exists for that, or "manually". The latter is active if PROPER_OVERSTRIKE is #defined, currently yes, at roughly 5% performance loss. * misc.c: -z option: choose compression if gd can do this * dvipng.h: Proper rounding, gd bells and whistles * draw.c: Allow drift a la dvitype, maxdrift=1, handle offset here only, speedup vf macro start/end * config.h.in: * configure.ac: New tests for gd bells and whistles * Makefile.in: Clean README * .cvsignore: More files 2003-06-23 Jan-Åke Larsson * configure.ac: * config.h.in: Added tests for newly added C code * Makefile.in: * dvipng.texi: Reflect move of readme * README: * readme.texi: Moved from README to readme.texi 2003-06-19 Jan-Åke Larsson * special.c: Fix crash on file not found * set.c: Code reformatting * misc.c: Fix switches, and send warnings/errors to stderr. * vf.c: * pk.c: * draw.c: Include header only used in this file, here. * commands.h: Make draw.c compile without -DDEBUG * Makefile.in: Use --disable-debug, fix docs generation/install, and add 'test' target. * README: Update info * configure.ac: Add --disable-debug * install.texi: Minor changes * dvipng.texi: Document difference between -pp and -p + -l * dvipng.h: Fix FreeBSD non-C99 header issue 2003-06-12 Jan-Åke Larsson * Makefile.in: Fix SunOS make suffix rule wierdness * color.c: Change comment * dvi.c (DVIOpen): bugfix ".dvi" completion * dvipng.h (PIXROUND): Round down instead of up, SetRule now has its own rounding mechanism * set.c (SetRule): Refine rule drawing, make sure rule is inside bounding box 2003-06-10 Jan-Åke Larsson * README: * RELEASE: * Makefile.in: * configure.ac: * dvipng.texi: Prepare for 0.3 * vf.c: * set.c: * pk.c: * font.c: * dvi.c: * draw.c: simplify DEBUG_PRINT * configure.ac: Look for gs * special.c: Fixes to gs interaction * set.c: Enable -o for output file, no segfault on empty image, reposition rule to match dvips * draw.c: simplify DEBUG_PRINT macro * dvi.c: * misc.c: Enable -o for output file * dvipng.h: Enable -o for output file, simplify DEBUG_PRINT macro 2003-04-17 Jan-Ake Larsson * install.texi: * dvipng.texi: Rewrite stuff * dvipng.h: New debug flag * configure.ac: * config.h.in: Configure GS_PATH * special.c: No tempfiles anymore. Communicate with child through two pipes. * configure.ac: * Makefile.in: Make docs 2003-04-15 Jan-Åke Larsson * macros.texi: Added * install.texi, dvipng.texi: Initial version 2003-03-28 Jan-Åke Larsson * README: * RELEASE: Release 0.2, PostScript type1 font support and PostScript inclusion. * configure.ac: Added configure error message about where to find libgd. * dvipng.h: * draw.c (DrawCommand): * special.c (SetSpecial): Postscript inclusion now works. * misc.c (DecodeArgs): Fix --help message * COPYING: * RELEASE: * README: Added files to repository 2003-03-12 Jan-Åke Larsson * dvi.c (DVIFollowToggle): * misc.c (DecodeArgs): * dvipng.h: Added '-follow' switch, and code that implements a follow mode. 2003-02-27 Jan-Åke Larsson * draw.c (DrawPages): * misc.c (Message): Speed up slightly when not in DEBUG mode. * misc.c (DecodeArgs): Adjust copyright notice. * set.c (SetRule): Reposition rules, one dot up. 2003-01-30 Jan-Åke Larsson * Makefile.in: * configure.ac: Fix includes and linking * draw.c: * font.c: * pk.c: * vf.c: * dvipng.h (font_entry): remove unnamed union * dvipng.h: simplify includes 2003-01-15 Jan-Ake Larsson * misc.c: Use autoconf's stuff, use atoi, fix warning message * dvipng.c: * dvipng.h: Localize position and spacing to draw.c. Fix timing * pk.c: * set.c: * special.c: * vf.c: * draw.c: Localize position and spacing to draw.c * configure.ac: Require gd and kpathsea 2002-12-03 Jan-Ake Larsson * draw.c: unfinished change: repairing * draw.c: * font.c: * vf.c: use void* in function call * dvipng.h: * draw.c: * color.c: * set.c: change names of some functions * dvipng.h: * draw.c: * dvi.c: * ppagelist.c: make dvi data more local * .cvsignore: * dvipng.h: * special.c: * font.c: * misc.c: * dvipng.c: * configure.ac: * config.h.in: * Makefile.in: autoconfiscate 2002-11-07 Jan-Ake Larsson * dvipng.h: * dvipng.c (main): * dvi.c (DVIReOpen): Don't re-init, re-open 2002-10-31 Jan-Ake Larsson * dvipng.h: * dvi.c: Remove globals and Reopen DVI on change (check mtime) * dvipng.c: Reopen DVI on change (check mtime) 2002-10-30 Jan-Ake Larsson * pk.c: Declaration moved here from dvipng.h * Makefile: No io.c, no pagequeue.c but ppagelist.c * dvipng.h: Rearranged, some new declarations * dvipng.c (main): minor changes * draw.c (DoPages): use new page-finding mechanisms * dvi.c: outfilename handling fixed, page-finding mechanisms added. * misc.c: Ppagelist handling improved, outfilename now works, added functionality from io.c * ppagelist.c: Added. Functionality slightly different from pagequeue.c * pagequeue.c: Revamped. Functionality changed and moved to ppagelist.c * io.c: Removed. Functionality in misc.c * .cvsignore: Additions 2002-10-24 Jan-Ake Larsson * dvipng.c (main): * dvipng.h: * misc.c (DecodeString): Improve stdin parser 2002-10-21 Jan-Ake Larsson * dvipng.h: Remove globals, fix message output * vf.c (SetVF, InitVF), * font.c (FontDef), * draw.c (DrawCommand): Bugfix VF handling, fix message output * pk.c (SetPK, InitPK), * dvi.c (DVIOpen): Fix message output * papersiz.c: use int32_t, fix overflow * misc.c (DecodeArgs, Message): Fix -d option, remove globals, fix message output 2002-10-16 Jan-Ake Larsson * dvipng.h: Remove globals * dvipng.c (main): Remove globals, improve stdin parser * misc.c (DecodeArgs): remove globals, fix helptext * pagequeue.c (FindQdPage, QueuePage, QueueParse): remove globals * dvi.c (FindPage): Remove unnecessary test * draw.c (DoPages): Do more normal read-ahead 2002-10-15 Jan-Ake Larsson * pk.c, font.c: Minor change * misc.c: Simplify, remove (some) globals, fix helptext * pagequeue.c, dvipng.h, dvipng.c, dvi.c, draw.c: Simplify, remove (some) globals 2002-10-14 Jan-Ake Larsson * misc.c, dvipng.h, draw.c: Added '-T tight' switch 2002-10-11 Angus Leeming * draw.c: * dvi.c: * dvipng.[ch]: * font.c: * io.c: * misc.c: * pagequeue.c: * papersiz.c: * pk.c: * set.c: * special.c: * vf.c: remove function prototype macros. * dvi.c (DVIGetCommand, CommandLength): * set.c (SetChar): add a 'break' to the end of the switch statements (prevents a warning with gcc 3.2). 2002-10-11 Jan-Ake Larsson * special.c: Fix DEBUG, prototypes, and code pruning * vf.c, set.c, pk.c, io.c, font.c, draw.c: Fix DEBUG * misc.c, dvi.c, pagequeue.c, dvipng.h, dvipng.c: Fix pagelist and DEBUG 2002-09-20 Jan-Ake Larsson * dvipng.h: change font structures, add dvi struct, remove old global variables, include relevant bits of config.h, restructure somewhat * dvipng.c: remove explicit vf stack * special.c: use dvi struct * misc.c: minor changes * io.c: close file descriptors, not FILE pointers. * draw.c: simplify, remove explicit vf stack. * set.c: use dvi struct, remove explicit dvi stack. * vf.c: use mmap, remove explicit vf stack. * pk.c: use mmap * font.c: enable dvi struct, prepare for mmap (file descriptors, not FILE pointers), explicit vf stack removed. * dvi.c: use dvi struct * Makefile: config.h removed * config.h, klibtool, klibtool.config: removed. 2002-08-30 Jan-Ake Larsson * dvi.c: fix bug in STRSIZE zap * vf.c: simplify, fix debug info, zap STRSIZE limit * misc.c: Fix background transparency * dvipng.h, draw.c: Fix FormFeed bug (outfilename wrong) * set.c: Fix FormFeed bug (outfilename wrong), and background transparency 2002-08-29 Jan-Ake Larsson * dvipng.h: type changes, dvi-io abstraction * color.c: comment changed * dvipng.c: dvi-io abstraction * font.c: type changes, STRSIZE killed * io.c: ReadCommand and CommandLength moved to dvi.c, preparations for mmap * set.c: type changes * vf.c, pk.c: prepare for mmap, type changes * pagequeue.c: type change * misc.c: dvi fopen moved to dvi.c, type changes * Makefile: pagelist.o gone, dvi.o new * draw.c: SetVF moved to vf.c, type and dvi-io abstraction changes * commands.h: added length and debug texts * dvi.c: Functionality moved from pagelist.c and misc.c to dvi.c. Still needs work, but is initial stab at proper abstraction of dvi-reading stuff. STRSIZE killed. * pagelist.c: Functionality moved to dvi.c * special.c: DoSpecial now takes a const char* argument, as opposed to before. 2002-08-19 Jan-Ake Larsson * misc.c: Added -mode switch 2002-08-14 Jan-Ake Larsson * dvipng.h: VF additions, general cleanup * dvipng.c: Small adjustments connected to the VF support * config.h: Remove unnecessary things * pagelist.c: Simplifications * color.c: Comment changed * special.c, set.c: Scale always equal h/v * Makefile: Make vf.o * io.c: Start pre-conversion to mmap. Much still to be done. * misc.c, set.c, font.c, pk.c, draw.c: Adjust for VF support * vf.c: VF support added to dvipng 2002-06-24 Jan-Ake Larsson * Makefile: Cleaned. Vacuumed, in fact. 2002-06-19 Jan-Ake Larsson * pagelist.c: remove Debug bug (!) 2002-06-13 Jan-Ake Larsson * Makefile: new object files * special.c, set.c, dvipng.h: cleanup * misc.c (ActualFactor): moved to font.c + cleanup * font.c (ActualFactor): moved here from misc.c * draw.c, dvipng.c, pagelist.c: functionality from dvipng.c spread to these three * pagequeue.c, pages.c: functionality moved from pages.c to pagequeue.c * commands.h: minor adjustments 2002-06-12 Jan-Ake Larsson * special.c: on unimplemented \special, give pixel position * misc.c: Bugfix + literal response on stdin interface * font.c, dvipng.h: Font handling fixed * dvipng.c: prompt on stdin interface 2002-06-11 Jan-Ake Larsson * set.c (SetChar): load chars on PASS_DRAW -T -O bug fixed 2002-06-11 Jan-Ake Larsson * set.c: Cleanup. Still buggy wrt -O, though. * Makefile: DEBUG on for now, postamble.? removed * postamble.c: Postamble is no longer read * pages.c: Improve page handling: now a queue, not an unordered set * font.c: Improve font handling: search for fonts only when used * dvipng.h: Cleanup * dvipng.c: Major rewrite: page handling improved * misc.c: Fix DVI init + cleanup 2002-05-30 Jan-Ake Larsson * misc.c: Transparent border: '-bd' * dvipng.h, set.c: Tiding up + transparent border * dvipng.c, font.c: Tidying up 2002-05-29 Jan-Ake Larsson * color.c: Fix cmyk->rgb. * misc.c: Add '-fg' and '-bg'. * font.c: Tidy up 2002-05-29 Jan-Ake Larsson * dvipng.h: Tidying up, and new global vars * io.c: Tidying up * papersiz.c: Pagesize matters, adapted from dvips * pages.c: Page choosing, from dvips. Not sufficient for our purposes, but a start * dvipng.c, color.c, Makefile, misc.c, set.c: Changed to make pagesize (-T), offset (-O), page choosing (-pp), and output file (-o) work. 2002-05-27 Jan-Ake Larsson * pk.c: Changed comments * .cvsignore, special.c, set.c, postamble.c, pk.c, misc.c, io.c, font.c, dvipng.c, color.c, commands.h, dvipng.h: Initial version * config.h, Makefile: Initial version, to be replaced by autoconf'ism * klibtool.config, klibtool: Included for now. To be removed. color.c0000664000175000017500000003214214747675053011646 0ustar janla64janla64/* color.c */ /************************************************************************ Part of the dvipng distribution This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . Copyright (C) 2002-2015,2019 Jan-Åke Larsson ************************************************************************/ #include "dvipng.h" /* * Color. We delete and recreate the gdImage for each new page. This * means that the stack must contain rgb value not color index. * Besides, the current antialiasing implementation needs rgb anyway. */ struct colorname { struct colorname *next; char* color; char name[1]; } *colornamep=NULL,*xcp=NULL; const char *colordef[]={"xcolor.sty","dvipsnam.def", "svgnam.def","x11nam.def",NULL}; char *xcpname=NULL; void initcolor(void) { csp = 1; cstack[0].red=255; cstack[0].green=255; cstack[0].blue=255; cstack[1].red=0; cstack[1].green=0; cstack[1].blue=0; } static struct colorname * NewColor(const char* prefix, int nprefix, char* name, int nname, char* model, int nmodel, char* values, int nvalues) { struct colorname *tmp; if ((tmp=malloc(sizeof(struct colorname)+3+nprefix+nname+nmodel+nvalues))==NULL) Fatal("Cannot malloc space for color name"); tmp->color=tmp->name+nprefix+nname+1; strncpy(tmp->name,prefix,nprefix); strncpy(tmp->name+nprefix,name,nname); tmp->name[nprefix+nname]='\0'; strncpy(tmp->color,model,nmodel); tmp->color[nmodel]=' '; strncpy(tmp->color+nmodel+1,values,nvalues); tmp->color[nmodel+nvalues+1]='\0'; model=tmp->color; while(*model!='\0') { if (*model==',') *model=' '; model++; } DEBUG_PRINT(DEBUG_COLOR,("\n COLOR NAME:\t'%s' '%s'", tmp->name,tmp->color)); return(tmp); } #define FINDWORD(s) while(snext=list; list=tmp; } else if ((pos+15next=list; list=tmp; FINDWORD(pos); } } else { pos++; while (posnext; free(xcp); xcp=next; } if (xcpname!=NULL) { free(xcpname); xcpname=NULL; } } void ClearColorNames(void) { struct colorname *next; while (colornamep) { next=colornamep->next; free(colornamep); colornamep=next; } ClearXColorPrologue(); } void InitXColorPrologue(const char* name) { ClearXColorPrologue(); if ((xcpname=malloc(strlen(name)+1))==NULL) Fatal("cannot malloc memory for xcolor prologue name"); strcpy(xcpname,name); } static struct colorname* LoadXColorPrologue(void) { struct colorname *list=NULL,*tmp=NULL; char *filepath,*pos,*max; const char *prefix=""; char *name,*values,*model; int nprefix=0,nname,nvalues,nmodel; struct filemmap fmmap; boolean mmapfailed; filepath=kpse_find_file(xcpname,kpse_program_text_format,false); if (filepath == NULL) return NULL; DEBUG_PRINT(DEBUG_COLOR,("\n OPEN XCOLOR PROLOGUE:\t'%s'", filepath)); mmapfailed = MmapFile(filepath,&fmmap); free(filepath); if (mmapfailed) return NULL; pos=fmmap.data; max=fmmap.data+fmmap.size; while(posnext=list; list=tmp; } } UnMmapFile(&fmmap); return(list); } #define FTO255(a) ((int) (255*a+0.5)) #define WARN_IF_FAILED(a,b) if (a==b) { page_flags |= PAGE_GAVE_WARN; \ Warning("missing color-specification value, treated as zero"); } #define SKIPSPACES(s) while(s && *s==' ' && *s!='\0') s++ #define NEXTFLOAT255(c) FTO255(strtod(c,&end)); WARN_IF_FAILED(c,end); c=end #define NEXTFLOAT(c) strtod(c,&end); WARN_IF_FAILED(c,end); c=end #define NEXTINT(c) strtol(c,&end,10); WARN_IF_FAILED(c,end); c=end #define NEXTHEX(c) strtol(c,&end,16); WARN_IF_FAILED(c,end); c=end void stringrgb(const char* color,int *r,int *g,int *b) { char* end; static int unloaded=0; DEBUG_PRINT(DEBUG_COLOR,("\n COLOR SPEC:\t'%s' (",color)); SKIPSPACES(color); if (strcmp(color,"Black")==0) { *r = *g = *b = 0; } else if (strcmp(color,"White")==0) { *r = *g = *b = 255; } else if (strncmp(color,"gray ",5)==0) { color+=5; *r = *g = *b = NEXTFLOAT255(color); } else if (strncmp(color,"rgb ",4)==0) { color+=4; *r = NEXTFLOAT255(color); *g = NEXTFLOAT255(color); *b = NEXTFLOAT255(color); } else if (strncmp(color,"Gray ",5)==0) { color+=5; *r = *g = *b = NEXTINT(color); } else if (strncmp(color,"RGB ",4)==0) { color+=4; *r = NEXTINT(color); *g = NEXTINT(color); *b = NEXTINT(color); } else if (strncmp(color,"HTML ",5)==0) { color+=5; *b = NEXTHEX(color); *r = *b/65536; *g = *b/256; *b -= *g*256; *g -= *r*256; } else if (strncmp(color,"cmy ",4)==0 || strncmp(color,"cmyk ",5)==0) { int c,m,y,k; color+=3; k=(*color=='k'); if (k) color++; c = NEXTFLOAT255(color); m = NEXTFLOAT255(color); y = NEXTFLOAT255(color); if (k) k = NEXTFLOAT255(color); *r = c+k<255 ? 255-(c+k) : 0; *g = m+k<255 ? 255-(m+k) : 0; *b = y+k<255 ? 255-(y+k) : 0; } else if (strncmp(color,"hsb ",4)==0 || strncmp(color,"HSB ",4)==0) { /* The hsb and HSB models really need more presicion. Use double and convert back*/ double hu,sa,br,f,R,G,B; int i; if (*color=='h') { color+=4; hu = NEXTFLOAT(color); sa = NEXTFLOAT(color); br = NEXTFLOAT(color); } else { color+=4; hu = (float)NEXTINT(color); hu /= 255; sa = (float)NEXTINT(color); sa /= 255; br = (float)NEXTINT(color); br /= 255; } i=6*hu; f=6*hu-i; switch(i) { case 0: R = br*(1-sa*0); G = br*(1-sa*(1-f)); B = br*(1-sa*1); break; case 1: R = br*(1-sa*f); G = br*(1-sa*0); B = br*(1-sa*1); break; case 2: R = br*(1-sa*1); G = br*(1-sa*0); B = br*(1-sa*(1-f)); break; case 3: R = br*(1-sa*1); G = br*(1-sa*f); B = br*(1-sa*0); break; case 4: R = br*(1-sa*(1-f)); G = br*(1-sa*1); B = br*(1-sa*0); break; case 5: R = br*(1-sa*0); G = br*(1-sa*1); B = br*(1-sa*f); break; default: R = br*(1-sa*0); G = br*(1-sa*1); B = br*(1-sa*1); } *r=FTO255(R); *g=FTO255(G); *b=FTO255(B); } else { /* Model not found, probably a color name */ struct colorname *tmp; if (xcp==NULL && xcpname!=NULL) xcp=LoadXColorPrologue(); tmp=xcp; while(tmp!=NULL && strcmp(color,tmp->name)!=0) tmp=tmp->next; if (tmp==NULL) { while (colornamep==NULL && colordef[unloaded]!=NULL) colornamep=LoadColornameFile(colordef[unloaded++]); tmp=colornamep; while(tmp!=NULL && strcmp(color,tmp->name)!=0) { while (tmp->next==NULL && colordef[unloaded]!=NULL) tmp->next=LoadColornameFile(colordef[unloaded++]); tmp=tmp->next; } } if (tmp!=NULL) { /* Found: one-level recursion */ DEBUG_PRINT(DEBUG_COLOR,("\n ---RECURSION--- ")) stringrgb(tmp->color,r,g,b); } else { /* Not found, warn */ page_flags |= PAGE_GAVE_WARN; Warning("unimplemented color specification '%s'",color); } } DEBUG_PRINT(DEBUG_COLOR,("%d %d %d) ",*r,*g,*b)) } void background(const char* p) { stringrgb(p, &cstack[0].red, &cstack[0].green, &cstack[0].blue); DEBUG_PRINT(DEBUG_COLOR,("\n BACKGROUND:\t(%d %d %d) ", cstack[0].red, cstack[0].green, cstack[0].blue)); } void pushcolor(const char * p) { if ( ++csp == STACK_SIZE ) Fatal("out of color stack space") ; stringrgb(p, &cstack[csp].red, &cstack[csp].green, &cstack[csp].blue); DEBUG_PRINT(DEBUG_COLOR,("\n COLOR PUSH:\t(%d %d %d) ", cstack[csp].red, cstack[csp].green, cstack[csp].blue)) } void popcolor(void) { if (csp > 1) csp--; /* Last color is global */ DEBUG_PRINT(DEBUG_COLOR,("\n COLOR POP\t")) } void resetcolorstack(const char * p) { if ( csp > 1 ) Warning("global color change within nested colors"); csp=0; pushcolor(p) ; DEBUG_PRINT(DEBUG_COLOR,("\n RESET COLOR:\tbottom of stack:")) } void StoreColorStack(struct page_list *tpagep) { int i=0; DEBUG_PRINT(DEBUG_COLOR,("\n STORE COLOR STACK:\t %d ", csp)); tpagep->csp=csp; while ( i <= csp ) { DEBUG_PRINT(DEBUG_COLOR,("\n COLOR STACK:\t %d (%d %d %d) ",i, cstack[i].red, cstack[i].green, cstack[i].blue)); tpagep->cstack[i].red = cstack[i].red; tpagep->cstack[i].green = cstack[i].green; tpagep->cstack[i].blue = cstack[i].blue; i++; } } void ReadColorStack(struct page_list *tpagep) { int i=0; DEBUG_PRINT(DEBUG_COLOR,("\n READ COLOR STACK:\t %d ", tpagep->csp)); csp=tpagep->csp; while ( i <= tpagep->csp ) { DEBUG_PRINT(DEBUG_COLOR,("\n COLOR STACK:\t %d (%d %d %d) ",i, cstack[i].red, cstack[i].green, cstack[i].blue)); cstack[i].red = tpagep->cstack[i].red; cstack[i].green = tpagep->cstack[i].green; cstack[i].blue = tpagep->cstack[i].blue; i++; } } void StoreBackgroundColor(struct page_list *tpagep) { /* Background color changes affect the _whole_ page */ tpagep->cstack[0].red = cstack[0].red; tpagep->cstack[0].green = cstack[0].green; tpagep->cstack[0].blue = cstack[0].blue; } commands.h0000664000175000017500000002063414737210011012313 0ustar janla64janla64/* commands.h */ /************************************************************************ Part of the dvipng distribution This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . Copyright (C) 2002-2008 Jan-Åke Larsson ************************************************************************/ /* DVI COMMANDS */ #define DVIFORMAT 2 #define SETC_000 0 /* typeset character 0 and move right */ #define SETC_127 127 /* typeset character 127 and move right */ #define SET1 128 /* typeset a character and move right */ #define SET2 129 /* ??? */ #define SET3 130 /* ??? */ #define SET4 131 /* ??? */ #define SET_RULE 132 /* typeset a rule and move right */ #define PUT1 133 /* typeset a character */ #define PUT2 134 /* ??? */ #define PUT3 135 /* ??? */ #define PUT4 136 /* ??? */ #define PUT_RULE 137 /* typeset a rule */ #define NOP 138 /* no operation */ #define BOP 139 /* beginning of page */ #define EOP 140 /* ending of page */ #define PUSH 141 /* save the current positions */ #define POP 142 /* restore previous positions */ #define RIGHT1 143 /* move right */ #define RIGHT2 144 /* ??? */ #define RIGHT3 145 /* ??? */ #define RIGHT4 146 /* ??? */ #define W0 147 /* move right by |w| */ #define W1 148 /* move right and set |w| */ #define W2 149 /* ??? */ #define W3 150 /* ??? */ #define W4 151 /* ??? */ #define X0 152 /* move right by |x| */ #define X1 153 /* move right and set |x| */ #define X2 154 /* ??? */ #define X3 155 /* ??? */ #define X4 156 /* ??? */ #define DOWN1 157 /* move down */ #define DOWN2 158 /* ??? */ #define DOWN3 159 /* ??? */ #define DOWN4 160 /* ??? */ #define Y0 161 /* move down by |y| */ #define Y1 162 /* move down and set |y| */ #define Y2 163 /* ??? */ #define Y3 164 /* ??? */ #define Y4 165 /* ??? */ #define Z0 166 /* move down by |z| */ #define Z1 167 /* move down and set |z| */ #define Z2 168 /* ??? */ #define Z3 169 /* ??? */ #define Z4 170 /* ??? */ #define FONT_00 171 /* set current font to 0 */ #define FONT_63 234 /* set current font to 63 */ #define FNT1 235 /* set current font */ #define FNT2 236 /* Same as FNT1, except that arg is 2 bytes */ #define FNT3 237 /* Same as FNT1, except that arg is 3 bytes */ #define FNT4 238 /* Same as FNT1, except that arg is 4 bytes */ #define XXX1 239 /* extension to \.DVI primitives */ #define XXX2 240 /* Like XXX1, but 0<=k<65536 */ #define XXX3 241 /* Like XXX1, but 0<=k<@t$2^{24}$@> */ #define XXX4 242 /* potentially long extension to \.DVI primitives */ #define FNT_DEF1 243 /* define the meaning of a font number */ #define FNT_DEF2 244 /* ??? */ #define FNT_DEF3 245 /* ??? */ #define FNT_DEF4 246 /* ??? */ #define PRE 247 /* preamble */ #define POST 248 /* postamble beginning */ #define POST_POST 249 /* postamble ending */ /* undefined_commands 250,251,252,253,254,255 */ EXTERN const int8_t dvi_commandlength[256] #ifdef MAIN ={ 1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, /* SETC_000 --- SETC_127 */ 2,3,4,5,9, /* SET1 --- SET4, SET_RULE */ 2,3,4,5,9, /* PUT1 --- PUT4, PUT_RULE */ 1,45,1,1,1, /* NOP, BOP, EOP, PUSH, POP */ 2,3,4,5, /* RIGHT1 --- RIGHT4 */ 1,2,3,4,5, /* W0 --- W4 */ 1,2,3,4,5, /* X0 --- X4 */ 2,3,4,5, /* DOWN1 --- DOWN4 */ 1,2,3,4,5, /* Y0 --- Y4 */ 1,2,3,4,5, /* Z0 --- Z4 */ 1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1, 1,1,1,1, /* FONT_00 --- FONT_63 */ 2,3,4,5, /* FNT1 --- FNT4 */ 2,3,4,5, /* XXX1 --- XXX4 + special string */ 16,17,18,19, /* FNT_DEF1 --- FNT_DEF4 + font name */ 15, /* PRE + TeX comment */ 29, /* POST */ 10, /* POST_POST minimum */ -1,-1,-1,-1,-1,-1 /* undefined */ } #endif ; EXTERN const char* dvi_commands[256] #ifdef MAIN ={ "SETC_000","SETC_001","SETC_002","SETC_003","SETC_004", "SETC_005","SETC_006","SETC_007","SETC_008","SETC_009", "SETC_010","SETC_011","SETC_012","SETC_013","SETC_014", "SETC_015","SETC_016","SETC_017","SETC_018","SETC_019", "SETC_020","SETC_021","SETC_022","SETC_023","SETC_024", "SETC_025","SETC_026","SETC_027","SETC_028","SETC_029", "SETC_030","SETC_031","SETC_032","SETC_033","SETC_034", "SETC_035","SETC_036","SETC_037","SETC_038","SETC_039", "SETC_040","SETC_041","SETC_042","SETC_043","SETC_044", "SETC_045","SETC_046","SETC_047","SETC_048","SETC_049", "SETC_050","SETC_051","SETC_052","SETC_053","SETC_054", "SETC_055","SETC_056","SETC_057","SETC_058","SETC_059", "SETC_060","SETC_061","SETC_062","SETC_063","SETC_064", "SETC_065","SETC_066","SETC_067","SETC_068","SETC_069", "SETC_070","SETC_071","SETC_072","SETC_073","SETC_074", "SETC_075","SETC_076","SETC_077","SETC_078","SETC_079", "SETC_080","SETC_081","SETC_082","SETC_083","SETC_084", "SETC_085","SETC_086","SETC_087","SETC_088","SETC_089", "SETC_090","SETC_091","SETC_092","SETC_093","SETC_094", "SETC_095","SETC_096","SETC_097","SETC_098","SETC_099", "SETC_100","SETC_101","SETC_102","SETC_103","SETC_104", "SETC_105","SETC_106","SETC_107","SETC_108","SETC_109", "SETC_110","SETC_111","SETC_112","SETC_113","SETC_114", "SETC_115","SETC_116","SETC_117","SETC_118","SETC_119", "SETC_120","SETC_121","SETC_122","SETC_123","SETC_124", "SETC_125","SETC_126","SETC_127", "SET1","SET2","SET3","SET4","SET_RULE", "PUT1","PUT2","PUT3","PUT4","PUT_RULE", "NOP","BOP","EOP","PUSH","POP", "RIGHT1","RIGHT2","RIGHT3","RIGHT4", "W0","W1","W2","W3","W4", "X0","X1","X2","X3","X4", "DOWN1","DOWN2","DOWN3","DOWN4", "Y0","Y1","Y2","Y3","Y4", "Z0","Z1","Z2","Z3","Z4", "FONT_00","FONT_01","FONT_02","FONT_03","FONT_04", "FONT_05","FONT_06","FONT_07","FONT_08","FONT_09", "FONT_10","FONT_11","FONT_12","FONT_13","FONT_14", "FONT_15","FONT_16","FONT_17","FONT_18","FONT_19", "FONT_20","FONT_21","FONT_22","FONT_23","FONT_24", "FONT_25","FONT_26","FONT_27","FONT_28","FONT_29", "FONT_30","FONT_31","FONT_32","FONT_33","FONT_34", "FONT_35","FONT_36","FONT_37","FONT_38","FONT_39", "FONT_40","FONT_41","FONT_42","FONT_43","FONT_44", "FONT_45","FONT_46","FONT_47","FONT_48","FONT_49", "FONT_50","FONT_51","FONT_52","FONT_53","FONT_54", "FONT_55","FONT_56","FONT_57","FONT_58","FONT_59", "FONT_60","FONT_61","FONT_62","FONT_63", "FNT1","FNT2","FNT3","FNT4", "XXX1","XXX2","XXX3","XXX4", "FNT_DEF1","FNT_DEF2","FNT_DEF3","FNT_DEF4", "PRE","POST","POST_POST", "UNDEF_250","UNDEF_251","UNDEF_252","UNDEF_253","UNDEF_254","UNDEF_255" } #endif ; config.guess0000700000175000017500000014051214747712072012662 0ustar janla64janla64#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2022 Free Software Foundation, Inc. # shellcheck disable=SC2006,SC2268 # see below for rationale timestamp='2022-01-09' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # https://git.savannah.gnu.org/cgit/config.git/plain/config.guess # # Please send patches to . # The "shellcheck disable" line above the timestamp inhibits complaints # about features and limitations of the classic Bourne shell that were # superseded or lifted in POSIX. However, this script identifies a wide # variety of pre-POSIX systems that do not have POSIX shells at all, and # even some reasonably current systems (Solaris 10 as case-in-point) still # have a pre-POSIX /bin/sh. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2022 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi # Just in case it came from the environment. GUESS= # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. tmp= # shellcheck disable=SC2172 trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15 set_cc_for_build() { # prevent multiple calls if $tmp is already set test "$tmp" && return 0 : "${TMPDIR=/tmp}" # shellcheck disable=SC2039,SC3028 { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } dummy=$tmp/dummy case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in ,,) echo "int x;" > "$dummy.c" for driver in cc gcc c89 c99 ; do if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then CC_FOR_BUILD=$driver break fi done if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac } # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if test -f /.attbin/uname ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case $UNAME_SYSTEM in Linux|GNU|GNU/*) LIBC=unknown set_cc_for_build cat <<-EOF > "$dummy.c" #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #elif defined(__GLIBC__) LIBC=gnu #else #include /* First heuristic to detect musl libc. */ #ifdef __DEFINED_va_list LIBC=musl #endif #endif EOF cc_set_libc=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` eval "$cc_set_libc" # Second heuristic to detect musl libc. if [ "$LIBC" = unknown ] && command -v ldd >/dev/null && ldd --version 2>&1 | grep -q ^musl; then LIBC=musl fi # If the system lacks a compiler, then just pick glibc. # We could probably try harder. if [ "$LIBC" = unknown ]; then LIBC=gnu fi ;; esac # Note: order is significant - the case branches are not exclusive. case $UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ /sbin/sysctl -n hw.machine_arch 2>/dev/null || \ /usr/sbin/sysctl -n hw.machine_arch 2>/dev/null || \ echo unknown)` case $UNAME_MACHINE_ARCH in aarch64eb) machine=aarch64_be-unknown ;; armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; earmv*) arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'` endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'` machine=${arch}${endian}-unknown ;; *) machine=$UNAME_MACHINE_ARCH-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently (or will in the future) and ABI. case $UNAME_MACHINE_ARCH in earm*) os=netbsdelf ;; arm*|i386|m68k|ns32k|sh3*|sparc|vax) set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # Determine ABI tags. case $UNAME_MACHINE_ARCH in earm*) expr='s/^earmv[0-9]/-eabi/;s/eb$//' abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"` ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case $UNAME_VERSION in Debian*) release='-gnu' ;; *) release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. GUESS=$machine-${os}${release}${abi-} ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-bitrig$UNAME_RELEASE ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-openbsd$UNAME_RELEASE ;; *:SecBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/SecBSD.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-secbsd$UNAME_RELEASE ;; *:LibertyBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-libertybsd$UNAME_RELEASE ;; *:MidnightBSD:*:*) GUESS=$UNAME_MACHINE-unknown-midnightbsd$UNAME_RELEASE ;; *:ekkoBSD:*:*) GUESS=$UNAME_MACHINE-unknown-ekkobsd$UNAME_RELEASE ;; *:SolidBSD:*:*) GUESS=$UNAME_MACHINE-unknown-solidbsd$UNAME_RELEASE ;; *:OS108:*:*) GUESS=$UNAME_MACHINE-unknown-os108_$UNAME_RELEASE ;; macppc:MirBSD:*:*) GUESS=powerpc-unknown-mirbsd$UNAME_RELEASE ;; *:MirBSD:*:*) GUESS=$UNAME_MACHINE-unknown-mirbsd$UNAME_RELEASE ;; *:Sortix:*:*) GUESS=$UNAME_MACHINE-unknown-sortix ;; *:Twizzler:*:*) GUESS=$UNAME_MACHINE-unknown-twizzler ;; *:Redox:*:*) GUESS=$UNAME_MACHINE-unknown-redox ;; mips:OSF1:*.*) GUESS=mips-dec-osf1 ;; alpha:OSF1:*:*) # Reset EXIT trap before exiting to avoid spurious non-zero exit code. trap '' 0 case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case $ALPHA_CPU_TYPE in "EV4 (21064)") UNAME_MACHINE=alpha ;; "EV4.5 (21064)") UNAME_MACHINE=alpha ;; "LCA4 (21066/21068)") UNAME_MACHINE=alpha ;; "EV5 (21164)") UNAME_MACHINE=alphaev5 ;; "EV5.6 (21164A)") UNAME_MACHINE=alphaev56 ;; "EV5.6 (21164PC)") UNAME_MACHINE=alphapca56 ;; "EV5.7 (21164PC)") UNAME_MACHINE=alphapca57 ;; "EV6 (21264)") UNAME_MACHINE=alphaev6 ;; "EV6.7 (21264A)") UNAME_MACHINE=alphaev67 ;; "EV6.8CB (21264C)") UNAME_MACHINE=alphaev68 ;; "EV6.8AL (21264B)") UNAME_MACHINE=alphaev68 ;; "EV6.8CX (21264D)") UNAME_MACHINE=alphaev68 ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE=alphaev69 ;; "EV7 (21364)") UNAME_MACHINE=alphaev7 ;; "EV7.9 (21364A)") UNAME_MACHINE=alphaev79 ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. OSF_REL=`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` GUESS=$UNAME_MACHINE-dec-osf$OSF_REL ;; Amiga*:UNIX_System_V:4.0:*) GUESS=m68k-unknown-sysv4 ;; *:[Aa]miga[Oo][Ss]:*:*) GUESS=$UNAME_MACHINE-unknown-amigaos ;; *:[Mm]orph[Oo][Ss]:*:*) GUESS=$UNAME_MACHINE-unknown-morphos ;; *:OS/390:*:*) GUESS=i370-ibm-openedition ;; *:z/VM:*:*) GUESS=s390-ibm-zvmoe ;; *:OS400:*:*) GUESS=powerpc-ibm-os400 ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) GUESS=arm-acorn-riscix$UNAME_RELEASE ;; arm*:riscos:*:*|arm*:RISCOS:*:*) GUESS=arm-unknown-riscos ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) GUESS=hppa1.1-hitachi-hiuxmpp ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. case `(/bin/universe) 2>/dev/null` in att) GUESS=pyramid-pyramid-sysv3 ;; *) GUESS=pyramid-pyramid-bsd ;; esac ;; NILE*:*:*:dcosx) GUESS=pyramid-pyramid-svr4 ;; DRS?6000:unix:4.0:6*) GUESS=sparc-icl-nx6 ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) GUESS=sparc-icl-nx7 ;; esac ;; s390x:SunOS:*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=$UNAME_MACHINE-ibm-solaris2$SUN_REL ;; sun4H:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-hal-solaris2$SUN_REL ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-sun-solaris2$SUN_REL ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) GUESS=i386-pc-auroraux$UNAME_RELEASE ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) set_cc_for_build SUN_ARCH=i386 # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -m64 -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH=x86_64 fi fi SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=$SUN_ARCH-pc-solaris2$SUN_REL ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-sun-solaris3$SUN_REL ;; sun4*:SunOS:*:*) case `/usr/bin/arch -k` in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/'` GUESS=sparc-sun-sunos$SUN_REL ;; sun3*:SunOS:*:*) GUESS=m68k-sun-sunos$UNAME_RELEASE ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3 case `/bin/arch` in sun3) GUESS=m68k-sun-sunos$UNAME_RELEASE ;; sun4) GUESS=sparc-sun-sunos$UNAME_RELEASE ;; esac ;; aushp:SunOS:*:*) GUESS=sparc-auspex-sunos$UNAME_RELEASE ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) GUESS=m68k-milan-mint$UNAME_RELEASE ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) GUESS=m68k-hades-mint$UNAME_RELEASE ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) GUESS=m68k-unknown-mint$UNAME_RELEASE ;; m68k:machten:*:*) GUESS=m68k-apple-machten$UNAME_RELEASE ;; powerpc:machten:*:*) GUESS=powerpc-apple-machten$UNAME_RELEASE ;; RISC*:Mach:*:*) GUESS=mips-dec-mach_bsd4.3 ;; RISC*:ULTRIX:*:*) GUESS=mips-dec-ultrix$UNAME_RELEASE ;; VAX*:ULTRIX*:*:*) GUESS=vax-dec-ultrix$UNAME_RELEASE ;; 2020:CLIX:*:* | 2430:CLIX:*:*) GUESS=clipper-intergraph-clix$UNAME_RELEASE ;; mips:*:*:UMIPS | mips:*:*:RISCos) set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`"$dummy" "$dummyarg"` && { echo "$SYSTEM_NAME"; exit; } GUESS=mips-mips-riscos$UNAME_RELEASE ;; Motorola:PowerMAX_OS:*:*) GUESS=powerpc-motorola-powermax ;; Motorola:*:4.3:PL8-*) GUESS=powerpc-harris-powermax ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) GUESS=powerpc-harris-powermax ;; Night_Hawk:Power_UNIX:*:*) GUESS=powerpc-harris-powerunix ;; m88k:CX/UX:7*:*) GUESS=m88k-harris-cxux7 ;; m88k:*:4*:R4*) GUESS=m88k-motorola-sysv4 ;; m88k:*:3*:R3*) GUESS=m88k-motorola-sysv3 ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if test "$UNAME_PROCESSOR" = mc88100 || test "$UNAME_PROCESSOR" = mc88110 then if test "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx || \ test "$TARGET_BINARY_INTERFACE"x = x then GUESS=m88k-dg-dgux$UNAME_RELEASE else GUESS=m88k-dg-dguxbcs$UNAME_RELEASE fi else GUESS=i586-dg-dgux$UNAME_RELEASE fi ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) GUESS=m88k-dolphin-sysv3 ;; M88*:*:R3*:*) # Delta 88k system running SVR3 GUESS=m88k-motorola-sysv3 ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) GUESS=m88k-tektronix-sysv3 ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) GUESS=m68k-tektronix-bsd ;; *:IRIX*:*:*) IRIX_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/g'` GUESS=mips-sgi-irix$IRIX_REL ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. GUESS=romp-ibm-aix # uname -m gives an 8 hex-code CPU id ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) GUESS=i386-ibm-aix ;; ia64:AIX:*:*) if test -x /usr/bin/oslevel ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=$UNAME_VERSION.$UNAME_RELEASE fi GUESS=$UNAME_MACHINE-ibm-aix$IBM_REV ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` then GUESS=$SYSTEM_NAME else GUESS=rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then GUESS=rs6000-ibm-aix3.2.4 else GUESS=rs6000-ibm-aix3.2 fi ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if test -x /usr/bin/lslpp ; then IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | \ awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV=$UNAME_VERSION.$UNAME_RELEASE fi GUESS=$IBM_ARCH-ibm-aix$IBM_REV ;; *:AIX:*:*) GUESS=rs6000-ibm-aix ;; ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) GUESS=romp-ibm-bsd4.4 ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and GUESS=romp-ibm-bsd$UNAME_RELEASE # 4.3 with uname added to ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) GUESS=rs6000-bull-bosx ;; DPX/2?00:B.O.S.:*:*) GUESS=m68k-bull-sysv3 ;; 9000/[34]??:4.3bsd:1.*:*) GUESS=m68k-hp-bsd ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) GUESS=m68k-hp-bsd4.4 ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'` case $UNAME_MACHINE in 9000/31?) HP_ARCH=m68000 ;; 9000/[34]??) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if test -x /usr/bin/getconf; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case $sc_cpu_version in 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case $sc_kernel_bits in 32) HP_ARCH=hppa2.0n ;; 64) HP_ARCH=hppa2.0w ;; '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 esac ;; esac fi if test "$HP_ARCH" = ""; then set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if test "$HP_ARCH" = hppa2.0w then set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH=hppa2.0w else HP_ARCH=hppa64 fi fi GUESS=$HP_ARCH-hp-hpux$HPUX_REV ;; ia64:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'` GUESS=ia64-hp-hpux$HPUX_REV ;; 3050*:HI-UX:*:*) set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } GUESS=unknown-hitachi-hiuxwe2 ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) GUESS=hppa1.1-hp-bsd ;; 9000/8??:4.3bsd:*:*) GUESS=hppa1.0-hp-bsd ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) GUESS=hppa1.0-hp-mpeix ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) GUESS=hppa1.1-hp-osf ;; hp8??:OSF1:*:*) GUESS=hppa1.0-hp-osf ;; i*86:OSF1:*:*) if test -x /usr/sbin/sysversion ; then GUESS=$UNAME_MACHINE-unknown-osf1mk else GUESS=$UNAME_MACHINE-unknown-osf1 fi ;; parisc*:Lites*:*:*) GUESS=hppa1.1-hp-lites ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) GUESS=c1-convex-bsd ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) GUESS=c34-convex-bsd ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) GUESS=c38-convex-bsd ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) GUESS=c4-convex-bsd ;; CRAY*Y-MP:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=ymp-cray-unicos$CRAY_REL ;; CRAY*[A-Z]90:*:*:*) echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=t90-cray-unicos$CRAY_REL ;; CRAY*T3E:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=alphaev5-cray-unicosmk$CRAY_REL ;; CRAY*SV1:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=sv1-cray-unicos$CRAY_REL ;; *:UNICOS/mp:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=craynv-cray-unicosmp$CRAY_REL ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'` GUESS=${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL} ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` GUESS=sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL} ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) GUESS=$UNAME_MACHINE-pc-bsdi$UNAME_RELEASE ;; sparc*:BSD/OS:*:*) GUESS=sparc-unknown-bsdi$UNAME_RELEASE ;; *:BSD/OS:*:*) GUESS=$UNAME_MACHINE-unknown-bsdi$UNAME_RELEASE ;; arm:FreeBSD:*:*) UNAME_PROCESSOR=`uname -p` set_cc_for_build if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabi else FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabihf fi ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case $UNAME_PROCESSOR in amd64) UNAME_PROCESSOR=x86_64 ;; i386) UNAME_PROCESSOR=i586 ;; esac FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL ;; i*:CYGWIN*:*) GUESS=$UNAME_MACHINE-pc-cygwin ;; *:MINGW64*:*) GUESS=$UNAME_MACHINE-pc-mingw64 ;; *:MINGW*:*) GUESS=$UNAME_MACHINE-pc-mingw32 ;; *:MSYS*:*) GUESS=$UNAME_MACHINE-pc-msys ;; i*:PW*:*) GUESS=$UNAME_MACHINE-pc-pw32 ;; *:SerenityOS:*:*) GUESS=$UNAME_MACHINE-pc-serenity ;; *:Interix*:*) case $UNAME_MACHINE in x86) GUESS=i586-pc-interix$UNAME_RELEASE ;; authenticamd | genuineintel | EM64T) GUESS=x86_64-unknown-interix$UNAME_RELEASE ;; IA64) GUESS=ia64-unknown-interix$UNAME_RELEASE ;; esac ;; i*:UWIN*:*) GUESS=$UNAME_MACHINE-pc-uwin ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) GUESS=x86_64-pc-cygwin ;; prep*:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=powerpcle-unknown-solaris2$SUN_REL ;; *:GNU:*:*) # the GNU system GNU_ARCH=`echo "$UNAME_MACHINE" | sed -e 's,[-/].*$,,'` GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's,/.*$,,'` GUESS=$GNU_ARCH-unknown-$LIBC$GNU_REL ;; *:GNU/*:*:*) # other systems with GNU libc and userland GNU_SYS=`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"` GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_MACHINE-unknown-$GNU_SYS$GNU_REL-$LIBC ;; *:Minix:*:*) GUESS=$UNAME_MACHINE-unknown-minix ;; aarch64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC=gnulibc1 ; fi GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; arc:Linux:*:* | arceb:Linux:*:* | arc32:Linux:*:* | arc64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; arm*:Linux:*:*) set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then GUESS=$UNAME_MACHINE-unknown-linux-$LIBC else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabi else GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabihf fi fi ;; avr32*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; cris:Linux:*:*) GUESS=$UNAME_MACHINE-axis-linux-$LIBC ;; crisv32:Linux:*:*) GUESS=$UNAME_MACHINE-axis-linux-$LIBC ;; e2k:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; frv:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; hexagon:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; i*86:Linux:*:*) GUESS=$UNAME_MACHINE-pc-linux-$LIBC ;; ia64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; k1om:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; loongarch32:Linux:*:* | loongarch64:Linux:*:* | loongarchx32:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; m32r*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; m68*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; mips:Linux:*:* | mips64:Linux:*:*) set_cc_for_build IS_GLIBC=0 test x"${LIBC}" = xgnu && IS_GLIBC=1 sed 's/^ //' << EOF > "$dummy.c" #undef CPU #undef mips #undef mipsel #undef mips64 #undef mips64el #if ${IS_GLIBC} && defined(_ABI64) LIBCABI=gnuabi64 #else #if ${IS_GLIBC} && defined(_ABIN32) LIBCABI=gnuabin32 #else LIBCABI=${LIBC} #endif #endif #if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 CPU=mipsisa64r6 #else #if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 CPU=mipsisa32r6 #else #if defined(__mips64) CPU=mips64 #else CPU=mips #endif #endif #endif #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) MIPS_ENDIAN=el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) MIPS_ENDIAN= #else MIPS_ENDIAN= #endif #endif EOF cc_set_vars=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'` eval "$cc_set_vars" test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; } ;; mips64el:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; openrisc*:Linux:*:*) GUESS=or1k-unknown-linux-$LIBC ;; or32:Linux:*:* | or1k*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; padre:Linux:*:*) GUESS=sparc-unknown-linux-$LIBC ;; parisc64:Linux:*:* | hppa64:Linux:*:*) GUESS=hppa64-unknown-linux-$LIBC ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) GUESS=hppa1.1-unknown-linux-$LIBC ;; PA8*) GUESS=hppa2.0-unknown-linux-$LIBC ;; *) GUESS=hppa-unknown-linux-$LIBC ;; esac ;; ppc64:Linux:*:*) GUESS=powerpc64-unknown-linux-$LIBC ;; ppc:Linux:*:*) GUESS=powerpc-unknown-linux-$LIBC ;; ppc64le:Linux:*:*) GUESS=powerpc64le-unknown-linux-$LIBC ;; ppcle:Linux:*:*) GUESS=powerpcle-unknown-linux-$LIBC ;; riscv32:Linux:*:* | riscv32be:Linux:*:* | riscv64:Linux:*:* | riscv64be:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; s390:Linux:*:* | s390x:Linux:*:*) GUESS=$UNAME_MACHINE-ibm-linux-$LIBC ;; sh64*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; sh*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; sparc:Linux:*:* | sparc64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; tile*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; vax:Linux:*:*) GUESS=$UNAME_MACHINE-dec-linux-$LIBC ;; x86_64:Linux:*:*) set_cc_for_build LIBCABI=$LIBC if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __ILP32__'; echo IS_X32; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_X32 >/dev/null then LIBCABI=${LIBC}x32 fi fi GUESS=$UNAME_MACHINE-pc-linux-$LIBCABI ;; xtensa*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. GUESS=i386-sequent-sysv4 ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. GUESS=$UNAME_MACHINE-pc-sysv4.2uw$UNAME_VERSION ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. GUESS=$UNAME_MACHINE-pc-os2-emx ;; i*86:XTS-300:*:STOP) GUESS=$UNAME_MACHINE-unknown-stop ;; i*86:atheos:*:*) GUESS=$UNAME_MACHINE-unknown-atheos ;; i*86:syllable:*:*) GUESS=$UNAME_MACHINE-pc-syllable ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) GUESS=i386-unknown-lynxos$UNAME_RELEASE ;; i*86:*DOS:*:*) GUESS=$UNAME_MACHINE-pc-msdosdjgpp ;; i*86:*:4.*:*) UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then GUESS=$UNAME_MACHINE-univel-sysv$UNAME_REL else GUESS=$UNAME_MACHINE-pc-sysv$UNAME_REL fi ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac GUESS=$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 GUESS=$UNAME_MACHINE-pc-sco$UNAME_REL else GUESS=$UNAME_MACHINE-pc-sysv32 fi ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configure will decide that # this is a cross-build. GUESS=i586-pc-msdosdjgpp ;; Intel:Mach:3*:*) GUESS=i386-pc-mach3 ;; paragon:*:*:*) GUESS=i860-intel-osf1 ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then GUESS=i860-stardent-sysv$UNAME_RELEASE # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. GUESS=i860-unknown-sysv$UNAME_RELEASE # Unknown i860-SVR4 fi ;; mini*:CTIX:SYS*5:*) # "miniframe" GUESS=m68010-convergent-sysv ;; mc68k:UNIX:SYSTEM5:3.51m) GUESS=m68k-convergent-sysv ;; M680?0:D-NIX:5.3:*) GUESS=m68k-diab-dnix ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) GUESS=m68k-unknown-lynxos$UNAME_RELEASE ;; mc68030:UNIX_System_V:4.*:*) GUESS=m68k-atari-sysv4 ;; TSUNAMI:LynxOS:2.*:*) GUESS=sparc-unknown-lynxos$UNAME_RELEASE ;; rs6000:LynxOS:2.*:*) GUESS=rs6000-unknown-lynxos$UNAME_RELEASE ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) GUESS=powerpc-unknown-lynxos$UNAME_RELEASE ;; SM[BE]S:UNIX_SV:*:*) GUESS=mips-dde-sysv$UNAME_RELEASE ;; RM*:ReliantUNIX-*:*:*) GUESS=mips-sni-sysv4 ;; RM*:SINIX-*:*:*) GUESS=mips-sni-sysv4 ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` GUESS=$UNAME_MACHINE-sni-sysv4 else GUESS=ns32k-sni-sysv fi ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says GUESS=i586-unisys-sysv4 ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm GUESS=hppa1.1-stratus-sysv4 ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. GUESS=i860-stratus-sysv4 ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. GUESS=$UNAME_MACHINE-stratus-vos ;; *:VOS:*:*) # From Paul.Green@stratus.com. GUESS=hppa1.1-stratus-vos ;; mc68*:A/UX:*:*) GUESS=m68k-apple-aux$UNAME_RELEASE ;; news*:NEWS-OS:6*:*) GUESS=mips-sony-newsos6 ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if test -d /usr/nec; then GUESS=mips-nec-sysv$UNAME_RELEASE else GUESS=mips-unknown-sysv$UNAME_RELEASE fi ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. GUESS=powerpc-be-beos ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. GUESS=powerpc-apple-beos ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. GUESS=i586-pc-beos ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. GUESS=i586-pc-haiku ;; x86_64:Haiku:*:*) GUESS=x86_64-unknown-haiku ;; SX-4:SUPER-UX:*:*) GUESS=sx4-nec-superux$UNAME_RELEASE ;; SX-5:SUPER-UX:*:*) GUESS=sx5-nec-superux$UNAME_RELEASE ;; SX-6:SUPER-UX:*:*) GUESS=sx6-nec-superux$UNAME_RELEASE ;; SX-7:SUPER-UX:*:*) GUESS=sx7-nec-superux$UNAME_RELEASE ;; SX-8:SUPER-UX:*:*) GUESS=sx8-nec-superux$UNAME_RELEASE ;; SX-8R:SUPER-UX:*:*) GUESS=sx8r-nec-superux$UNAME_RELEASE ;; SX-ACE:SUPER-UX:*:*) GUESS=sxace-nec-superux$UNAME_RELEASE ;; Power*:Rhapsody:*:*) GUESS=powerpc-apple-rhapsody$UNAME_RELEASE ;; *:Rhapsody:*:*) GUESS=$UNAME_MACHINE-apple-rhapsody$UNAME_RELEASE ;; arm64:Darwin:*:*) GUESS=aarch64-apple-darwin$UNAME_RELEASE ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` case $UNAME_PROCESSOR in unknown) UNAME_PROCESSOR=powerpc ;; esac if command -v xcode-select > /dev/null 2> /dev/null && \ ! xcode-select --print-path > /dev/null 2> /dev/null ; then # Avoid executing cc if there is no toolchain installed as # cc will be a stub that puts up a graphical alert # prompting the user to install developer tools. CC_FOR_BUILD=no_compiler_found else set_cc_for_build fi if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_PPC >/dev/null then UNAME_PROCESSOR=powerpc fi elif test "$UNAME_PROCESSOR" = i386 ; then # uname -m returns i386 or x86_64 UNAME_PROCESSOR=$UNAME_MACHINE fi GUESS=$UNAME_PROCESSOR-apple-darwin$UNAME_RELEASE ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi GUESS=$UNAME_PROCESSOR-$UNAME_MACHINE-nto-qnx$UNAME_RELEASE ;; *:QNX:*:4*) GUESS=i386-pc-qnx ;; NEO-*:NONSTOP_KERNEL:*:*) GUESS=neo-tandem-nsk$UNAME_RELEASE ;; NSE-*:NONSTOP_KERNEL:*:*) GUESS=nse-tandem-nsk$UNAME_RELEASE ;; NSR-*:NONSTOP_KERNEL:*:*) GUESS=nsr-tandem-nsk$UNAME_RELEASE ;; NSV-*:NONSTOP_KERNEL:*:*) GUESS=nsv-tandem-nsk$UNAME_RELEASE ;; NSX-*:NONSTOP_KERNEL:*:*) GUESS=nsx-tandem-nsk$UNAME_RELEASE ;; *:NonStop-UX:*:*) GUESS=mips-compaq-nonstopux ;; BS2000:POSIX*:*:*) GUESS=bs2000-siemens-sysv ;; DS/*:UNIX_System_V:*:*) GUESS=$UNAME_MACHINE-$UNAME_SYSTEM-$UNAME_RELEASE ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "${cputype-}" = 386; then UNAME_MACHINE=i386 elif test "x${cputype-}" != x; then UNAME_MACHINE=$cputype fi GUESS=$UNAME_MACHINE-unknown-plan9 ;; *:TOPS-10:*:*) GUESS=pdp10-unknown-tops10 ;; *:TENEX:*:*) GUESS=pdp10-unknown-tenex ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) GUESS=pdp10-dec-tops20 ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) GUESS=pdp10-xkl-tops20 ;; *:TOPS-20:*:*) GUESS=pdp10-unknown-tops20 ;; *:ITS:*:*) GUESS=pdp10-unknown-its ;; SEI:*:*:SEIUX) GUESS=mips-sei-seiux$UNAME_RELEASE ;; *:DragonFly:*:*) DRAGONFLY_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_MACHINE-unknown-dragonfly$DRAGONFLY_REL ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case $UNAME_MACHINE in A*) GUESS=alpha-dec-vms ;; I*) GUESS=ia64-dec-vms ;; V*) GUESS=vax-dec-vms ;; esac ;; *:XENIX:*:SysV) GUESS=i386-pc-xenix ;; i*86:skyos:*:*) SKYOS_REL=`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'` GUESS=$UNAME_MACHINE-pc-skyos$SKYOS_REL ;; i*86:rdos:*:*) GUESS=$UNAME_MACHINE-pc-rdos ;; i*86:Fiwix:*:*) GUESS=$UNAME_MACHINE-pc-fiwix ;; *:AROS:*:*) GUESS=$UNAME_MACHINE-unknown-aros ;; x86_64:VMkernel:*:*) GUESS=$UNAME_MACHINE-unknown-esx ;; amd64:Isilon\ OneFS:*:*) GUESS=x86_64-unknown-onefs ;; *:Unleashed:*:*) GUESS=$UNAME_MACHINE-unknown-unleashed$UNAME_RELEASE ;; esac # Do we have a guess based on uname results? if test "x$GUESS" != x; then echo "$GUESS" exit fi # No uname command or uname output not recognized. set_cc_for_build cat > "$dummy.c" < #include #endif #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) #if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) #include #if defined(_SIZE_T_) || defined(SIGLOST) #include #endif #endif #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) #if !defined (ultrix) #include #if defined (BSD) #if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); #else #if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); #else printf ("vax-dec-bsd\n"); exit (0); #endif #endif #else printf ("vax-dec-bsd\n"); exit (0); #endif #else #if defined(_SIZE_T_) || defined(SIGLOST) struct utsname un; uname (&un); printf ("vax-dec-ultrix%s\n", un.release); exit (0); #else printf ("vax-dec-ultrix\n"); exit (0); #endif #endif #endif #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) #if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) #if defined(_SIZE_T_) || defined(SIGLOST) struct utsname *un; uname (&un); printf ("mips-dec-ultrix%s\n", un.release); exit (0); #else printf ("mips-dec-ultrix\n"); exit (0); #endif #endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; } echo "$0: unable to guess system type" >&2 case $UNAME_MACHINE:$UNAME_SYSTEM in mips:Linux | mips64:Linux) # If we got here on MIPS GNU/Linux, output extra information. cat >&2 <&2 <&2 </dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = "$UNAME_MACHINE" UNAME_RELEASE = "$UNAME_RELEASE" UNAME_SYSTEM = "$UNAME_SYSTEM" UNAME_VERSION = "$UNAME_VERSION" EOF fi exit 1 # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: config.h0000664000175000017500000001426014747712643012000 0ustar janla64janla64/* config.h. Generated from config.h.in by configure. */ /* config.h.in. Generated from configure.ac by autoheader. */ /* Define as 1 to get the debug (-d) option. */ #define DEBUG 1 /* The environment setting for $SELFAUTODIR */ /* #undef ENV_SELFAUTODIR */ /* The environment setting for $SELFAUTOLOC */ /* #undef ENV_SELFAUTOLOC */ /* The environment setting for $SELFAUTOPARENT */ /* #undef ENV_SELFAUTOPARENT */ /* Define as the path to GhostScript. */ #define GS_PATH "gs" /* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */ /* #undef HAVE_DOPRNT */ /* Define to 1 if you have the `dup2' function. */ #define HAVE_DUP2 1 /* Define to 1 if you have the header file. */ #define HAVE_FCNTL_H 1 /* Define to 1 if you have the `fork' function. */ #define HAVE_FORK 1 /* Define to 1 if you have freetype2 */ #define HAVE_FT2 1 /* Define to 1 if you have the `ftime' function. */ /* #undef HAVE_FTIME */ /* Define to 1 if you have the `FT_Library_Version' function. */ #define HAVE_FT_LIBRARY_VERSION 1 /* Define to 1 if you have the `gdImageCreateFromJpeg' function. */ #define HAVE_GDIMAGECREATEFROMJPEG 1 /* Define to 1 if you have the `gdImageCreateFromPngPtr' function. */ #define HAVE_GDIMAGECREATEFROMPNGPTR 1 /* Define to 1 if you have the `gdImageCreateTrueColor' function. */ #define HAVE_GDIMAGECREATETRUECOLOR 1 /* Define to 1 if you have the `gdImageGif' function. */ #define HAVE_GDIMAGEGIF 1 /* Define to 1 if you have the `gdImagePngEx' function. */ #define HAVE_GDIMAGEPNGEX 1 /* Define to 1 if you have the header file. */ #define HAVE_GD_H 1 /* Define to 1 if you have the `getpagesize' function. */ #define HAVE_GETPAGESIZE 1 /* Define to 1 if you have the `gettimeofday' function. */ /* #undef HAVE_GETTIMEOFDAY */ /* Define to 1 if you have the header file. */ #define HAVE_INTTYPES_H 1 /* Define to 1 if you have the header file. */ #define HAVE_KPATHSEA_KPATHSEA_H 1 /* Define to 1 if your kpathsea has kpse_enc_format */ #define HAVE_KPSE_ENC_FORMATS 1 /* Define to 1 if you have the `gd' library (-lgd). */ #define HAVE_LIBGD 1 /* Define to 1 if you have the header file. */ #define HAVE_LIBGEN_H 1 /* Define to 1 if you have the `kpathsea' library (-lkpathsea). */ #define HAVE_LIBKPATHSEA 1 /* Define to 1 if you have the `m' library (-lm). */ #define HAVE_LIBM 1 /* Define to 1 if you have the `png' library (-lpng). */ #define HAVE_LIBPNG 1 /* Define to 1 if you have the `z' library (-lz). */ #define HAVE_LIBZ 1 /* Define to 1 if you have the `memset' function. */ #define HAVE_MEMSET 1 /* Define to 1 if you have a working `mmap' system call. */ #define HAVE_MMAP 1 /* Define to 1 if you have the `munmap' function. */ #define HAVE_MUNMAP 1 /* Define to 1 if you have the header file. */ #define HAVE_PNG_H 1 /* Define to 1 if you have the `pow' function. */ #define HAVE_POW 1 /* Define to 1 if you have the `putenv' function. */ #define HAVE_PUTENV 1 /* Define to 1 if stdbool.h conforms to C99. */ #define HAVE_STDBOOL_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDINT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDIO_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDLIB_H 1 /* Define to 1 if you have the `strchr' function. */ #define HAVE_STRCHR 1 /* Define to 1 if you have the header file. */ #define HAVE_STRINGS_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STRING_H 1 /* Define to 1 if you have the `strncasecmp' function. */ #define HAVE_STRNCASECMP 1 /* Define to 1 if you have the `strrchr' function. */ #define HAVE_STRRCHR 1 /* Define to 1 if you have the `strstr' function. */ #define HAVE_STRSTR 1 /* Define to 1 if you have the `strtol' function. */ #define HAVE_STRTOL 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_PARAM_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_STAT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TIME_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TYPES_H 1 /* Define to 1 if you have that is POSIX.1 compatible. */ #define HAVE_SYS_WAIT_H 1 /* Define to 1 if you have the `texlive_gs_init' function. */ /* #undef HAVE_TEXLIVE_GS_INIT */ /* Define to 1 if you have the header file. */ #define HAVE_UNISTD_H 1 /* Define to 1 if you have the `vfork' function. */ #define HAVE_VFORK 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_VFORK_H */ /* Define to 1 if you have the `vprintf' function. */ #define HAVE_VPRINTF 1 /* Define to 1 if `fork' works. */ #define HAVE_WORKING_FORK 1 /* Define to 1 if `vfork' works. */ #define HAVE_WORKING_VFORK 1 /* Define to 1 if the system has the type `_Bool'. */ #define HAVE__BOOL 1 /* Define to the address where bug reports for this package should be sent. */ #define PACKAGE_BUGREPORT "dvipng@nongnu.org" /* Define to the full name of this package. */ #define PACKAGE_NAME "dvipng" /* Define to the full name and version of this package. */ #define PACKAGE_STRING "dvipng 1.18" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "dvipng" /* Define to the home page for this package. */ #define PACKAGE_URL "" /* Define to the version of this package. */ #define PACKAGE_VERSION "1.18" /* Define to 1 if all of the C90 standard headers exist (not just the ones required in a freestanding environment). This macro is provided for backward compatibility; new code need not use it. */ #define STDC_HEADERS 1 /* Define as 1 to get execution time output. */ /* #undef TIMING */ /* Define to empty if `const' does not conform to ANSI C. */ /* #undef const */ /* Define to `long long' if does not define it. */ /* #undef int64_t */ /* Define as a signed integer type capable of holding a process identifier. */ /* #undef pid_t */ /* Define to `unsigned int' if does not define. */ /* #undef size_t */ /* Define to `unsigned long long' if does not define it. */ /* #undef uint64_t */ /* Define as `fork' if `vfork' does not work. */ /* #undef vfork */ config.h.in0000664000175000017500000001347014747641202012377 0ustar janla64janla64/* config.h.in. Generated from configure.ac by autoheader. */ /* Define as 1 to get the debug (-d) option. */ #undef DEBUG /* The environment setting for $SELFAUTODIR */ #undef ENV_SELFAUTODIR /* The environment setting for $SELFAUTOLOC */ #undef ENV_SELFAUTOLOC /* The environment setting for $SELFAUTOPARENT */ #undef ENV_SELFAUTOPARENT /* Define as the path to GhostScript. */ #undef GS_PATH /* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */ #undef HAVE_DOPRNT /* Define to 1 if you have the `dup2' function. */ #undef HAVE_DUP2 /* Define to 1 if you have the header file. */ #undef HAVE_FCNTL_H /* Define to 1 if you have the `fork' function. */ #undef HAVE_FORK /* Define to 1 if you have freetype2 */ #undef HAVE_FT2 /* Define to 1 if you have the `ftime' function. */ #undef HAVE_FTIME /* Define to 1 if you have the `FT_Library_Version' function. */ #undef HAVE_FT_LIBRARY_VERSION /* Define to 1 if you have the `gdImageCreateFromJpeg' function. */ #undef HAVE_GDIMAGECREATEFROMJPEG /* Define to 1 if you have the `gdImageCreateFromPngPtr' function. */ #undef HAVE_GDIMAGECREATEFROMPNGPTR /* Define to 1 if you have the `gdImageCreateTrueColor' function. */ #undef HAVE_GDIMAGECREATETRUECOLOR /* Define to 1 if you have the `gdImageGif' function. */ #undef HAVE_GDIMAGEGIF /* Define to 1 if you have the `gdImagePngEx' function. */ #undef HAVE_GDIMAGEPNGEX /* Define to 1 if you have the header file. */ #undef HAVE_GD_H /* Define to 1 if you have the `getpagesize' function. */ #undef HAVE_GETPAGESIZE /* Define to 1 if you have the `gettimeofday' function. */ #undef HAVE_GETTIMEOFDAY /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_KPATHSEA_KPATHSEA_H /* Define to 1 if your kpathsea has kpse_enc_format */ #undef HAVE_KPSE_ENC_FORMATS /* Define to 1 if you have the `gd' library (-lgd). */ #undef HAVE_LIBGD /* Define to 1 if you have the header file. */ #undef HAVE_LIBGEN_H /* Define to 1 if you have the `kpathsea' library (-lkpathsea). */ #undef HAVE_LIBKPATHSEA /* Define to 1 if you have the `m' library (-lm). */ #undef HAVE_LIBM /* Define to 1 if you have the `png' library (-lpng). */ #undef HAVE_LIBPNG /* Define to 1 if you have the `z' library (-lz). */ #undef HAVE_LIBZ /* Define to 1 if you have the `memset' function. */ #undef HAVE_MEMSET /* Define to 1 if you have a working `mmap' system call. */ #undef HAVE_MMAP /* Define to 1 if you have the `munmap' function. */ #undef HAVE_MUNMAP /* Define to 1 if you have the header file. */ #undef HAVE_PNG_H /* Define to 1 if you have the `pow' function. */ #undef HAVE_POW /* Define to 1 if you have the `putenv' function. */ #undef HAVE_PUTENV /* Define to 1 if stdbool.h conforms to C99. */ #undef HAVE_STDBOOL_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDIO_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the `strchr' function. */ #undef HAVE_STRCHR /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the `strncasecmp' function. */ #undef HAVE_STRNCASECMP /* Define to 1 if you have the `strrchr' function. */ #undef HAVE_STRRCHR /* Define to 1 if you have the `strstr' function. */ #undef HAVE_STRSTR /* Define to 1 if you have the `strtol' function. */ #undef HAVE_STRTOL /* Define to 1 if you have the header file. */ #undef HAVE_SYS_PARAM_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TIME_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have that is POSIX.1 compatible. */ #undef HAVE_SYS_WAIT_H /* Define to 1 if you have the `texlive_gs_init' function. */ #undef HAVE_TEXLIVE_GS_INIT /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if you have the `vfork' function. */ #undef HAVE_VFORK /* Define to 1 if you have the header file. */ #undef HAVE_VFORK_H /* Define to 1 if you have the `vprintf' function. */ #undef HAVE_VPRINTF /* Define to 1 if `fork' works. */ #undef HAVE_WORKING_FORK /* Define to 1 if `vfork' works. */ #undef HAVE_WORKING_VFORK /* Define to 1 if the system has the type `_Bool'. */ #undef HAVE__BOOL /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to 1 if all of the C90 standard headers exist (not just the ones required in a freestanding environment). This macro is provided for backward compatibility; new code need not use it. */ #undef STDC_HEADERS /* Define as 1 to get execution time output. */ #undef TIMING /* Define to empty if `const' does not conform to ANSI C. */ #undef const /* Define to `long long' if does not define it. */ #undef int64_t /* Define as a signed integer type capable of holding a process identifier. */ #undef pid_t /* Define to `unsigned int' if does not define. */ #undef size_t /* Define to `unsigned long long' if does not define it. */ #undef uint64_t /* Define as `fork' if `vfork' does not work. */ #undef vfork config.sub0000700000175000017500000010511614747712072012326 0ustar janla64janla64#! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2022 Free Software Foundation, Inc. # shellcheck disable=SC2006,SC2268 # see below for rationale timestamp='2022-01-03' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches to . # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # https://git.savannah.gnu.org/cgit/config.git/plain/config.sub # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. # The "shellcheck disable" line above the timestamp inhibits complaints # about features and limitations of the classic Bourne shell that were # superseded or lifted in POSIX. However, this script identifies a wide # variety of pre-POSIX systems that do not have POSIX shells at all, and # even some reasonably current systems (Solaris 10 as case-in-point) still # have a pre-POSIX /bin/sh. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS Canonicalize a configuration name. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2022 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; *local*) # First pass through any local machine types. echo "$1" exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Split fields of configuration type # shellcheck disable=SC2162 saved_IFS=$IFS IFS="-" read field1 field2 field3 field4 <&2 exit 1 ;; *-*-*-*) basic_machine=$field1-$field2 basic_os=$field3-$field4 ;; *-*-*) # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two # parts maybe_os=$field2-$field3 case $maybe_os in nto-qnx* | linux-* | uclinux-uclibc* \ | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \ | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \ | storm-chaos* | os2-emx* | rtmk-nova*) basic_machine=$field1 basic_os=$maybe_os ;; android-linux) basic_machine=$field1-unknown basic_os=linux-android ;; *) basic_machine=$field1-$field2 basic_os=$field3 ;; esac ;; *-*) # A lone config we happen to match not fitting any pattern case $field1-$field2 in decstation-3100) basic_machine=mips-dec basic_os= ;; *-*) # Second component is usually, but not always the OS case $field2 in # Prevent following clause from handling this valid os sun*os*) basic_machine=$field1 basic_os=$field2 ;; zephyr*) basic_machine=$field1-unknown basic_os=$field2 ;; # Manufacturers dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \ | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \ | unicom* | ibm* | next | hp | isi* | apollo | altos* \ | convergent* | ncr* | news | 32* | 3600* | 3100* \ | hitachi* | c[123]* | convex* | sun | crds | omron* | dg \ | ultra | tti* | harris | dolphin | highlevel | gould \ | cbm | ns | masscomp | apple | axis | knuth | cray \ | microblaze* | sim | cisco \ | oki | wec | wrs | winbond) basic_machine=$field1-$field2 basic_os= ;; *) basic_machine=$field1 basic_os=$field2 ;; esac ;; esac ;; *) # Convert single-component short-hands not valid as part of # multi-component configurations. case $field1 in 386bsd) basic_machine=i386-pc basic_os=bsd ;; a29khif) basic_machine=a29k-amd basic_os=udi ;; adobe68k) basic_machine=m68010-adobe basic_os=scout ;; alliant) basic_machine=fx80-alliant basic_os= ;; altos | altos3068) basic_machine=m68k-altos basic_os= ;; am29k) basic_machine=a29k-none basic_os=bsd ;; amdahl) basic_machine=580-amdahl basic_os=sysv ;; amiga) basic_machine=m68k-unknown basic_os= ;; amigaos | amigados) basic_machine=m68k-unknown basic_os=amigaos ;; amigaunix | amix) basic_machine=m68k-unknown basic_os=sysv4 ;; apollo68) basic_machine=m68k-apollo basic_os=sysv ;; apollo68bsd) basic_machine=m68k-apollo basic_os=bsd ;; aros) basic_machine=i386-pc basic_os=aros ;; aux) basic_machine=m68k-apple basic_os=aux ;; balance) basic_machine=ns32k-sequent basic_os=dynix ;; blackfin) basic_machine=bfin-unknown basic_os=linux ;; cegcc) basic_machine=arm-unknown basic_os=cegcc ;; convex-c1) basic_machine=c1-convex basic_os=bsd ;; convex-c2) basic_machine=c2-convex basic_os=bsd ;; convex-c32) basic_machine=c32-convex basic_os=bsd ;; convex-c34) basic_machine=c34-convex basic_os=bsd ;; convex-c38) basic_machine=c38-convex basic_os=bsd ;; cray) basic_machine=j90-cray basic_os=unicos ;; crds | unos) basic_machine=m68k-crds basic_os= ;; da30) basic_machine=m68k-da30 basic_os= ;; decstation | pmax | pmin | dec3100 | decstatn) basic_machine=mips-dec basic_os= ;; delta88) basic_machine=m88k-motorola basic_os=sysv3 ;; dicos) basic_machine=i686-pc basic_os=dicos ;; djgpp) basic_machine=i586-pc basic_os=msdosdjgpp ;; ebmon29k) basic_machine=a29k-amd basic_os=ebmon ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson basic_os=ose ;; gmicro) basic_machine=tron-gmicro basic_os=sysv ;; go32) basic_machine=i386-pc basic_os=go32 ;; h8300hms) basic_machine=h8300-hitachi basic_os=hms ;; h8300xray) basic_machine=h8300-hitachi basic_os=xray ;; h8500hms) basic_machine=h8500-hitachi basic_os=hms ;; harris) basic_machine=m88k-harris basic_os=sysv3 ;; hp300 | hp300hpux) basic_machine=m68k-hp basic_os=hpux ;; hp300bsd) basic_machine=m68k-hp basic_os=bsd ;; hppaosf) basic_machine=hppa1.1-hp basic_os=osf ;; hppro) basic_machine=hppa1.1-hp basic_os=proelf ;; i386mach) basic_machine=i386-mach basic_os=mach ;; isi68 | isi) basic_machine=m68k-isi basic_os=sysv ;; m68knommu) basic_machine=m68k-unknown basic_os=linux ;; magnum | m3230) basic_machine=mips-mips basic_os=sysv ;; merlin) basic_machine=ns32k-utek basic_os=sysv ;; mingw64) basic_machine=x86_64-pc basic_os=mingw64 ;; mingw32) basic_machine=i686-pc basic_os=mingw32 ;; mingw32ce) basic_machine=arm-unknown basic_os=mingw32ce ;; monitor) basic_machine=m68k-rom68k basic_os=coff ;; morphos) basic_machine=powerpc-unknown basic_os=morphos ;; moxiebox) basic_machine=moxie-unknown basic_os=moxiebox ;; msdos) basic_machine=i386-pc basic_os=msdos ;; msys) basic_machine=i686-pc basic_os=msys ;; mvs) basic_machine=i370-ibm basic_os=mvs ;; nacl) basic_machine=le32-unknown basic_os=nacl ;; ncr3000) basic_machine=i486-ncr basic_os=sysv4 ;; netbsd386) basic_machine=i386-pc basic_os=netbsd ;; netwinder) basic_machine=armv4l-rebel basic_os=linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony basic_os=newsos ;; news1000) basic_machine=m68030-sony basic_os=newsos ;; necv70) basic_machine=v70-nec basic_os=sysv ;; nh3000) basic_machine=m68k-harris basic_os=cxux ;; nh[45]000) basic_machine=m88k-harris basic_os=cxux ;; nindy960) basic_machine=i960-intel basic_os=nindy ;; mon960) basic_machine=i960-intel basic_os=mon960 ;; nonstopux) basic_machine=mips-compaq basic_os=nonstopux ;; os400) basic_machine=powerpc-ibm basic_os=os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson basic_os=ose ;; os68k) basic_machine=m68k-none basic_os=os68k ;; paragon) basic_machine=i860-intel basic_os=osf ;; parisc) basic_machine=hppa-unknown basic_os=linux ;; psp) basic_machine=mipsallegrexel-sony basic_os=psp ;; pw32) basic_machine=i586-unknown basic_os=pw32 ;; rdos | rdos64) basic_machine=x86_64-pc basic_os=rdos ;; rdos32) basic_machine=i386-pc basic_os=rdos ;; rom68k) basic_machine=m68k-rom68k basic_os=coff ;; sa29200) basic_machine=a29k-amd basic_os=udi ;; sei) basic_machine=mips-sei basic_os=seiux ;; sequent) basic_machine=i386-sequent basic_os= ;; sps7) basic_machine=m68k-bull basic_os=sysv2 ;; st2000) basic_machine=m68k-tandem basic_os= ;; stratus) basic_machine=i860-stratus basic_os=sysv4 ;; sun2) basic_machine=m68000-sun basic_os= ;; sun2os3) basic_machine=m68000-sun basic_os=sunos3 ;; sun2os4) basic_machine=m68000-sun basic_os=sunos4 ;; sun3) basic_machine=m68k-sun basic_os= ;; sun3os3) basic_machine=m68k-sun basic_os=sunos3 ;; sun3os4) basic_machine=m68k-sun basic_os=sunos4 ;; sun4) basic_machine=sparc-sun basic_os= ;; sun4os3) basic_machine=sparc-sun basic_os=sunos3 ;; sun4os4) basic_machine=sparc-sun basic_os=sunos4 ;; sun4sol2) basic_machine=sparc-sun basic_os=solaris2 ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun basic_os= ;; sv1) basic_machine=sv1-cray basic_os=unicos ;; symmetry) basic_machine=i386-sequent basic_os=dynix ;; t3e) basic_machine=alphaev5-cray basic_os=unicos ;; t90) basic_machine=t90-cray basic_os=unicos ;; toad1) basic_machine=pdp10-xkl basic_os=tops20 ;; tpf) basic_machine=s390x-ibm basic_os=tpf ;; udi29k) basic_machine=a29k-amd basic_os=udi ;; ultra3) basic_machine=a29k-nyu basic_os=sym1 ;; v810 | necv810) basic_machine=v810-nec basic_os=none ;; vaxv) basic_machine=vax-dec basic_os=sysv ;; vms) basic_machine=vax-dec basic_os=vms ;; vsta) basic_machine=i386-pc basic_os=vsta ;; vxworks960) basic_machine=i960-wrs basic_os=vxworks ;; vxworks68) basic_machine=m68k-wrs basic_os=vxworks ;; vxworks29k) basic_machine=a29k-wrs basic_os=vxworks ;; xbox) basic_machine=i686-pc basic_os=mingw32 ;; ymp) basic_machine=ymp-cray basic_os=unicos ;; *) basic_machine=$1 basic_os= ;; esac ;; esac # Decode 1-component or ad-hoc basic machines case $basic_machine in # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) cpu=hppa1.1 vendor=winbond ;; op50n) cpu=hppa1.1 vendor=oki ;; op60c) cpu=hppa1.1 vendor=oki ;; ibm*) cpu=i370 vendor=ibm ;; orion105) cpu=clipper vendor=highlevel ;; mac | mpw | mac-mpw) cpu=m68k vendor=apple ;; pmac | pmac-mpw) cpu=powerpc vendor=apple ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) cpu=m68000 vendor=att ;; 3b*) cpu=we32k vendor=att ;; bluegene*) cpu=powerpc vendor=ibm basic_os=cnk ;; decsystem10* | dec10*) cpu=pdp10 vendor=dec basic_os=tops10 ;; decsystem20* | dec20*) cpu=pdp10 vendor=dec basic_os=tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) cpu=m68k vendor=motorola ;; dpx2*) cpu=m68k vendor=bull basic_os=sysv3 ;; encore | umax | mmax) cpu=ns32k vendor=encore ;; elxsi) cpu=elxsi vendor=elxsi basic_os=${basic_os:-bsd} ;; fx2800) cpu=i860 vendor=alliant ;; genix) cpu=ns32k vendor=ns ;; h3050r* | hiux*) cpu=hppa1.1 vendor=hitachi basic_os=hiuxwe2 ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) cpu=m68000 vendor=hp ;; hp9k3[2-9][0-9]) cpu=m68k vendor=hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) cpu=hppa1.1 vendor=hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp cpu=hppa1.1 vendor=hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp cpu=hppa1.1 vendor=hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) cpu=hppa1.1 vendor=hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; i*86v32) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv32 ;; i*86v4*) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv4 ;; i*86v) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv ;; i*86sol2) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=solaris2 ;; j90 | j90-cray) cpu=j90 vendor=cray basic_os=${basic_os:-unicos} ;; iris | iris4d) cpu=mips vendor=sgi case $basic_os in irix*) ;; *) basic_os=irix4 ;; esac ;; miniframe) cpu=m68000 vendor=convergent ;; *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*) cpu=m68k vendor=atari basic_os=mint ;; news-3600 | risc-news) cpu=mips vendor=sony basic_os=newsos ;; next | m*-next) cpu=m68k vendor=next case $basic_os in openstep*) ;; nextstep*) ;; ns2*) basic_os=nextstep2 ;; *) basic_os=nextstep3 ;; esac ;; np1) cpu=np1 vendor=gould ;; op50n-* | op60c-*) cpu=hppa1.1 vendor=oki basic_os=proelf ;; pa-hitachi) cpu=hppa1.1 vendor=hitachi basic_os=hiuxwe2 ;; pbd) cpu=sparc vendor=tti ;; pbb) cpu=m68k vendor=tti ;; pc532) cpu=ns32k vendor=pc532 ;; pn) cpu=pn vendor=gould ;; power) cpu=power vendor=ibm ;; ps2) cpu=i386 vendor=ibm ;; rm[46]00) cpu=mips vendor=siemens ;; rtpc | rtpc-*) cpu=romp vendor=ibm ;; sde) cpu=mipsisa32 vendor=sde basic_os=${basic_os:-elf} ;; simso-wrs) cpu=sparclite vendor=wrs basic_os=vxworks ;; tower | tower-32) cpu=m68k vendor=ncr ;; vpp*|vx|vx-*) cpu=f301 vendor=fujitsu ;; w65) cpu=w65 vendor=wdc ;; w89k-*) cpu=hppa1.1 vendor=winbond basic_os=proelf ;; none) cpu=none vendor=none ;; leon|leon[3-9]) cpu=sparc vendor=$basic_machine ;; leon-*|leon[3-9]-*) cpu=sparc vendor=`echo "$basic_machine" | sed 's/-.*//'` ;; *-*) # shellcheck disable=SC2162 saved_IFS=$IFS IFS="-" read cpu vendor <&2 exit 1 ;; esac ;; esac # Here we canonicalize certain aliases for manufacturers. case $vendor in digital*) vendor=dec ;; commodore*) vendor=cbm ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if test x$basic_os != x then # First recognize some ad-hoc cases, or perhaps split kernel-os, or else just # set os. case $basic_os in gnu/linux*) kernel=linux os=`echo "$basic_os" | sed -e 's|gnu/linux|gnu|'` ;; os2-emx) kernel=os2 os=`echo "$basic_os" | sed -e 's|os2-emx|emx|'` ;; nto-qnx*) kernel=nto os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'` ;; *-*) # shellcheck disable=SC2162 saved_IFS=$IFS IFS="-" read kernel os <&2 exit 1 ;; esac # As a final step for OS-related things, validate the OS-kernel combination # (given a valid OS), if there is a kernel. case $kernel-$os in linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* \ | linux-musl* | linux-relibc* | linux-uclibc* ) ;; uclinux-uclibc* ) ;; -dietlibc* | -newlib* | -musl* | -relibc* | -uclibc* ) # These are just libc implementations, not actual OSes, and thus # require a kernel. echo "Invalid configuration \`$1': libc \`$os' needs explicit kernel." 1>&2 exit 1 ;; kfreebsd*-gnu* | kopensolaris*-gnu*) ;; vxworks-simlinux | vxworks-simwindows | vxworks-spe) ;; nto-qnx*) ;; os2-emx) ;; *-eabi* | *-gnueabi*) ;; -*) # Blank kernel with real OS is always fine. ;; *-*) echo "Invalid configuration \`$1': Kernel \`$kernel' not known to work with OS \`$os'." 1>&2 exit 1 ;; esac # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. case $vendor in unknown) case $cpu-$os in *-riscix*) vendor=acorn ;; *-sunos*) vendor=sun ;; *-cnk* | *-aix*) vendor=ibm ;; *-beos*) vendor=be ;; *-hpux*) vendor=hp ;; *-mpeix*) vendor=hp ;; *-hiux*) vendor=hitachi ;; *-unos*) vendor=crds ;; *-dgux*) vendor=dg ;; *-luna*) vendor=omron ;; *-genix*) vendor=ns ;; *-clix*) vendor=intergraph ;; *-mvs* | *-opened*) vendor=ibm ;; *-os400*) vendor=ibm ;; s390-* | s390x-*) vendor=ibm ;; *-ptx*) vendor=sequent ;; *-tpf*) vendor=ibm ;; *-vxsim* | *-vxworks* | *-windiss*) vendor=wrs ;; *-aux*) vendor=apple ;; *-hms*) vendor=hitachi ;; *-mpw* | *-macos*) vendor=apple ;; *-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*) vendor=atari ;; *-vos*) vendor=stratus ;; esac ;; esac echo "$cpu-$vendor-${kernel:+$kernel-}$os" exit # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: configure0000775000175000017500000063044114747712063012272 0ustar janla64janla64#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.71 for dvipng 1.18. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, # Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="as_nop=: if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else \$as_nop case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ) then : else \$as_nop exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 blah=\$(echo \$(echo blah)) test x\"\$blah\" = xblah || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null then : as_have_required=yes else $as_nop as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null then : else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$as_shell as_have_required=yes if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null then : break 2 fi fi done;; esac as_found=false done IFS=$as_save_IFS if $as_found then : else $as_nop if { test -f "$SHELL" || test -f "$SHELL.exe"; } && as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$SHELL as_have_required=yes fi fi if test "x$CONFIG_SHELL" != x then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno then : printf "%s\n" "$0: This script requires a shell more modern than all" printf "%s\n" "$0: the shells that I found on your system." if test ${ZSH_VERSION+y} ; then printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." else printf "%s\n" "$0: Please tell bug-autoconf@gnu.org and dvipng@nongnu.org $0: about your system, including any error possibly output $0: before this message. Then install a modern shell, or $0: manually run the script under such a shell if you do $0: have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_nop # --------- # Do nothing but, unlike ":", preserve the value of $?. as_fn_nop () { return $? } as_nop=as_fn_nop # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else $as_nop as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_nop # --------- # Do nothing but, unlike ":", preserve the value of $?. as_fn_nop () { return $? } as_nop=as_fn_nop # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_echo='printf %s\n' as_echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='dvipng' PACKAGE_TARNAME='dvipng' PACKAGE_VERSION='1.18' PACKAGE_STRING='dvipng 1.18' PACKAGE_BUGREPORT='dvipng@nongnu.org' PACKAGE_URL='' ac_unique_file="dvipng.c" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_STDIO_H # include #endif #ifdef HAVE_STDLIB_H # include #endif #ifdef HAVE_STRING_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_header_c_list= ac_func_c_list= ac_subst_vars='LTLIBOBJS KPSEWHICH INSTALL_INFO MAKEINFO_MACROS MAKEINFO INSTALL_BIN_TARGET LIBOBJS POW_LIB host_os host_vendor host_cpu host build_os build_vendor build_cpu build FT2_LIBS FT2_CFLAGS PKG_CONFIG_LIBDIR PKG_CONFIG_PATH PKG_CONFIG PSFONTS_O EGREP GREP GS LN_S INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC SET_MAKE target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir runstatedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_debug enable_timing with_gs enable_selfauto_set ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR FT2_CFLAGS FT2_LIBS' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -runstatedir | --runstatedir | --runstatedi | --runstated \ | --runstate | --runstat | --runsta | --runst | --runs \ | --run | --ru | --r) ac_prev=runstatedir ;; -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ | --run=* | --ru=* | --r=*) runstatedir=$ac_optarg ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures dvipng 1.18 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/dvipng] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of dvipng 1.18:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --disable-debug Compile without debug (-d) option --enable-timing Output execution time of dvipng --enable-selfauto-set This option will make the final binary explicitly set the $SELFAUTO... variables to make it look as dvipng is installed in the main texmf tree, even if it isn't. This is necessary when texmf.cnf only uses $SELFAUTO... variables and dvipng is not installed in the texmf tree. Otherwise, dvipng may not be able to find virtual fonts, or psfonts.map. To find out, first build the binary and do 'make test'. If the test fails, you need this switch. Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-gs=/PATH/TO/gs Hard-wire the location of GhostScript Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path FT2_CFLAGS C compiler flags for FT2, overriding pkg-config FT2_LIBS linker flags for FT2, overriding pkg-config Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for configure.gnu first; this name is used for a wrapper for # Metaconfig's "Configure" on case-insensitive file systems. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF dvipng configure 1.18 generated by GNU Autoconf 2.71 Copyright (C) 2021 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext } then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$3=yes" else $as_nop eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_check_type LINENO TYPE VAR INCLUDES # ------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache # variable VAR accordingly. ac_fn_c_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else $as_nop eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main (void) { if (sizeof ($2)) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main (void) { if (sizeof (($2))) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else $as_nop eval "$3=yes" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_type # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. */ #include #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main (void) { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : eval "$3=yes" else $as_nop eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_c_try_run LINENO # ---------------------- # Try to run conftest.$ac_ext, and return whether this succeeded. Assumes that # executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; } then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: program exited with status $ac_status" >&5 printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run ac_configure_args_raw= for ac_arg do case $ac_arg in *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append ac_configure_args_raw " '$ac_arg'" done case $ac_configure_args_raw in *$as_nl*) ac_safe_unquote= ;; *) ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab. ac_unsafe_a="$ac_unsafe_z#~" ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; esac cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by dvipng $as_me 1.18, which was generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac printf "%s\n" "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Sanitize IFS. IFS=" "" $as_nl" # Save into config.log some information that might help in debugging. { echo printf "%s\n" "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo printf "%s\n" "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then printf "%s\n" "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then printf "%s\n" "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && printf "%s\n" "$as_me: caught signal $ac_signal" printf "%s\n" "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h printf "%s\n" "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. if test -n "$CONFIG_SITE"; then ac_site_files="$CONFIG_SITE" elif test "x$prefix" != xNONE; then ac_site_files="$prefix/share/config.site $prefix/etc/config.site" else ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi for ac_site_file in $ac_site_files do case $ac_site_file in #( */*) : ;; #( *) : ac_site_file=./$ac_site_file ;; esac if test -f "$ac_site_file" && test -r "$ac_site_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 printf "%s\n" "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 printf "%s\n" "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Test code for whether the C compiler supports C89 (global declarations) ac_c_conftest_c89_globals=' /* Does the compiler advertise C89 conformance? Do not test the value of __STDC__, because some compilers set it to 0 while being otherwise adequately conformant. */ #if !defined __STDC__ # error "Compiler does not advertise C89 conformance" #endif #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ struct buf { int x; }; struct buf * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not \xHH hex character constants. These do not provoke an error unfortunately, instead are silently treated as an "x". The following induces an error, until -std is added to get proper ANSI mode. Curiously \x00 != x always comes out true, for an array size at least. It is necessary to write \x00 == 0 to get something that is true only with -std. */ int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) '\''x'\'' int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int), int, int);' # Test code for whether the C compiler supports C89 (body of main). ac_c_conftest_c89_main=' ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); ' # Test code for whether the C compiler supports C99 (global declarations) ac_c_conftest_c99_globals=' // Does the compiler advertise C99 conformance? #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L # error "Compiler does not advertise C99 conformance" #endif #include extern int puts (const char *); extern int printf (const char *, ...); extern int dprintf (int, const char *, ...); extern void *malloc (size_t); // Check varargs macros. These examples are taken from C99 6.10.3.5. // dprintf is used instead of fprintf to avoid needing to declare // FILE and stderr. #define debug(...) dprintf (2, __VA_ARGS__) #define showlist(...) puts (#__VA_ARGS__) #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) static void test_varargs_macros (void) { int x = 1234; int y = 5678; debug ("Flag"); debug ("X = %d\n", x); showlist (The first, second, and third items.); report (x>y, "x is %d but y is %d", x, y); } // Check long long types. #define BIG64 18446744073709551615ull #define BIG32 4294967295ul #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) #if !BIG_OK #error "your preprocessor is broken" #endif #if BIG_OK #else #error "your preprocessor is broken" #endif static long long int bignum = -9223372036854775807LL; static unsigned long long int ubignum = BIG64; struct incomplete_array { int datasize; double data[]; }; struct named_init { int number; const wchar_t *name; double average; }; typedef const char *ccp; static inline int test_restrict (ccp restrict text) { // See if C++-style comments work. // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) continue; return 0; } // Check varargs and va_copy. static bool test_varargs (const char *format, ...) { va_list args; va_start (args, format); va_list args_copy; va_copy (args_copy, args); const char *str = ""; int number = 0; float fnumber = 0; while (*format) { switch (*format++) { case '\''s'\'': // string str = va_arg (args_copy, const char *); break; case '\''d'\'': // int number = va_arg (args_copy, int); break; case '\''f'\'': // float fnumber = va_arg (args_copy, double); break; default: break; } } va_end (args_copy); va_end (args); return *str && number && fnumber; } ' # Test code for whether the C compiler supports C99 (body of main). ac_c_conftest_c99_main=' // Check bool. _Bool success = false; success |= (argc != 0); // Check restrict. if (test_restrict ("String literal") == 0) success = true; char *restrict newvar = "Another string"; // Check varargs. success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234); test_varargs_macros (); // Check flexible array members. struct incomplete_array *ia = malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; // Check named initializers. struct named_init ni = { .number = 34, .name = L"Test wide string", .average = 543.34343, }; ni.number = 58; int dynamic_array[ni.number]; dynamic_array[0] = argv[0][0]; dynamic_array[ni.number - 1] = 543; // work around unused variable warnings ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\'' || dynamic_array[ni.number - 1] != 543); ' # Test code for whether the C compiler supports C11 (global declarations) ac_c_conftest_c11_globals=' // Does the compiler advertise C11 conformance? #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L # error "Compiler does not advertise C11 conformance" #endif // Check _Alignas. char _Alignas (double) aligned_as_double; char _Alignas (0) no_special_alignment; extern char aligned_as_int; char _Alignas (0) _Alignas (int) aligned_as_int; // Check _Alignof. enum { int_alignment = _Alignof (int), int_array_alignment = _Alignof (int[100]), char_alignment = _Alignof (char) }; _Static_assert (0 < -_Alignof (int), "_Alignof is signed"); // Check _Noreturn. int _Noreturn does_not_return (void) { for (;;) continue; } // Check _Static_assert. struct test_static_assert { int x; _Static_assert (sizeof (int) <= sizeof (long int), "_Static_assert does not work in struct"); long int y; }; // Check UTF-8 literals. #define u8 syntax error! char const utf8_literal[] = u8"happens to be ASCII" "another string"; // Check duplicate typedefs. typedef long *long_ptr; typedef long int *long_ptr; typedef long_ptr long_ptr; // Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. struct anonymous { union { struct { int i; int j; }; struct { int k; long int l; } w; }; int m; } v1; ' # Test code for whether the C compiler supports C11 (body of main). ac_c_conftest_c11_main=' _Static_assert ((offsetof (struct anonymous, i) == offsetof (struct anonymous, w.k)), "Anonymous union alignment botch"); v1.i = 2; v1.w.k = 5; ok |= v1.i != 5; ' # Test code for whether the C compiler supports C11 (complete). ac_c_conftest_c11_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} ${ac_c_conftest_c11_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} ${ac_c_conftest_c11_main} return ok; } " # Test code for whether the C compiler supports C99 (complete). ac_c_conftest_c99_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} return ok; } " # Test code for whether the C compiler supports C89 (complete). ac_c_conftest_c89_program="${ac_c_conftest_c89_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} return ok; } " as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H" as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H" as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H" as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H" as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H" as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H" as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H" as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H" as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H" as_fn_append ac_header_c_list " vfork.h vfork_h HAVE_VFORK_H" as_fn_append ac_func_c_list " fork HAVE_FORK" as_fn_append ac_func_c_list " vfork HAVE_VFORK" as_fn_append ac_header_c_list " sys/param.h sys_param_h HAVE_SYS_PARAM_H" as_fn_append ac_func_c_list " getpagesize HAVE_GETPAGESIZE" as_fn_append ac_func_c_list " vprintf HAVE_VPRINTF" # Auxiliary files required by this configure script. ac_aux_files="config.guess config.sub install-sh" # Locations in which to look for auxiliary files. ac_aux_dir_candidates="${srcdir}${PATH_SEPARATOR}${srcdir}/..${PATH_SEPARATOR}${srcdir}/../.." # Search for a directory containing all of the required auxiliary files, # $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates. # If we don't find one directory that contains all the files we need, # we report the set of missing files from the *first* directory in # $ac_aux_dir_candidates and give up. ac_missing_aux_files="" ac_first_candidate=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in $ac_aux_dir_candidates do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5 ac_aux_dir_found=yes ac_install_sh= for ac_aux in $ac_aux_files do # As a special case, if "install-sh" is required, that requirement # can be satisfied by any of "install-sh", "install.sh", or "shtool", # and $ac_install_sh is set appropriately for whichever one is found. if test x"$ac_aux" = x"install-sh" then if test -f "${as_dir}install-sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5 ac_install_sh="${as_dir}install-sh -c" elif test -f "${as_dir}install.sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5 ac_install_sh="${as_dir}install.sh -c" elif test -f "${as_dir}shtool"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5 ac_install_sh="${as_dir}shtool install -c" else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} install-sh" else break fi fi else if test -f "${as_dir}${ac_aux}"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5 else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}" else break fi fi fi done if test "$ac_aux_dir_found" = yes; then ac_aux_dir="$as_dir" break fi ac_first_candidate=false as_found=false done IFS=$as_save_IFS if $as_found then : else $as_nop as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. if test -f "${ac_aux_dir}config.guess"; then ac_config_guess="$SHELL ${ac_aux_dir}config.guess" fi if test -f "${ac_aux_dir}config.sub"; then ac_config_sub="$SHELL ${ac_aux_dir}config.sub" fi if test -f "$ac_aux_dir/configure"; then ac_configure="$SHELL ${ac_aux_dir}configure" fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Check whether --enable-debug was given. if test ${enable_debug+y} then : enableval=$enable_debug; if test "$enableval" = yes ; then printf "%s\n" "#define DEBUG 1" >>confdefs.h fi else $as_nop enable_debug="yes"; printf "%s\n" "#define DEBUG 1" >>confdefs.h fi # Check whether --enable-timing was given. if test ${enable_timing+y} then : enableval=$enable_timing; if test "$enableval" = yes ; then printf "%s\n" "#define TIMING 1" >>confdefs.h fi fi # Checks for programs. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 printf %s "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval test \${ac_cv_prog_make_${ac_make}_set+y} then : printf %s "(cached) " >&6 else $as_nop cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } SET_MAKE= else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. set dummy ${ac_tool_prefix}clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "clang", so it can be a program name with args. set dummy clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi fi test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 printf %s "checking whether the C compiler works... " >&6; } ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else $as_nop ac_file='' fi if test -z "$ac_file" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 printf %s "checking for C compiler default output file name... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 printf "%s\n" "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 printf %s "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else $as_nop { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 printf "%s\n" "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 printf %s "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 printf "%s\n" "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 printf %s "checking for suffix of object files... " >&6; } if test ${ac_cv_objext+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 printf "%s\n" "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes else $as_nop ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_c_compiler_gnu if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 else $as_nop ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes else $as_nop CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else $as_nop ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } if test $ac_test_CFLAGS; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi ac_prog_cc_stdc=no if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c11_program _ACEOF for ac_arg in '' -std=gnu11 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } CC="$CC $ac_cv_prog_cc_c11" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 ac_prog_cc_stdc=c11 fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c99_program _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } CC="$CC $ac_cv_prog_cc_c99" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 ac_prog_cc_stdc=c99 fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c89_program _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } CC="$CC $ac_cv_prog_cc_c89" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 ac_prog_cc_stdc=c89 fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 printf %s "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if test ${ac_cv_path_install+y} then : printf %s "(cached) " >&6 else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac # Account for fact that we put trailing slashes in our PATH walk. case $as_dir in #(( ./ | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir/" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test ${ac_cv_path_install+y}; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 printf "%s\n" "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 printf %s "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 printf "%s\n" "no, using $LN_S" >&6; } fi # Check whether --with-gs was given. if test ${with_gs+y} then : withval=$with_gs; if test "x$withval" != xno ; then # Extract the first word of ""$withval"", so it can be a program name with args. set dummy "$withval"; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_GS+y} then : printf %s "(cached) " >&6 else $as_nop case $GS in [\\/]* | ?:[\\/]*) ac_cv_path_GS="$GS" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_GS="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi GS=$ac_cv_path_GS if test -n "$GS"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GS" >&5 printf "%s\n" "$GS" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi printf "%s\n" "#define GS_PATH \"$GS\"" >>confdefs.h GS_WARN="" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $GS has the pngalpha device" >&5 printf %s "checking whether $GS has the pngalpha device... " >&6; } if $GS -h | grep pngalpha >/dev/null; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } GS_WARN="Your EPS inclusions will be cropped to the boundingbox, and rendered on an opaque background. Upgrade GhostScript to avoid this." { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $GS has the png16m device" >&5 printf %s "checking whether $GS has the png16m device... " >&6; } if $GS -h | grep png16m >/dev/null; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } GS_WARN="Your EPS inclusions may not work. Upgrade/install GhostScript to avoid this." fi fi if test -n "$GS_WARN"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $GS_WARN" >&5 printf "%s\n" "$as_me: WARNING: $GS_WARN" >&2;} fi fi else $as_nop # Extract the first word of "gs", so it can be a program name with args. set dummy gs; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_GS+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$GS"; then ac_cv_prog_GS="$GS" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_GS="gs" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi GS=$ac_cv_prog_GS if test -n "$GS"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GS" >&5 printf "%s\n" "$GS" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi printf "%s\n" "#define GS_PATH \"gs\"" >>confdefs.h if test -n "$GS"; then GS_WARN="" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $GS has the pngalpha device" >&5 printf %s "checking whether $GS has the pngalpha device... " >&6; } if $GS -h | grep pngalpha >/dev/null; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } GS_WARN="Your EPS inclusions will be cropped to the boundingbox, and rendered on an opaque background. Upgrade GhostScript to avoid this." { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $GS has the png16m device" >&5 printf %s "checking whether $GS has the png16m device... " >&6; } if $GS -h | grep png16m >/dev/null; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } GS_WARN="Your EPS inclusions may not work. Upgrade/install GhostScript to avoid this." fi fi if test -n "$GS_WARN"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $GS_WARN" >&5 printf "%s\n" "$as_me: WARNING: $GS_WARN" >&2;} fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Cannot find GhostScript in your PATH" >&5 printf "%s\n" "$as_me: WARNING: Cannot find GhostScript in your PATH" >&2;} fi fi # Checks for libraries. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pow in -lm" >&5 printf %s "checking for pow in -lm... " >&6; } if test ${ac_cv_lib_m_pow+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char pow (); int main (void) { return pow (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_m_pow=yes else $as_nop ac_cv_lib_m_pow=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_pow" >&5 printf "%s\n" "$ac_cv_lib_m_pow" >&6; } if test "x$ac_cv_lib_m_pow" = xyes then : printf "%s\n" "#define HAVE_LIBM 1" >>confdefs.h LIBS="-lm $LIBS" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for deflate in -lz" >&5 printf %s "checking for deflate in -lz... " >&6; } if test ${ac_cv_lib_z_deflate+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lz $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char deflate (); int main (void) { return deflate (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_z_deflate=yes else $as_nop ac_cv_lib_z_deflate=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_deflate" >&5 printf "%s\n" "$ac_cv_lib_z_deflate" >&6; } if test "x$ac_cv_lib_z_deflate" = xyes then : printf "%s\n" "#define HAVE_LIBZ 1" >>confdefs.h LIBS="-lz $LIBS" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for png_read_image in -lpng" >&5 printf %s "checking for png_read_image in -lpng... " >&6; } if test ${ac_cv_lib_png_png_read_image+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lpng $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char png_read_image (); int main (void) { return png_read_image (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_png_png_read_image=yes else $as_nop ac_cv_lib_png_png_read_image=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_png_png_read_image" >&5 printf "%s\n" "$ac_cv_lib_png_png_read_image" >&6; } if test "x$ac_cv_lib_png_png_read_image" = xyes then : printf "%s\n" "#define HAVE_LIBPNG 1" >>confdefs.h LIBS="-lpng $LIBS" else $as_nop as_fn_error $? "cannot find/use libpng" "$LINENO" 5 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gdImageCreate in -lgd" >&5 printf %s "checking for gdImageCreate in -lgd... " >&6; } if test ${ac_cv_lib_gd_gdImageCreate+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lgd $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char gdImageCreate (); int main (void) { return gdImageCreate (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_gd_gdImageCreate=yes else $as_nop ac_cv_lib_gd_gdImageCreate=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gd_gdImageCreate" >&5 printf "%s\n" "$ac_cv_lib_gd_gdImageCreate" >&6; } if test "x$ac_cv_lib_gd_gdImageCreate" = xyes then : printf "%s\n" "#define HAVE_LIBGD 1" >>confdefs.h LIBS="-lgd $LIBS" else $as_nop as_fn_error $? "cannot find/use libgd This drawing library can be downloaded at https://bitbucket.org/libgd/gd-libgd/downloads" "$LINENO" 5 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for kpse_set_program_name in -lkpathsea" >&5 printf %s "checking for kpse_set_program_name in -lkpathsea... " >&6; } if test ${ac_cv_lib_kpathsea_kpse_set_program_name+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lkpathsea $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char kpse_set_program_name (); int main (void) { return kpse_set_program_name (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_kpathsea_kpse_set_program_name=yes else $as_nop ac_cv_lib_kpathsea_kpse_set_program_name=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_kpathsea_kpse_set_program_name" >&5 printf "%s\n" "$ac_cv_lib_kpathsea_kpse_set_program_name" >&6; } if test "x$ac_cv_lib_kpathsea_kpse_set_program_name" = xyes then : printf "%s\n" "#define HAVE_LIBKPATHSEA 1" >>confdefs.h LIBS="-lkpathsea $LIBS" else $as_nop as_fn_error $? "cannot find/use libkpathsea" "$LINENO" 5 fi # Checks for header files. # Autoupdate added the next two lines to ensure that your configure # script's behavior did not change. They are probably safe to remove. ac_header= ac_cache= for ac_item in $ac_header_c_list do if test $ac_cache; then ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default" if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then printf "%s\n" "#define $ac_item 1" >> confdefs.h fi ac_header= ac_cache= elif test $ac_header; then ac_cache=$ac_item else ac_header=$ac_item fi done if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes then : printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 printf %s "checking for grep that handles long lines and -e... " >&6; } if test ${ac_cv_path_GREP+y} then : printf %s "(cached) " >&6 else $as_nop if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in grep ggrep do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 printf "%s\n" "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 printf %s "checking for egrep... " >&6; } if test ${ac_cv_path_EGREP+y} then : printf %s "(cached) " >&6 else $as_nop if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in egrep do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 printf "%s\n" "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" for ac_header in gd.h png.h kpathsea/kpathsea.h do : as_ac_Header=`printf "%s\n" "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes" then : cat >>confdefs.h <<_ACEOF #define `printf "%s\n" "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF else $as_nop as_fn_error $? "cannot find/use $ac_header" "$LINENO" 5 fi done ac_fn_c_check_header_compile "$LINENO" "libgen.h" "ac_cv_header_libgen_h" "$ac_includes_default" if test "x$ac_cv_header_libgen_h" = xyes then : printf "%s\n" "#define HAVE_LIBGEN_H 1" >>confdefs.h fi PSFONTS_O="" if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else $as_nop case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 printf "%s\n" "$PKG_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_ac_pt_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else $as_nop case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 printf "%s\n" "$ac_pt_PKG_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 printf %s "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } PKG_CONFIG="" fi fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for freetype2 >= 6.1.0" >&5 printf %s "checking for freetype2 >= 6.1.0... " >&6; } if test -n "$FT2_CFLAGS"; then pkg_cv_FT2_CFLAGS="$FT2_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"freetype2 >= 6.1.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "freetype2 >= 6.1.0") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_FT2_CFLAGS=`$PKG_CONFIG --cflags "freetype2 >= 6.1.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$FT2_LIBS"; then pkg_cv_FT2_LIBS="$FT2_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"freetype2 >= 6.1.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "freetype2 >= 6.1.0") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_FT2_LIBS=`$PKG_CONFIG --libs "freetype2 >= 6.1.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then FT2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "freetype2 >= 6.1.0" 2>&1` else FT2_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "freetype2 >= 6.1.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$FT2_PKG_ERRORS" >&5 ac_have_freetype2="no" elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } ac_have_freetype2="no" else FT2_CFLAGS=$pkg_cv_FT2_CFLAGS FT2_LIBS=$pkg_cv_FT2_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } CFLAGS="$FT2_CFLAGS $CFLAGS" LIBS="$FT2_LIBS $LIBS" PSFONTS_O="sfd.o ft.o enc.o fontmap.o tfm.o" printf "%s\n" "#define HAVE_FT2 1" >>confdefs.h ac_have_freetype2="yes" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sys/wait.h that is POSIX.1 compatible" >&5 printf %s "checking for sys/wait.h that is POSIX.1 compatible... " >&6; } if test ${ac_cv_header_sys_wait_h+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifndef WEXITSTATUS # define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8) #endif #ifndef WIFEXITED # define WIFEXITED(stat_val) (((stat_val) & 255) == 0) #endif int main (void) { int s; wait (&s); s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_header_sys_wait_h=yes else $as_nop ac_cv_header_sys_wait_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_wait_h" >&5 printf "%s\n" "$ac_cv_header_sys_wait_h" >&6; } if test $ac_cv_header_sys_wait_h = yes; then printf "%s\n" "#define HAVE_SYS_WAIT_H 1" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default" if test "x$ac_cv_type__Bool" = xyes then : printf "%s\n" "#define HAVE__BOOL 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 printf %s "checking for stdbool.h that conforms to C99... " >&6; } if test ${ac_cv_header_stdbool_h+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifndef __bool_true_false_are_defined #error "__bool_true_false_are_defined is not defined" #endif char a[__bool_true_false_are_defined == 1 ? 1 : -1]; /* Regardless of whether this is C++ or "_Bool" is a valid type name, "true" and "false" should be usable in #if expressions and integer constant expressions, and "bool" should be a valid type name. */ #if !true #error "'true' is not true" #endif #if true != 1 #error "'true' is not equal to 1" #endif char b[true == 1 ? 1 : -1]; char c[true]; #if false #error "'false' is not false" #endif #if false != 0 #error "'false' is not equal to 0" #endif char d[false == 0 ? 1 : -1]; enum { e = false, f = true, g = false * true, h = true * 256 }; char i[(bool) 0.5 == true ? 1 : -1]; char j[(bool) 0.0 == false ? 1 : -1]; char k[sizeof (bool) > 0 ? 1 : -1]; struct sb { bool s: 1; bool t; } s; char l[sizeof s.t > 0 ? 1 : -1]; /* The following fails for HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ bool m[h]; char n[sizeof m == h * sizeof m[0] ? 1 : -1]; char o[-1 - (bool) 0 < 0 ? 1 : -1]; /* Catch a bug in an HP-UX C compiler. See https://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html https://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html */ bool p = true; bool *pp = &p; /* C 1999 specifies that bool, true, and false are to be macros, but C++ 2011 and later overrule this. */ #if __cplusplus < 201103 #ifndef bool #error "bool is not defined" #endif #ifndef false #error "false is not defined" #endif #ifndef true #error "true is not defined" #endif #endif /* If _Bool is available, repeat with it all the tests above that used bool. */ #ifdef HAVE__BOOL struct sB { _Bool s: 1; _Bool t; } t; char q[(_Bool) 0.5 == true ? 1 : -1]; char r[(_Bool) 0.0 == false ? 1 : -1]; char u[sizeof (_Bool) > 0 ? 1 : -1]; char v[sizeof t.t > 0 ? 1 : -1]; _Bool w[h]; char x[sizeof m == h * sizeof m[0] ? 1 : -1]; char y[-1 - (_Bool) 0 < 0 ? 1 : -1]; _Bool z = true; _Bool *pz = &p; #endif int main (void) { bool ps = &s; *pp |= p; *pp |= ! p; #ifdef HAVE__BOOL _Bool pt = &t; *pz |= z; *pz |= ! z; #endif /* Refer to every declared value, so they cannot be discarded as unused. */ return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !j + !k + !l + !m + !n + !o + !p + !pp + !ps #ifdef HAVE__BOOL + !q + !r + !u + !v + !w + !x + !y + !z + !pt #endif ); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_header_stdbool_h=yes else $as_nop ac_cv_header_stdbool_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5 printf "%s\n" "$ac_cv_header_stdbool_h" >&6; } if test $ac_cv_header_stdbool_h = yes; then printf "%s\n" "#define HAVE_STDBOOL_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "fcntl.h" "ac_cv_header_fcntl_h" "$ac_includes_default" if test "x$ac_cv_header_fcntl_h" = xyes then : printf "%s\n" "#define HAVE_FCNTL_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "sys/time.h" "ac_cv_header_sys_time_h" "$ac_includes_default" if test "x$ac_cv_header_sys_time_h" = xyes then : printf "%s\n" "#define HAVE_SYS_TIME_H 1" >>confdefs.h fi # Checks for typedefs, structures, and compiler characteristics. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 printf %s "checking for an ANSI C-conforming const... " >&6; } if test ${ac_cv_c_const+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __cplusplus /* Ultrix mips cc rejects this sort of thing. */ typedef int charset[2]; const charset cs = { 0, 0 }; /* SunOS 4.1.1 cc rejects this. */ char const *const *pcpcc; char **ppc; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* IBM XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; pcpcc = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++pcpcc; ppc = (char**) pcpcc; pcpcc = (char const *const *) ppc; { /* SCO 3.2v4 cc rejects this sort of thing. */ char tx; char *t = &tx; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; if (s) return 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* IBM XL C 1.02.0.0 rejects this sort of thing, saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; } bx; struct s *b = &bx; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; if (!foo) return 0; } return !cs[0] && !zero.x; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_const=yes else $as_nop ac_cv_c_const=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 printf "%s\n" "$ac_cv_c_const" >&6; } if test $ac_cv_c_const = no; then printf "%s\n" "#define const /**/" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default " if test "x$ac_cv_type_pid_t" = xyes then : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined _WIN64 && !defined __CYGWIN__ LLP64 #endif int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_pid_type='int' else $as_nop ac_pid_type='__int64' fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext printf "%s\n" "#define pid_t $ac_pid_type" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" if test "x$ac_cv_type_size_t" = xyes then : else $as_nop printf "%s\n" "#define size_t unsigned int" >>confdefs.h fi if test "$ac_cv_header_inttypes_h" = "yes"; then # Sometimes we want to use gcc -ansi -pedantic as a portability test # The typedef of int64_t is not in the system header file in that # case. Then, #define int64_t as "long long", which is non-ansi, but # is present in most modern compilers. Using a #define rather than a # typedef can be a problem, but in dvipng int64_t is only used as # typecast, and there are no problems. autoconf 2.13 equivalent: # AC_CHECK_TYPE(int64_t, long long) # AC_CHECK_TYPE(uint64_t, unsigned long long) ac_fn_c_check_type "$LINENO" "int64_t" "ac_cv_type_int64_t" "$ac_includes_default" if test "x$ac_cv_type_int64_t" = xyes then : else $as_nop printf "%s\n" "#define int64_t long long" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "uint64_t" "ac_cv_type_uint64_t" "$ac_includes_default" if test "x$ac_cv_type_uint64_t" = xyes then : else $as_nop printf "%s\n" "#define uint64_t unsigned long long" >>confdefs.h fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for kpse_enc_format" >&5 printf %s "checking for kpse_enc_format... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main (void) { kpse_enc_format;kpse_cmap_format;kpse_sfd_format ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } printf "%s\n" "#define HAVE_KPSE_ENC_FORMATS 1" >>confdefs.h else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext # Checks for library functions. ac_func= for ac_item in $ac_func_c_list do if test $ac_func; then ac_fn_c_check_func "$LINENO" $ac_func ac_cv_func_$ac_func if eval test \"x\$ac_cv_func_$ac_func\" = xyes; then echo "#define $ac_item 1" >> confdefs.h fi ac_func= else ac_func=$ac_item fi done if test "x$ac_cv_func_fork" = xyes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working fork" >&5 printf %s "checking for working fork... " >&6; } if test ${ac_cv_func_fork_works+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : ac_cv_func_fork_works=cross else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main (void) { /* By Ruediger Kuhlmann. */ return fork () < 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_func_fork_works=yes else $as_nop ac_cv_func_fork_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_fork_works" >&5 printf "%s\n" "$ac_cv_func_fork_works" >&6; } else ac_cv_func_fork_works=$ac_cv_func_fork fi if test "x$ac_cv_func_fork_works" = xcross; then case $host in *-*-amigaos* | *-*-msdosdjgpp*) # Override, as these systems have only a dummy fork() stub ac_cv_func_fork_works=no ;; *) ac_cv_func_fork_works=yes ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&5 printf "%s\n" "$as_me: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&2;} fi ac_cv_func_vfork_works=$ac_cv_func_vfork if test "x$ac_cv_func_vfork" = xyes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working vfork" >&5 printf %s "checking for working vfork... " >&6; } if test ${ac_cv_func_vfork_works+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : ac_cv_func_vfork_works=cross else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Thanks to Paul Eggert for this test. */ $ac_includes_default #include #include #ifdef HAVE_VFORK_H # include #endif static void do_nothing (int sig) { (void) sig; } /* On some sparc systems, changes by the child to local and incoming argument registers are propagated back to the parent. The compiler is told about this with #include , but some compilers (e.g. gcc -O) don't grok . Test for this by using a static variable whose address is put into a register that is clobbered by the vfork. */ static void sparc_address_test (int arg) { static pid_t child; if (!child) { child = vfork (); if (child < 0) { perror ("vfork"); _exit(2); } if (!child) { arg = getpid(); write(-1, "", 0); _exit (arg); } } } int main (void) { pid_t parent = getpid (); pid_t child; sparc_address_test (0); /* On Solaris 2.4, changes by the child to the signal handler also munge signal handlers in the parent. To detect this, start by putting the parent's handler in a known state. */ signal (SIGTERM, SIG_DFL); child = vfork (); if (child == 0) { /* Here is another test for sparc vfork register problems. This test uses lots of local variables, at least as many local variables as main has allocated so far including compiler temporaries. 4 locals are enough for gcc 1.40.3 on a Solaris 4.1.3 sparc, but we use 8 to be safe. A buggy compiler should reuse the register of parent for one of the local variables, since it will think that parent can't possibly be used any more in this routine. Assigning to the local variable will thus munge parent in the parent process. */ pid_t p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(), p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid(); /* Convince the compiler that p..p7 are live; otherwise, it might use the same hardware register for all 8 local variables. */ if (p != p1 || p != p2 || p != p3 || p != p4 || p != p5 || p != p6 || p != p7) _exit(1); /* Alter the child's signal handler. */ if (signal (SIGTERM, do_nothing) != SIG_DFL) _exit(1); /* On some systems (e.g. IRIX 3.3), vfork doesn't separate parent from child file descriptors. If the child closes a descriptor before it execs or exits, this munges the parent's descriptor as well. Test for this by closing stdout in the child. */ _exit(close(fileno(stdout)) != 0); } else { int status; struct stat st; while (wait(&status) != child) ; return ( /* Was there some problem with vforking? */ child < 0 /* Did the child munge the parent's signal handler? */ || signal (SIGTERM, SIG_DFL) != SIG_DFL /* Did the child fail? (This shouldn't happen.) */ || status /* Did the vfork/compiler bug occur? */ || parent != getpid() /* Did the file descriptor bug occur? */ || fstat(fileno(stdout), &st) != 0 ); } } _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_func_vfork_works=yes else $as_nop ac_cv_func_vfork_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_vfork_works" >&5 printf "%s\n" "$ac_cv_func_vfork_works" >&6; } fi; if test "x$ac_cv_func_fork_works" = xcross; then ac_cv_func_vfork_works=$ac_cv_func_vfork { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&5 printf "%s\n" "$as_me: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&2;} fi if test "x$ac_cv_func_vfork_works" = xyes; then printf "%s\n" "#define HAVE_WORKING_VFORK 1" >>confdefs.h else printf "%s\n" "#define vfork fork" >>confdefs.h fi if test "x$ac_cv_func_fork_works" = xyes; then printf "%s\n" "#define HAVE_WORKING_FORK 1" >>confdefs.h fi # We always allocate nonzero chunks # AC_FUNC_MALLOC # Make sure we can run config.sub. $SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 printf %s "checking build system type... " >&6; } if test ${ac_cv_build+y} then : printf %s "(cached) " >&6 else $as_nop ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 printf "%s\n" "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 printf %s "checking host system type... " >&6; } if test ${ac_cv_host+y} then : printf %s "(cached) " >&6 else $as_nop if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5 fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 printf "%s\n" "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working mmap" >&5 printf %s "checking for working mmap... " >&6; } if test ${ac_cv_func_mmap_fixed_mapped+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # (( # Guess yes on platforms where we know the result. linux*) ac_cv_func_mmap_fixed_mapped=yes ;; # If we don't know, assume the worst. *) ac_cv_func_mmap_fixed_mapped=no ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default /* malloc might have been renamed as rpl_malloc. */ #undef malloc /* Thanks to Mike Haertel and Jim Avera for this test. Here is a matrix of mmap possibilities: mmap private not fixed mmap private fixed at somewhere currently unmapped mmap private fixed at somewhere already mapped mmap shared not fixed mmap shared fixed at somewhere currently unmapped mmap shared fixed at somewhere already mapped For private mappings, we should verify that changes cannot be read() back from the file, nor mmap's back from the file at a different address. (There have been systems where private was not correctly implemented like the infamous i386 svr4.0, and systems where the VM page cache was not coherent with the file system buffer cache like early versions of FreeBSD and possibly contemporary NetBSD.) For shared mappings, we should conversely verify that changes get propagated back to all the places they're supposed to be. Grep wants private fixed already mapped. The main things grep needs to know about mmap are: * does it exist and is it safe to write into the mmap'd area * how to use it (BSD variants) */ #include #include /* This mess was copied from the GNU getpagesize.h. */ #ifndef HAVE_GETPAGESIZE # ifdef _SC_PAGESIZE # define getpagesize() sysconf(_SC_PAGESIZE) # else /* no _SC_PAGESIZE */ # ifdef HAVE_SYS_PARAM_H # include # ifdef EXEC_PAGESIZE # define getpagesize() EXEC_PAGESIZE # else /* no EXEC_PAGESIZE */ # ifdef NBPG # define getpagesize() NBPG * CLSIZE # ifndef CLSIZE # define CLSIZE 1 # endif /* no CLSIZE */ # else /* no NBPG */ # ifdef NBPC # define getpagesize() NBPC # else /* no NBPC */ # ifdef PAGESIZE # define getpagesize() PAGESIZE # endif /* PAGESIZE */ # endif /* no NBPC */ # endif /* no NBPG */ # endif /* no EXEC_PAGESIZE */ # else /* no HAVE_SYS_PARAM_H */ # define getpagesize() 8192 /* punt totally */ # endif /* no HAVE_SYS_PARAM_H */ # endif /* no _SC_PAGESIZE */ #endif /* no HAVE_GETPAGESIZE */ int main (void) { char *data, *data2, *data3; const char *cdata2; int i, pagesize; int fd, fd2; pagesize = getpagesize (); /* First, make a file with some known garbage in it. */ data = (char *) malloc (pagesize); if (!data) return 1; for (i = 0; i < pagesize; ++i) *(data + i) = rand (); umask (0); fd = creat ("conftest.mmap", 0600); if (fd < 0) return 2; if (write (fd, data, pagesize) != pagesize) return 3; close (fd); /* Next, check that the tail of a page is zero-filled. File must have non-zero length, otherwise we risk SIGBUS for entire page. */ fd2 = open ("conftest.txt", O_RDWR | O_CREAT | O_TRUNC, 0600); if (fd2 < 0) return 4; cdata2 = ""; if (write (fd2, cdata2, 1) != 1) return 5; data2 = (char *) mmap (0, pagesize, PROT_READ | PROT_WRITE, MAP_SHARED, fd2, 0L); if (data2 == MAP_FAILED) return 6; for (i = 0; i < pagesize; ++i) if (*(data2 + i)) return 7; close (fd2); if (munmap (data2, pagesize)) return 8; /* Next, try to mmap the file at a fixed address which already has something else allocated at it. If we can, also make sure that we see the same garbage. */ fd = open ("conftest.mmap", O_RDWR); if (fd < 0) return 9; if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_FIXED, fd, 0L)) return 10; for (i = 0; i < pagesize; ++i) if (*(data + i) != *(data2 + i)) return 11; /* Finally, make sure that changes to the mapped area do not percolate back to the file as seen by read(). (This is a bug on some variants of i386 svr4.0.) */ for (i = 0; i < pagesize; ++i) *(data2 + i) = *(data2 + i) + 1; data3 = (char *) malloc (pagesize); if (!data3) return 12; if (read (fd, data3, pagesize) != pagesize) return 13; for (i = 0; i < pagesize; ++i) if (*(data + i) != *(data3 + i)) return 14; close (fd); free (data); free (data3); return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_func_mmap_fixed_mapped=yes else $as_nop ac_cv_func_mmap_fixed_mapped=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_fixed_mapped" >&5 printf "%s\n" "$ac_cv_func_mmap_fixed_mapped" >&6; } if test $ac_cv_func_mmap_fixed_mapped = yes; then printf "%s\n" "#define HAVE_MMAP 1" >>confdefs.h fi rm -f conftest.mmap conftest.txt # AC_FUNC_REALLOC { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working strtod" >&5 printf %s "checking for working strtod... " >&6; } if test ${ac_cv_func_strtod+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : ac_cv_func_strtod=no else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default #ifndef strtod double strtod (); #endif int main (void) { { /* Some versions of Linux strtod mis-parse strings with leading '+'. */ char *string = " +69"; char *term; double value; value = strtod (string, &term); if (value != 69 || term != (string + 4)) return 1; } { /* Under Solaris 2.4, strtod returns the wrong value for the terminating character under some conditions. */ char *string = "NaN"; char *term; strtod (string, &term); if (term != string && *(term - 1) == 0) return 1; } return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_func_strtod=yes else $as_nop ac_cv_func_strtod=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_strtod" >&5 printf "%s\n" "$ac_cv_func_strtod" >&6; } if test $ac_cv_func_strtod = no; then case " $LIBOBJS " in *" strtod.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strtod.$ac_objext" ;; esac ac_fn_c_check_func "$LINENO" "pow" "ac_cv_func_pow" if test "x$ac_cv_func_pow" = xyes then : fi if test $ac_cv_func_pow = no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pow in -lm" >&5 printf %s "checking for pow in -lm... " >&6; } if test ${ac_cv_lib_m_pow+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char pow (); int main (void) { return pow (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_m_pow=yes else $as_nop ac_cv_lib_m_pow=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_pow" >&5 printf "%s\n" "$ac_cv_lib_m_pow" >&6; } if test "x$ac_cv_lib_m_pow" = xyes then : POW_LIB=-lm else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot find library containing definition of pow" >&5 printf "%s\n" "$as_me: WARNING: cannot find library containing definition of pow" >&2;} fi fi fi if test "x$ac_cv_func_vprintf" = xno then : ac_fn_c_check_func "$LINENO" "_doprnt" "ac_cv_func__doprnt" if test "x$ac_cv_func__doprnt" = xyes then : printf "%s\n" "#define HAVE_DOPRNT 1" >>confdefs.h fi fi ac_fn_c_check_func "$LINENO" "dup2" "ac_cv_func_dup2" if test "x$ac_cv_func_dup2" = xyes then : printf "%s\n" "#define HAVE_DUP2 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "memset" "ac_cv_func_memset" if test "x$ac_cv_func_memset" = xyes then : printf "%s\n" "#define HAVE_MEMSET 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "munmap" "ac_cv_func_munmap" if test "x$ac_cv_func_munmap" = xyes then : printf "%s\n" "#define HAVE_MUNMAP 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "pow" "ac_cv_func_pow" if test "x$ac_cv_func_pow" = xyes then : printf "%s\n" "#define HAVE_POW 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "putenv" "ac_cv_func_putenv" if test "x$ac_cv_func_putenv" = xyes then : printf "%s\n" "#define HAVE_PUTENV 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "strchr" "ac_cv_func_strchr" if test "x$ac_cv_func_strchr" = xyes then : printf "%s\n" "#define HAVE_STRCHR 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "strrchr" "ac_cv_func_strrchr" if test "x$ac_cv_func_strrchr" = xyes then : printf "%s\n" "#define HAVE_STRRCHR 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "strtol" "ac_cv_func_strtol" if test "x$ac_cv_func_strtol" = xyes then : printf "%s\n" "#define HAVE_STRTOL 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "strstr" "ac_cv_func_strstr" if test "x$ac_cv_func_strstr" = xyes then : printf "%s\n" "#define HAVE_STRSTR 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "strncasecmp" "ac_cv_func_strncasecmp" if test "x$ac_cv_func_strncasecmp" = xyes then : printf "%s\n" "#define HAVE_STRNCASECMP 1" >>confdefs.h fi if test "$enable_timing" = "yes"; then ac_fn_c_check_func "$LINENO" "ftime" "ac_cv_func_ftime" if test "x$ac_cv_func_ftime" = xyes then : printf "%s\n" "#define HAVE_FTIME 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "gettimeofday" "ac_cv_func_gettimeofday" if test "x$ac_cv_func_gettimeofday" = xyes then : printf "%s\n" "#define HAVE_GETTIMEOFDAY 1" >>confdefs.h fi fi ac_fn_c_check_func "$LINENO" "gdImageCreateTrueColor" "ac_cv_func_gdImageCreateTrueColor" if test "x$ac_cv_func_gdImageCreateTrueColor" = xyes then : printf "%s\n" "#define HAVE_GDIMAGECREATETRUECOLOR 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "gdImageCreateFromJpeg" "ac_cv_func_gdImageCreateFromJpeg" if test "x$ac_cv_func_gdImageCreateFromJpeg" = xyes then : printf "%s\n" "#define HAVE_GDIMAGECREATEFROMJPEG 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "gdImagePngEx" "ac_cv_func_gdImagePngEx" if test "x$ac_cv_func_gdImagePngEx" = xyes then : printf "%s\n" "#define HAVE_GDIMAGEPNGEX 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "gdImageCreateFromPngPtr" "ac_cv_func_gdImageCreateFromPngPtr" if test "x$ac_cv_func_gdImageCreateFromPngPtr" = xyes then : printf "%s\n" "#define HAVE_GDIMAGECREATEFROMPNGPTR 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "gdImageGif" "ac_cv_func_gdImageGif" if test "x$ac_cv_func_gdImageGif" = xyes then : printf "%s\n" "#define HAVE_GDIMAGEGIF 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "FT_Library_Version" "ac_cv_func_FT_Library_Version" if test "x$ac_cv_func_FT_Library_Version" = xyes then : printf "%s\n" "#define HAVE_FT_LIBRARY_VERSION 1" >>confdefs.h fi if test "$ac_cv_func_gdImageGif" = "yes"; then INSTALL_BIN_TARGET="install-dvigif" else INSTALL_BIN_TARGET="install-dvipng" fi ac_fn_c_check_func "$LINENO" "texlive_gs_init" "ac_cv_func_texlive_gs_init" if test "x$ac_cv_func_texlive_gs_init" = xyes then : printf "%s\n" "#define HAVE_TEXLIVE_GS_INIT 1" >>confdefs.h fi # Documentation-related checks # Extract the first word of "makeinfo", so it can be a program name with args. set dummy makeinfo; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_MAKEINFO+y} then : printf %s "(cached) " >&6 else $as_nop case $MAKEINFO in [\\/]* | ?:[\\/]*) ac_cv_path_MAKEINFO="$MAKEINFO" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_MAKEINFO="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_MAKEINFO" && ac_cv_path_MAKEINFO=":" ;; esac fi MAKEINFO=$ac_cv_path_MAKEINFO if test -n "$MAKEINFO"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAKEINFO" >&5 printf "%s\n" "$MAKEINFO" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi for ac_macro in acronym env option; do if test -n "$MAKEINFO" -a "$makeinfo" != ":"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for @$ac_macro{}" >&5 printf %s "checking for @$ac_macro{}... " >&6; } echo \\\\input texinfo > conftest.texi echo @$ac_macro{test} >> conftest.texi if $MAKEINFO conftest.texi > /dev/null 2> /dev/null; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } : else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } MAKEINFO_MACROS="-D no-$ac_macro $MAKEINFO_MACROS" fi rm -f conftest.texi conftest.info fi done # Extract the first word of "install-info", so it can be a program name with args. set dummy install-info; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_INSTALL_INFO+y} then : printf %s "(cached) " >&6 else $as_nop case $INSTALL_INFO in [\\/]* | ?:[\\/]*) ac_cv_path_INSTALL_INFO="$INSTALL_INFO" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH /usr/sbin /sbin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_INSTALL_INFO="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_INSTALL_INFO" && ac_cv_path_INSTALL_INFO=":" ;; esac fi INSTALL_INFO=$ac_cv_path_INSTALL_INFO if test -n "$INSTALL_INFO"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL_INFO" >&5 printf "%s\n" "$INSTALL_INFO" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # SELFAUTO # Check whether --enable-selfauto-set was given. if test ${enable_selfauto_set+y} then : enableval=$enable_selfauto_set; if test "$enableval" = yes ; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for \$SELFAUTOLOC" >&5 printf %s "checking for \$SELFAUTOLOC... " >&6; } SELFAUTOLOC=`kpsewhich -expand-var=\\\$SELFAUTOLOC` printf "%s\n" "#define ENV_SELFAUTOLOC \"SELFAUTOLOC=$SELFAUTOLOC\"" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $SELFAUTOLOC" >&5 printf "%s\n" "$SELFAUTOLOC" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for \$SELFAUTODIR" >&5 printf %s "checking for \$SELFAUTODIR... " >&6; } SELFAUTODIR=`kpsewhich -expand-var=\\\$SELFAUTODIR` printf "%s\n" "#define ENV_SELFAUTODIR \"SELFAUTODIR=$SELFAUTODIR\"" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $SELFAUTODIR" >&5 printf "%s\n" "$SELFAUTODIR" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for \$SELFAUTOPARENT" >&5 printf %s "checking for \$SELFAUTOPARENT... " >&6; } SELFAUTOPARENT=`kpsewhich -expand-var=\\\$SELFAUTOPARENT` printf "%s\n" "#define ENV_SELFAUTOPARENT \"SELFAUTOPARENT=$SELFAUTOPARENT\"" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $SELFAUTOPARENT" >&5 printf "%s\n" "$SELFAUTOPARENT" >&6; } fi else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for texmf.cnf" >&5 printf %s "checking for texmf.cnf... " >&6; } TEXMF_CNF=`kpsewhich texmf.cnf` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $TEXMF_CNF" >&5 printf "%s\n" "$TEXMF_CNF" >&6; } # Extract the first word of "kpsewhich", so it can be a program name with args. set dummy kpsewhich; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_KPSEWHICH+y} then : printf %s "(cached) " >&6 else $as_nop case $KPSEWHICH in [\\/]* | ?:[\\/]*) ac_cv_path_KPSEWHICH="$KPSEWHICH" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_KPSEWHICH="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi KPSEWHICH=$ac_cv_path_KPSEWHICH if test -n "$KPSEWHICH"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $KPSEWHICH" >&5 printf "%s\n" "$KPSEWHICH" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for psfonts.map" >&5 printf %s "checking for psfonts.map... " >&6; } cp $KPSEWHICH . PSFONTS_MAP=`./kpsewhich psfonts.map` rm -f ./kpsewhich if test -n "$PSFONTS_MAP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PSFONTS_MAP" >&5 printf "%s\n" "$PSFONTS_MAP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found from outside the texmf tree" >&5 printf "%s\n" "not found from outside the texmf tree" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for \$SELFAUTO in texmf.cnf" >&5 printf %s "checking for \$SELFAUTO in texmf.cnf... " >&6; } if grep SELFAUTO "$TEXMF_CNF" > /dev/null 2> /dev/null; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes *************************************************************** texmf.cnf is using \$SELFAUTO... variables. If you are going to install dvipng outside the texmf tree, you may need to use --enable-selfauto-set. To find out, do 'make ; make test'. If the test is unsuccessful, add the mentioned switch and rebuild. ***************************************************************" >&5 printf "%s\n" "yes *************************************************************** texmf.cnf is using \$SELFAUTO... variables. If you are going to install dvipng outside the texmf tree, you may need to use --enable-selfauto-set. To find out, do 'make ; make test'. If the test is unsuccessful, add the mentioned switch and rebuild. ***************************************************************" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ** Configuration summary for $PACKAGE_STRING: The -d (debug) switch is enabled: $enable_debug Your gd is new enough (>=2.0) to enable the --truecolor switch, full alpha transparency, proper rescaling of included bitmaps, and jpeg inclusion: $ac_cv_func_gdImageCreateTrueColor Your gd has jpeg inclusion enabled: $ac_cv_func_gdImageCreateFromJpeg Your gd is new enough (>=2.0.12) to enable transparent backgrounds for EPS inclusion and the -z (compression) switch: $ac_cv_func_gdImagePngEx Your gd is new enough (>=2.0.21) to allow image creation from memory $ac_cv_func_gdImageCreateFromPngPtr Your gd is new enough (>=2.0.28) to enable gif inclusion and output (dvigif): $ac_cv_func_gdImageGif FreeType font rendering available: $ac_have_freetype2 Support for subfonts (CJK-LaTeX): $ac_have_freetype2 Building within TeX Live: $ac_cv_func_texlive_gs_init " >&5 printf "%s\n" " ** Configuration summary for $PACKAGE_STRING: The -d (debug) switch is enabled: $enable_debug Your gd is new enough (>=2.0) to enable the --truecolor switch, full alpha transparency, proper rescaling of included bitmaps, and jpeg inclusion: $ac_cv_func_gdImageCreateTrueColor Your gd has jpeg inclusion enabled: $ac_cv_func_gdImageCreateFromJpeg Your gd is new enough (>=2.0.12) to enable transparent backgrounds for EPS inclusion and the -z (compression) switch: $ac_cv_func_gdImagePngEx Your gd is new enough (>=2.0.21) to allow image creation from memory $ac_cv_func_gdImageCreateFromPngPtr Your gd is new enough (>=2.0.28) to enable gif inclusion and output (dvigif): $ac_cv_func_gdImageGif FreeType font rendering available: $ac_have_freetype2 Support for subfonts (CJK-LaTeX): $ac_have_freetype2 Building within TeX Live: $ac_cv_func_texlive_gs_init " >&6; } ac_config_headers="$ac_config_headers config.h" ac_config_files="$ac_config_files Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 printf "%s\n" "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else $as_nop as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_echo='printf %s\n' as_echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by dvipng $as_me 1.18, which was generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Report bugs to ." _ACEOF ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ dvipng config.status 1.18 configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" Copyright (C) 2021 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) printf "%s\n" "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) printf "%s\n" "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) printf "%s\n" "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX printf "%s\n" "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS " shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 printf "%s\n" "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`printf "%s\n" "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 printf "%s\n" "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi configure.ac0000664000175000017500000002110714747704123012640 0ustar janla64janla64# configure.ac #************************************************************************ # # Part of the dvipng distribution # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as # published by the Free Software Foundation, either version 3 of the # License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this program. If not, see # . # # Copyright (C) 2002-2015,2019 Jan-Åke Larsson # #************************************************************************ # Process this file with autoconf to produce a configure script. AC_INIT([dvipng],[1.18],[dvipng@nongnu.org]) AC_CONFIG_SRCDIR([dvipng.c]) AC_ARG_ENABLE(debug, AS_HELP_STRING([--disable-debug],[Compile without debug (-d) option]), [ if test "$enableval" = yes ; then AC_DEFINE(DEBUG, 1, [Define as 1 to get the debug (-d) option.]) fi ], [ enable_debug="yes"; AC_DEFINE(DEBUG, 1, [Define as 1 to get the debug (-d) option.])]) AC_ARG_ENABLE(timing, AS_HELP_STRING([--enable-timing],[Output execution time of dvipng]), [ if test "$enableval" = yes ; then AC_DEFINE(TIMING, 1, [Define as 1 to get execution time output.]) fi ]) # Checks for programs. AC_PROG_MAKE_SET AC_PROG_CC AC_PROG_INSTALL AC_PROG_LN_S AC_ARG_WITH(gs, AS_HELP_STRING([--with-gs=/PATH/TO/gs],[Hard-wire the location of GhostScript]), [if test "x$withval" != xno ; then AC_PATH_PROG(GS,["$withval"]) AC_DEFINE_UNQUOTED(GS_PATH, "$GS", [Define as the path to GhostScript.]) GS_CHECK_DEVICES fi], [AC_CHECK_PROG(GS,gs,gs) AC_DEFINE_UNQUOTED(GS_PATH, "gs", [Define as the path to GhostScript.]) if test -n "$GS"; then GS_CHECK_DEVICES else AC_MSG_WARN([Cannot find GhostScript in your PATH]) fi ]) # Checks for libraries. AC_CHECK_LIB(m, pow) AC_CHECK_LIB(z, deflate) AC_CHECK_LIB([png], [png_read_image],, [AC_MSG_ERROR([cannot find/use libpng])]) AC_CHECK_LIB([gd], [gdImageCreate],, [AC_MSG_ERROR([cannot find/use libgd This drawing library can be downloaded at https://bitbucket.org/libgd/gd-libgd/downloads])]) AC_CHECK_LIB([kpathsea], [kpse_set_program_name],, AC_MSG_ERROR([cannot find/use libkpathsea])) # Checks for header files. # Autoupdate added the next two lines to ensure that your configure # script's behavior did not change. They are probably safe to remove. AC_CHECK_INCLUDES_DEFAULT AC_PROG_EGREP AC_CHECK_HEADERS([gd.h png.h kpathsea/kpathsea.h],, [AC_MSG_ERROR([cannot find/use $ac_header])]) AC_CHECK_HEADERS([libgen.h]) PSFONTS_O="" AC_SUBST(PSFONTS_O) PKG_CHECK_MODULES([FT2], [freetype2 >= 6.1.0], [CFLAGS="$FT2_CFLAGS $CFLAGS" LIBS="$FT2_LIBS $LIBS" PSFONTS_O="sfd.o ft.o enc.o fontmap.o tfm.o" AC_DEFINE(HAVE_FT2, 1, [Define to 1 if you have freetype2]) ac_have_freetype2="yes"], [ac_have_freetype2="no"]) AC_HEADER_SYS_WAIT AC_HEADER_STDBOOL AC_CHECK_HEADERS([fcntl.h sys/time.h]) # Checks for typedefs, structures, and compiler characteristics. AC_C_CONST AC_TYPE_PID_T AC_TYPE_SIZE_T if test "$ac_cv_header_inttypes_h" = "yes"; then # Sometimes we want to use gcc -ansi -pedantic as a portability test # The typedef of int64_t is not in the system header file in that # case. Then, #define int64_t as "long long", which is non-ansi, but # is present in most modern compilers. Using a #define rather than a # typedef can be a problem, but in dvipng int64_t is only used as # typecast, and there are no problems. autoconf 2.13 equivalent: # AC_CHECK_TYPE(int64_t, long long) # AC_CHECK_TYPE(uint64_t, unsigned long long) AC_CHECK_TYPE([int64_t],, [AC_DEFINE_UNQUOTED([int64_t], [long long], [Define to `long long' if does not define it.])]) AC_CHECK_TYPE([uint64_t],, [AC_DEFINE_UNQUOTED([uint64_t], [unsigned long long], [Define to `unsigned long long' if does not define it.])]) fi AC_HAS_KPSE_ENC_FORMATS # Checks for library functions. AC_FUNC_FORK # We always allocate nonzero chunks # AC_FUNC_MALLOC AC_FUNC_MMAP # AC_FUNC_REALLOC AC_FUNC_STRTOD AC_FUNC_VPRINTF AC_CHECK_FUNCS([dup2 memset munmap pow putenv strchr strrchr strtol strstr strncasecmp]) if test "$enable_timing" = "yes"; then AC_CHECK_FUNCS([ftime gettimeofday]) fi AC_CHECK_FUNCS([gdImageCreateTrueColor gdImageCreateFromJpeg gdImagePngEx gdImageCreateFromPngPtr gdImageGif FT_Library_Version]) if test "$ac_cv_func_gdImageGif" = "yes"; then INSTALL_BIN_TARGET="install-dvigif" else INSTALL_BIN_TARGET="install-dvipng" fi AC_CHECK_FUNCS([texlive_gs_init]) AC_SUBST(INSTALL_BIN_TARGET) # Documentation-related checks AC_PATH_PROG(MAKEINFO, makeinfo, :) MAKEINFO_CHECK_MACROS(acronym env option) AC_PATH_PROG(INSTALL_INFO, install-info, :, $PATH /usr/sbin /sbin) # SELFAUTO AC_ARG_ENABLE(selfauto-set, AS_HELP_STRING([--enable-selfauto-set],[This option will make the final binary explicitly set the $SELFAUTO... variables to make it look as dvipng is installed in the main texmf tree, even if it isn't. This is necessary when texmf.cnf only uses $SELFAUTO... variables and dvipng is not installed in the texmf tree. Otherwise, dvipng may not be able to find virtual fonts, or psfonts.map. To find out, first build the binary and do 'make test'. If the test fails, you need this switch.]), [ if test "$enableval" = yes ; then AC_MSG_CHECKING([for \$SELFAUTOLOC]) SELFAUTOLOC=`kpsewhich -expand-var=\\\$SELFAUTOLOC` AC_DEFINE_UNQUOTED(ENV_SELFAUTOLOC,["SELFAUTOLOC=$SELFAUTOLOC"], [The environment setting for $SELFAUTOLOC]) AC_MSG_RESULT([$SELFAUTOLOC]) AC_MSG_CHECKING([for \$SELFAUTODIR]) SELFAUTODIR=`kpsewhich -expand-var=\\\$SELFAUTODIR` AC_DEFINE_UNQUOTED(ENV_SELFAUTODIR,["SELFAUTODIR=$SELFAUTODIR"], [The environment setting for $SELFAUTODIR]) AC_MSG_RESULT([$SELFAUTODIR]) AC_MSG_CHECKING([for \$SELFAUTOPARENT]) SELFAUTOPARENT=`kpsewhich -expand-var=\\\$SELFAUTOPARENT` AC_DEFINE_UNQUOTED(ENV_SELFAUTOPARENT,["SELFAUTOPARENT=$SELFAUTOPARENT"], [The environment setting for $SELFAUTOPARENT]) AC_MSG_RESULT([$SELFAUTOPARENT]) fi ], [AC_MSG_CHECKING([for texmf.cnf]) TEXMF_CNF=`kpsewhich texmf.cnf` AC_MSG_RESULT([$TEXMF_CNF]) AC_PATH_PROG(KPSEWHICH, kpsewhich) AC_MSG_CHECKING([for psfonts.map]) cp $KPSEWHICH . PSFONTS_MAP=`./kpsewhich psfonts.map` rm -f ./kpsewhich if test -n "$PSFONTS_MAP"; then AC_MSG_RESULT([$PSFONTS_MAP]) else AC_MSG_RESULT([not found from outside the texmf tree]) AC_MSG_CHECKING([for \$SELFAUTO in texmf.cnf]) if grep SELFAUTO "$TEXMF_CNF" > /dev/null 2> /dev/null; then AC_MSG_RESULT([yes *************************************************************** texmf.cnf is using \$SELFAUTO... variables. If you are going to install dvipng outside the texmf tree, you may need to use --enable-selfauto-set. To find out, do 'make ; make test'. If the test is unsuccessful, add the mentioned switch and rebuild. ***************************************************************]) else AC_MSG_RESULT([no]) fi fi]) AC_MSG_RESULT([ ** Configuration summary for $PACKAGE_STRING: The -d (debug) switch is enabled: $enable_debug Your gd is new enough (>=2.0) to enable the --truecolor switch, full alpha transparency, proper rescaling of included bitmaps, and jpeg inclusion: $ac_cv_func_gdImageCreateTrueColor Your gd has jpeg inclusion enabled: $ac_cv_func_gdImageCreateFromJpeg Your gd is new enough (>=2.0.12) to enable transparent backgrounds for EPS inclusion and the -z (compression) switch: $ac_cv_func_gdImagePngEx Your gd is new enough (>=2.0.21) to allow image creation from memory $ac_cv_func_gdImageCreateFromPngPtr Your gd is new enough (>=2.0.28) to enable gif inclusion and output (dvigif): $ac_cv_func_gdImageGif FreeType font rendering available: $ac_have_freetype2 Support for subfonts (CJK-LaTeX): $ac_have_freetype2 Building within TeX Live: $ac_cv_func_texlive_gs_init ]) AC_CONFIG_HEADERS([config.h]) AC_CONFIG_FILES([Makefile]) AC_OUTPUT COPYING0000664000175000017500000010451314737210011011373 0ustar janla64janla64 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . COPYING.gd0000664000175000017500000000422514737210011011763 0ustar janla64janla64The below is the copyright notice of the gd library. ---------------------------------------------------- Portions copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 by Cold Spring Harbor Laboratory. Funded under Grant P41-RR02188 by the National Institutes of Health. Portions copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002 by Boutell.Com, Inc. Portions relating to GD2 format copyright 1999, 2000, 2001, 2002 Philip Warner. Portions relating to PNG copyright 1999, 2000, 2001, 2002 Greg Roelofs. Portions relating to gdttf.c copyright 1999, 2000, 2001, 2002 John Ellson (ellson@lucent.com). Portions relating to gdft.c copyright 2001, 2002 John Ellson (ellson@lucent.com). Portions copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Pierre-Alain Joye (pierre@libgd.org). Portions relating to JPEG and to color quantization copyright 2000, 2001, 2002, Doug Becker and copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, Thomas G. Lane. This software is based in part on the work of the Independent JPEG Group. See the file README-JPEG.TXT for more information. Portions relating to WBMP copyright 2000, 2001, 2002 Maurice Szmurlo and Johan Van den Brande. Permission has been granted to copy, distribute and modify gd in any context without fee, including a commercial application, provided that this notice is present in user-accessible supporting documentation. This does not affect your ownership of the derived work itself, and the intent is to assure proper credit for the authors of gd, not to interfere with your productive use of gd. If you have questions, ask. "Derived works" includes all programs that utilize the library. Credit must be given in user-accessible documentation. This software is provided "AS IS." The copyright holders disclaim all warranties, either express or implied, including but not limited to implied warranties of merchantability and fitness for a particular purpose, with respect to this code and accompanying documentation. Although their code does not appear in gd, the authors wish to thank David Koblas, David Rowley, and Hutchison Avenue Software Corporation for their prior contributions. COPYING.LESSER0000664000175000017500000001672714737210011012400 0ustar janla64janla64 GNU LESSER GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below. 0. Additional Definitions. As used herein, "this License" refers to version 3 of the GNU Lesser General Public License, and the "GNU GPL" refers to version 3 of the GNU General Public License. "The Library" refers to a covered work governed by this License, other than an Application or a Combined Work as defined below. An "Application" is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library. A "Combined Work" is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the "Linked Version". The "Minimal Corresponding Source" for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version. The "Corresponding Application Code" for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work. 1. Exception to Section 3 of the GNU GPL. You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL. 2. Conveying Modified Versions. If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version: a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy. 3. Object Code Incorporating Material from Library Header Files. The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following: a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the object code with a copy of the GNU GPL and this license document. 4. Combined Works. You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following: a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the Combined Work with a copy of the GNU GPL and this license document. c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document. d) Do one of the following: 0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source. 1) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version. e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.) 5. Combined Libraries. You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License. b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 6. Revised Versions of the GNU Lesser General Public License. The Free Software Foundation may publish revised and/or new versions of the GNU Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation. If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library. draw.c0000664000175000017500000003216214747702717011465 0ustar janla64janla64/* draw.c */ /************************************************************************ Part of the dvipng distribution This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . Copyright (C) 2002-2015 Jan-Åke Larsson ************************************************************************/ #include "dvipng.h" #ifdef DEBUG #include /* isprint */ #endif struct stack_entry { dviunits h, v, w, x, y, z; /* stack entry */ subpixels hh,vv; } stack[STACK_SIZE+1]; /* stack + space for current pos */ struct stack_entry* dvi_stack=stack; #define MAXDRIFT 1 #define CHECK_MAXDRIFT(x,xx) \ if ( xx-PIXROUND(x,dvi->conv*shrinkfactor) < -MAXDRIFT ) { \ DEBUG_PRINT(DEBUG_DVI,(" add 1 to")); \ xx += 1; \ } \ if ( xx-PIXROUND(x,dvi->conv*shrinkfactor) > MAXDRIFT ) { \ DEBUG_PRINT(DEBUG_DVI,(" sub 1 to")); \ xx -= 1; \ } \ if (PIXROUND(dvi_stack->h,dvi->conv*shrinkfactor) != dvi_stack->hh \ || PIXROUND(dvi_stack->v,dvi->conv*shrinkfactor) != dvi_stack->vv)\ DEBUG_PRINT(DEBUG_DVI, \ (" drift (%d,%d)", \ dvi_stack->hh-PIXROUND(dvi_stack->h,dvi->conv*shrinkfactor), \ dvi_stack->vv-PIXROUND(dvi_stack->v,dvi->conv*shrinkfactor))); #define MoveRight(x) \ temp=x; dvi_stack->h += temp; \ if ( currentfont==NULL \ || temp > currentfont->s/6 || temp < -currentfont->s/6*4 ) \ dvi_stack->hh = PIXROUND(dvi_stack->h,dvi->conv*shrinkfactor); \ else \ dvi_stack->hh += PIXROUND( temp,dvi->conv*shrinkfactor ); \ CHECK_MAXDRIFT(dvi_stack->h,dvi_stack->hh) #define MoveDown(x) \ temp=x; dvi_stack->v += temp; \ if ( currentfont==NULL \ || temp > currentfont->s/6*5 || temp < currentfont->s/6*(-5) ) \ dvi_stack->vv = PIXROUND(dvi_stack->v,dvi->conv*shrinkfactor); \ else \ dvi_stack->vv += PIXROUND( temp,dvi->conv*shrinkfactor ); \ CHECK_MAXDRIFT(dvi_stack->v,dvi_stack->vv) #define DO_VFCONV(a) ((((struct font_entry*) parent)->type==DVI_TYPE)?a:\ (dviunits)((int64_t) a * ((struct font_entry*) parent)->s / (1 << 20))) dviunits SetChar(int32_t c) { struct char_entry* ptr=NULL; if (currentfont==NULL) Fatal("faulty DVI, trying to set character from null font"); if (c<0 || c>LASTFNTCHAR) { Warning("glyph index out of range (%d), skipping",c); return(0); } ptr=currentfont->chr[c]; if (ptr==NULL) { Warning("unable to draw glyph %d, skipping",c); return(0); } #ifdef DEBUG switch (currentfont->type) { case FONT_TYPE_VF: DEBUG_PRINT(DEBUG_DVI,("\n VF CHAR:\t")); break; case FONT_TYPE_PK: DEBUG_PRINT(DEBUG_DVI,("\n PK CHAR:\t")); break; case FONT_TYPE_FT: DEBUG_PRINT(DEBUG_DVI,("\n FT CHAR:\t")); break; default: DEBUG_PRINT(DEBUG_DVI,("\n NO CHAR:\t")) } if (debug & DEBUG_DVI && c>=0 && c<=UCHAR_MAX && isprint(c)) DEBUG_PRINT(DEBUG_DVI,("'%c' ",c)); DEBUG_PRINT(DEBUG_DVI,("%d at (%d,%d) tfmw %d", c, dvi_stack->hh,dvi_stack->vv,ptr?ptr->tfmw:0)); #endif if (currentfont->type==FONT_TYPE_VF) { return(SetVF(ptr)); } else { if (ptr->data == NULL) switch(currentfont->type) { case FONT_TYPE_PK: LoadPK(c, ptr); break; #ifdef HAVE_FT2 case FONT_TYPE_FT: LoadFT(c, ptr); break; #endif default: Fatal("undefined fonttype %d",currentfont->type); } if (page_imagep != NULL) return(SetGlyph(ptr, dvi_stack->hh, dvi_stack->vv)); else { /* Expand bounding box if necessary */ min(x_min,dvi_stack->hh - ptr->xOffset/shrinkfactor); min(y_min,dvi_stack->vv - ptr->yOffset/shrinkfactor); max(x_max,dvi_stack->hh - ptr->xOffset/shrinkfactor + ptr->w); max(y_max,dvi_stack->vv - ptr->yOffset/shrinkfactor + ptr->h); return(ptr->tfmw); } } return(0); } void DrawCommand(unsigned char* command, void* parent /* dvi/vf */) /* To be used both in plain DVI drawing and VF drawing */ { dviunits temp; if (/*command >= SETC_000 &&*/ *command <= SETC_127) { temp = SetChar((int32_t)*command); dvi_stack->h += temp; dvi_stack->hh += PIXROUND(temp,dvi->conv*shrinkfactor); CHECK_MAXDRIFT(dvi_stack->h,dvi_stack->hh); } else if (*command >= FONT_00 && *command <= FONT_63) { SetFntNum((int32_t)*command - FONT_00,parent); } else switch (*command) { case PUT1: case PUT2: case PUT3: case PUT4: DEBUG_PRINT(DEBUG_DVI,(" %d", UNumRead(command+1, dvi_commandlength[*command]-1))); (void) SetChar(UNumRead(command+1, dvi_commandlength[*command]-1)); break; case SET1: case SET2: case SET3: case SET4: DEBUG_PRINT(DEBUG_DVI,(" %d", UNumRead(command+1, dvi_commandlength[*command]-1))); { temp = SetChar(UNumRead(command+1, dvi_commandlength[*command]-1)); dvi_stack->h += temp; dvi_stack->hh += PIXROUND(temp,dvi->conv*shrinkfactor); CHECK_MAXDRIFT(dvi_stack->h,dvi_stack->hh); } break; case SET_RULE: DEBUG_PRINT(DEBUG_DVI,(" %d %d", UNumRead(command+1, 4), UNumRead(command+5, 4))); temp = SetRule(DO_VFCONV(UNumRead(command+1, 4)), DO_VFCONV(UNumRead(command+5, 4)), dvi_stack->hh, dvi_stack->vv); dvi_stack->h += temp; dvi_stack->hh += PIXROUND(temp,dvi->conv*shrinkfactor); CHECK_MAXDRIFT(dvi_stack->h,dvi_stack->hh); break; case PUT_RULE: DEBUG_PRINT(DEBUG_DVI,(" %d %d", UNumRead(command+1, 4), UNumRead(command+5, 4))); (void) SetRule(DO_VFCONV(UNumRead(command+1, 4)), DO_VFCONV(UNumRead(command+5, 4)), dvi_stack->hh, dvi_stack->vv); break; case BOP: Fatal("BOP occurs within page"); break; case EOP: break; case PUSH: /* is next item on stack? */ if (dvi_stack == &stack[STACK_SIZE-1]) Fatal("DVI stack overflow"); { struct stack_entry *next=dvi_stack+1; next->h = dvi_stack->h; next->v = dvi_stack->v; next->w = dvi_stack->w; next->x = dvi_stack->x; next->y = dvi_stack->y; next->z = dvi_stack->z; next->hh = dvi_stack->hh; next->vv = dvi_stack->vv; dvi_stack=next; } break; case POP: if (dvi_stack == stack) Fatal("DVI stack underflow"); dvi_stack--; break; case RIGHT1: case RIGHT2: case RIGHT3: case RIGHT4: DEBUG_PRINT(DEBUG_DVI,(" %d", SNumRead(command+1, dvi_commandlength[*command]-1))); MoveRight(DO_VFCONV(SNumRead(command+1, dvi_commandlength[*command]-1))); break; case W1: case W2: case W3: case W4: dvi_stack->w = SNumRead(command+1, dvi_commandlength[*command]-1); DEBUG_PRINT(DEBUG_DVI,(" %d",dvi_stack->w)); case W0: MoveRight(DO_VFCONV(dvi_stack->w)); break; case X1: case X2: case X3: case X4: dvi_stack->x = SNumRead(command+1, dvi_commandlength[*command]-1); DEBUG_PRINT(DEBUG_DVI,(" %d",dvi_stack->x)); case X0: MoveRight(DO_VFCONV(dvi_stack->x)); break; case DOWN1: case DOWN2: case DOWN3: case DOWN4: DEBUG_PRINT(DEBUG_DVI,(" %d", SNumRead(command+1, dvi_commandlength[*command]-1))); MoveDown(DO_VFCONV(SNumRead(command+1, dvi_commandlength[*command]-1))); break; case Y1: case Y2: case Y3: case Y4: dvi_stack->y = SNumRead(command+1, dvi_commandlength[*command]-1); DEBUG_PRINT(DEBUG_DVI,(" %d",dvi_stack->y)); case Y0: MoveDown(DO_VFCONV(dvi_stack->y)); break; case Z1: case Z2: case Z3: case Z4: dvi_stack->z = SNumRead(command+1, dvi_commandlength[*command]-1); DEBUG_PRINT(DEBUG_DVI,(" %d",dvi_stack->z)); case Z0: MoveDown(DO_VFCONV(dvi_stack->z)); break; case FNT1: case FNT2: case FNT3: case FNT4: DEBUG_PRINT(DEBUG_DVI,(" %d", UNumRead(command+1, dvi_commandlength[*command]-1))); SetFntNum(UNumRead(command+1, dvi_commandlength[*command]-1),parent); break; case XXX1: case XXX2: case XXX3: case XXX4: DEBUG_PRINT(DEBUG_DVI,(" %d", UNumRead(command+1, dvi_commandlength[*command]-1))); SetSpecial((char*)command + dvi_commandlength[*command], (char*)command + dvi_commandlength[*command] +UNumRead(command+1, dvi_commandlength[*command]-1), dvi_stack->hh,dvi_stack->vv); break; case FNT_DEF1: case FNT_DEF2: case FNT_DEF3: case FNT_DEF4: if (((struct font_entry*)parent)->type==DVI_TYPE) { FontDef(command, parent); } else { Fatal("%s within VF macro from %s",dvi_commands[*command], ((struct font_entry*)parent)->n); } break; case PRE: case POST: case POST_POST: Fatal("%s occurs within page",dvi_commands[*command]); break; case NOP: break; default: Fatal("%s is an undefined command",dvi_commands[*command]); break; } } void BeginVFMacro(struct font_entry* currentvf) { struct stack_entry *next=dvi_stack+1; if (dvi_stack == &stack[STACK_SIZE-1]) Fatal("DVI stack overflow"); next->h = dvi_stack->h; next->v = dvi_stack->v; next->w = next->x = next->y = next->z = 0; next->hh = dvi_stack->hh; next->vv = dvi_stack->vv; dvi_stack = next; DEBUG_PRINT(DEBUG_DVI,("\n START VF:\tPUSH, W = X = Y = Z = 0")); SetFntNum(currentvf->defaultfont,currentvf); } void EndVFMacro(void) { if (dvi_stack == stack) Fatal("DVI stack underflow"); dvi_stack--; DEBUG_PRINT(DEBUG_DVI,("\n END VF:\tPOP ")); } static void DrawPage(dviunits hoffset, dviunits voffset) /* To be used after having read BOP and will exit cleanly when * encountering EOP. */ { unsigned char* command; /* current command */ dvi_stack->h = hoffset; dvi_stack->v = voffset; dvi_stack->w = dvi_stack->x = dvi_stack->y = dvi_stack->z = 0; dvi_stack->hh = PIXROUND( dvi_stack->h , dvi->conv*shrinkfactor ); dvi_stack->vv = PIXROUND( dvi_stack->v , dvi->conv*shrinkfactor ); currentfont = NULL; /* No default font */ command=DVIGetCommand(dvi); DEBUG_PRINT(DEBUG_DVI,("DRAW CMD:\t%s", dvi_commands[*command])); while (*command != EOP) { DrawCommand(command,dvi); command=DVIGetCommand(dvi); DEBUG_PRINT(DEBUG_DVI,("DRAW CMD:\t%s", dvi_commands[*command])); } } void DrawPages(void) { struct page_list *dvi_pos; pixels x_width,y_width,x_offset,y_offset; int pagecounter=(option_flags & DVI_PAGENUM)?0:10; dvi_pos=NextPPage(dvi,NULL); if (dvi_pos!=NULL) { while(dvi_pos!=NULL) { SeekPage(dvi,dvi_pos); Message(BE_NONQUIET,"[%d", dvi_pos->count[pagecounter]); if (dvi_pos->count[pagecounter]!=dvi_pos->count[0]) Message(BE_NONQUIET," (%d)", dvi_pos->count[0]); x_max = y_max = INT32_MIN; x_min = y_min = INT32_MAX; DrawPage((dviunits)0,(dviunits)0); /* Store background color. Background color of a page is given by the color at EOP rather than the color at BOP. */ StoreBackgroundColor(dvi_pos); /* Store pagesize */ if (dvi->flags & DVI_PREVIEW_LATEX_TIGHTPAGE) { x_width_def=x_width_tightpage; y_width_def=y_width_tightpage; x_offset_def=x_offset_tightpage; y_offset_def=y_offset_tightpage; } if (x_width_def >= 0) { /* extend BBOX */ min(x_min,-x_offset_def); max(x_max,x_min + x_width_def); min(y_min,-y_offset_def); max(y_max,y_min + y_width_def); } if (x_width_def <= 0 || option_flags & EXPAND_BBOX) { x_width = x_max-x_min; y_width = y_max-y_min; x_offset = -x_min; /* offset by moving topleft corner */ y_offset = -y_min; /* offset by moving topleft corner */ } else { x_width=x_width_def; y_width=y_width_def; x_offset=x_offset_def; y_offset=y_offset_def; } DEBUG_PRINT(DEBUG_DVI,("\n IMAGE:\t%dx%d",x_width,y_width)); SeekPage(dvi,dvi_pos); CreateImage(x_width,y_width); #ifdef DEBUG DEBUG_PRINT(DEBUG_DVI,("\n@%d PAGE START:\tBOP",dvi_pos->offset)); { int i; for (i=0;i<10;i++) DEBUG_PRINT(DEBUG_DVI,(" %d",dvi_pos->count[i])); DEBUG_PRINT(DEBUG_DVI,(" (%d)\n",dvi_pos->count[10])); } #endif Message(REPORT_DEPTH," depth=%d", y_width-y_offset-1); Message(REPORT_HEIGHT," height=%d", y_offset+1); Message(REPORT_WIDTH," width=%d", x_width); page_flags &= ~PAGE_PREVIEW_BOP; DrawPage(x_offset*dvi->conv*shrinkfactor, y_offset*dvi->conv*shrinkfactor); if ( ! (option_flags & MODE_PICKY && page_flags & PAGE_GAVE_WARN )) { WriteImage(dvi->outname,dvi_pos->count[pagecounter]); #ifdef TIMING ++ndone; #endif } else { exitcode=EXIT_FAILURE; Message(BE_NONQUIET,"(page not rendered)"); DestroyImage(); } Message(BE_NONQUIET,"] "); fflush(stdout); page_flags = 0; dvi_pos=NextPPage(dvi,dvi_pos); } Message(BE_NONQUIET,"\n"); ClearPpList(); } } dvi.c0000664000175000017500000003340714747720574011316 0ustar janla64janla64/* dvi.c */ /************************************************************************ Part of the dvipng distribution This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . Copyright (C) 2002-2015, 2019, 2025 Jan-Åke Larsson ************************************************************************/ #include "dvipng.h" #ifdef MIKTEX # include # define USLEEP Sleep #else /* MIKTEX */ # ifdef HAVE_LIBGEN_H # include # else # define basename xbasename # endif # ifdef WIN32 # define USLEEP Sleep # include # else # include # define USLEEP usleep # endif /* WIN32 */ #endif /* MIKTEX */ #include #include bool followmode=0; bool DVIFollowToggle(void) { return followmode = ! followmode; } static unsigned char fgetc_follow(FILE* fp) { int got=fgetc(fp),nsleep=1; while(followmode && got==EOF) { USLEEP(nsleep/1310); /* After a few trials, poll every 65536/1310=50 usec */ clearerr(fp); got=fgetc(fp); if (nsleep<50000) nsleep*=2; } if (got==EOF) Fatal("DVI file ends prematurely"); return (unsigned char)got; } static void DVIInit(struct dvi_data* dvi) { int k; unsigned char* pre; struct stat stat; fseek(dvi->filep,0,SEEK_SET); pre=DVIGetCommand(dvi); if (*pre != PRE) { Fatal("PRE does not occur first - are you sure this is a DVI file?"); } k = UNumRead(pre+1,1); DEBUG_PRINT(DEBUG_DVI,("DVI START:\tPRE %d",k)); if (k != DVIFORMAT) { Fatal("DVI format = %d, can only process DVI format %d files", k, DVIFORMAT); } dvi->num = UNumRead(pre+2, 4); dvi->den = UNumRead(pre+6, 4); DEBUG_PRINT(DEBUG_DVI,(" %d/%d",dvi->num,dvi->den)); dvi->mag = UNumRead(pre+10, 4); /*FIXME, see font.c*/ DEBUG_PRINT(DEBUG_DVI,(" %u",dvi->mag)); if ( usermag > 0 && usermag != dvi->mag ) { Warning("DVI magnification of %lu over-ridden by user (%lu)", (long)dvi->mag, usermag ); dvi->mag = usermag; } dvi->conv = (1.0/(((double)dvi->num / (double)dvi->den) * ((double)dvi->mag / 1000.0) * ((double)dpi*shrinkfactor/254000.0)))+0.5; if ( dvi->conv==0 ) Fatal("DVI magnification %u too large, override this by using the -x option",dvi->mag); DEBUG_PRINT(DEBUG_DVI,(" (%d)",dvi->conv)); k = UNumRead(pre+14,1); DEBUG_PRINT(DEBUG_DVI,(" '%.*s'",k,pre+15)); Message(BE_VERBOSE,"'%.*s' -> %s\n",k,pre+15,dvi->outname); fstat(fileno(dvi->filep), &stat); dvi->mtime = stat.st_mtime; dvi->pagelistp=NULL; dvi->flags = 0; } struct dvi_data* DVIOpen(char* dviname,char* outname) { char* tmpstring; struct dvi_data* dvi; if ((dvi = calloc(1,sizeof(struct dvi_data)))==NULL) Fatal("cannot allocate memory for DVI struct"); dvi->type = DVI_TYPE; dvi->fontnump=NULL; if ((dvi->name = malloc(strlen(dviname)+5))==NULL) Fatal("cannot allocate space for DVI filename"); strcpy(dvi->name, dviname); tmpstring = strrchr(dvi->name, '.'); if (tmpstring == NULL || strcmp(tmpstring,".dvi") != 0) strcat(dvi->name, ".dvi"); if (outname==NULL) { if ((dvi->outname = malloc(strlen(basename(dviname))+7))==NULL) { free(dvi->name); free(dvi); Fatal("cannot allocate space for output filename"); } strcpy(dvi->outname,basename(dviname)); tmpstring = strrchr(dvi->outname, '.'); if (tmpstring != NULL && strcmp(tmpstring,".dvi") == 0) *tmpstring = '\0'; strcat(dvi->outname, "%d.png"); } else { if ((dvi->outname = malloc(strlen(outname)+1))==NULL) { free(dvi->name); free(dvi); Fatal("cannot allocate space for output filename"); } strcpy(dvi->outname,outname); } if ((dvi->filep = fopen(dvi->name,"rb")) == NULL) { /* do not insist on .dvi */ tmpstring = strrchr(dvi->name, '.'); *tmpstring='\0'; dvi->filep = fopen(dvi->name,"rb"); } while((dvi->filep == NULL) && followmode) { USLEEP(50); *tmpstring='.'; if ((dvi->filep = fopen(dvi->name,"rb")) == NULL) { /* do not insist on .dvi */ *tmpstring='\0'; dvi->filep = fopen(dvi->name,"rb"); } } if (dvi->filep == NULL) { free(dvi->name); free(dvi->outname); free(dvi); perror(dviname); exit (EXIT_FAILURE); } DEBUG_PRINT(DEBUG_DVI,("OPEN FILE\t%s", dvi->name)); DVIInit(dvi); return(dvi); } unsigned char* DVIGetCommand(struct dvi_data* dvi) /* This function reads in and stores the next dvi command. */ /* Mmap is not appropriate here, we may want to read from half-written files. */ { static unsigned char* command=NULL; static uint32_t commlen=0; unsigned char *current = command; int length; uint32_t strlength=0; if (commlen==0) { commlen=STRSIZE; if ((current=command=malloc(commlen))==NULL) Fatal("cannot allocate memory for DVI command"); } DEBUG_PRINT(DEBUG_DVI,("\n@%ld ", ftell(dvi->filep))); *(current++) = fgetc_follow(dvi->filep); length = dvi_commandlength[*command]; if (length < 0) Fatal("undefined DVI op-code %d",*command); while(current < command+length) *(current++) = fgetc_follow(dvi->filep); switch (*command) { case XXX4: strlength = *(current - 4); case XXX3: strlength = strlength * 256 + *(current - 3); case XXX2: strlength = strlength * 256 + *(current - 2); case XXX1: strlength = strlength * 256 + *(current - 1); break; case FNT_DEF1: case FNT_DEF2: case FNT_DEF3: case FNT_DEF4: strlength = *(current - 1) + *(current - 2); break; case PRE: strlength = *(current - 1); break; } if (strlength > 0) { /* Read string */ if (strlength > UINT32_MAX - (uint32_t)length - 1) Fatal("integer overflow in DVI command length"); if (strlength+1 + (uint32_t)length > commlen) { /* string + command length exceeds that of buffer */ commlen=strlength+1 + (uint32_t)length; if ((command=realloc(command,commlen))==NULL) Fatal("cannot allocate memory for DVI command"); current = command + length; } while(current < command+length+strlength) *(current++) = fgetc_follow(dvi->filep); *current='\0'; } return(command); } bool DVIIsNextPSSpecial(struct dvi_data* dvi) /* This function checks if the next dvi command is a raw PS special */ /* Mmap is not appropriate here, we may want to read from half-written files. */ { long fpos; uint32_t strlength=0; bool israwps=false; DEBUG_PRINT(DEBUG_DVI,("\n CHECKING NEXT DVI COMMAND ")); fpos=ftell(dvi->filep); switch (fgetc_follow(dvi->filep)) { case XXX4: strlength = fgetc_follow(dvi->filep); case XXX3: strlength = strlength * 256 + fgetc_follow(dvi->filep); case XXX2: strlength = strlength * 256 + fgetc_follow(dvi->filep); case XXX1: strlength = strlength * 256 + fgetc_follow(dvi->filep); } if (strlength > 0) { switch(fgetc_follow(dvi->filep)) { case 'p': if (strlength > 2 && fgetc_follow(dvi->filep)=='s' && fgetc_follow(dvi->filep)==':') israwps=true; break; case '"': israwps=true; } } fseek(dvi->filep,fpos,SEEK_SET); return(israwps); } uint32_t CommandLength(unsigned char* command) { /* generally 2^32+5 bytes max, but in practice 32 bit numbers suffice */ uint32_t length=0; length = dvi_commandlength[*command]; switch (*command) { case XXX1: case XXX2: case XXX3: case XXX4: length += UNumRead(command + 1,length - 1); break; case FNT_DEF1: case FNT_DEF2: case FNT_DEF3: case FNT_DEF4: length += *(command + length - 1) + *(command + length - 2); break; case PRE: length += *(command + length - 1); break; } return(length); } static void SkipPage(struct dvi_data* dvi) { /* Skip present page */ unsigned char* command; command=DVIGetCommand(dvi); while (*command != EOP) { switch (*command) { case FNT_DEF1: case FNT_DEF2: case FNT_DEF3: case FNT_DEF4: DEBUG_PRINT(DEBUG_DVI,("NOSKIP CMD:\t%s", dvi_commands[*command])); FontDef(command,dvi); break; case XXX1: case XXX2: case XXX3: case XXX4: DEBUG_PRINT(DEBUG_DVI,("NOSKIP CMD:\t%s %d", dvi_commands[*command], UNumRead(command+1, dvi_commandlength[*command]-1))); SetSpecial((char*)command + dvi_commandlength[*command], (char*)command + dvi_commandlength[*command] +UNumRead(command+1, dvi_commandlength[*command]-1), 0,0); break; case BOP: case PRE: case POST: case POST_POST: Fatal("%s occurs within page", dvi_commands[*command]); break; #ifdef DEBUG default: DEBUG_PRINT(DEBUG_DVI,("SKIP CMD:\t%s", dvi_commands[*command])); #endif } command=DVIGetCommand(dvi); } /* while */ DEBUG_PRINT(DEBUG_DVI,("SKIP CMD:\t%s", dvi_commands[*command])); } static struct page_list* InitPage(struct dvi_data* dvi) { /* Find page start, return pointer to page_list entry if found */ struct page_list* tpagelistp=NULL; unsigned char* command; command=DVIGetCommand(dvi); /* Skip until page start or postamble */ while((*command != BOP) && (*command != POST)) { switch(*command) { case FNT_DEF1: case FNT_DEF2: case FNT_DEF3: case FNT_DEF4: DEBUG_PRINT(DEBUG_DVI,("NOPAGE CMD:\t%s", dvi_commands[*command])); FontDef(command,dvi); break; case NOP: DEBUG_PRINT(DEBUG_DVI,("NOPAGE CMD:\tNOP")); break; default: Fatal("%s occurs outside page", dvi_commands[*command]); } command=DVIGetCommand(dvi); } if ((tpagelistp = malloc(sizeof(struct page_list) +(csp+1-2)*sizeof(struct dvi_color)))==NULL) Fatal("cannot allocate memory for new page entry"); tpagelistp->next = NULL; if ( *command == BOP ) { /* Init page */ int i; DEBUG_PRINT(DEBUG_DVI,("PAGE START:\tBOP")); StoreColorStack(tpagelistp); tpagelistp->offset = ftell(dvi->filep)-45; for (i = 0; i <= 9; i++) { tpagelistp->count[i] = UNumRead(command + 1 + i*4, 4); DEBUG_PRINT(DEBUG_DVI,(" %d",tpagelistp->count[i])); } if (dvi->pagelistp==NULL) tpagelistp->count[10] = 1; else tpagelistp->count[10] = dvi->pagelistp->count[10]+1; DEBUG_PRINT(DEBUG_DVI,(" (%d)", tpagelistp->count[10])); } else { DEBUG_PRINT(DEBUG_DVI,("DVI END:\tPOST")); tpagelistp->offset = ftell(dvi->filep)-1; tpagelistp->count[0] = PAGE_POST; /* POST */ tpagelistp->count[10] = PAGE_POST; /* POST */ } return(tpagelistp); } int SeekPage(struct dvi_data* dvi, struct page_list* page) { ReadColorStack(page); return(fseek(dvi->filep, page->offset+((page->count[0]==PAGE_POST) ? 1L : 45L), SEEK_SET)); } struct page_list* NextPage(struct dvi_data* dvi, struct page_list* page) { struct page_list* tpagelistp; /* if page points to POST there is no next page */ if (page!=NULL && page->count[0]==PAGE_POST) return(NULL); /* If we have read past the last page in our current list or the * list is empty, sneak a look at the next page */ if (dvi->pagelistp==NULL || dvi->pagelistp->offset+45L < ftell(dvi->filep)) { tpagelistp=dvi->pagelistp; dvi->pagelistp=InitPage(dvi); dvi->pagelistp->next=tpagelistp; } if (page!=dvi->pagelistp) { /* also works if page==NULL, we'll get the first page then */ tpagelistp=dvi->pagelistp; while(tpagelistp!=NULL && tpagelistp->next!=page) tpagelistp=tpagelistp->next; } else { /* dvi->pagelistp points to the last page we've read so far, * the last page that we know where it is, so to speak * So look at the next */ (void)SeekPage(dvi,dvi->pagelistp); SkipPage(dvi); tpagelistp=dvi->pagelistp; dvi->pagelistp=InitPage(dvi); dvi->pagelistp->next=tpagelistp; tpagelistp=dvi->pagelistp; } return(tpagelistp); } struct page_list* PrevPage(struct dvi_data* dvi, struct page_list* page) { return(page->next); } struct page_list* FindPage(struct dvi_data* dvi, int32_t pagenum, bool abspage) /* Find first page of certain number, absolute number if abspage is set */ { struct page_list* page=NextPage(dvi, NULL); if (pagenum==PAGE_LASTPAGE || pagenum==PAGE_POST) { while(page!=NULL && page->count[0]!=PAGE_POST) page=NextPage(dvi,page); if (pagenum==PAGE_LASTPAGE) page=PrevPage(dvi,page); } else if (pagenum!=PAGE_FIRSTPAGE) while(page != NULL && pagenum != page->count[abspage ? 0 : 10]) page=NextPage(dvi,page); return(page); } static void DelPageList(struct dvi_data* dvi) { struct page_list* temp; /* Delete the page list */ temp=dvi->pagelistp; while(temp!=NULL) { dvi->pagelistp=dvi->pagelistp->next; free(temp); temp=dvi->pagelistp; } } void DVIClose(struct dvi_data* dvi) { if (dvi!=NULL) { fclose(dvi->filep); DelPageList(dvi); ClearPSHeaders(); free(dvi->outname); free(dvi->name); free(dvi); } } bool DVIReOpen(struct dvi_data* dvi) { struct stat stat; fstat(fileno(dvi->filep), &stat); if (dvi->mtime != stat.st_mtime) { fclose(dvi->filep); dvi->filep=NULL; DelPageList(dvi); ClearPSHeaders(); while(((dvi->filep = fopen(dvi->name,"rb")) == NULL) && followmode) { USLEEP(50); } if (dvi->filep == NULL) { perror(dvi->name); exit(EXIT_FAILURE); } Message(PARSE_STDIN,"Reopened file\n"); DEBUG_PRINT(DEBUG_DVI,("\nREOPEN FILE\t%s", dvi->name)); DVIInit(dvi); return(true); } return(false); } dvipng.10000664000175000017500000004557414747712246011746 0ustar janla64janla64.\" -*- mode: troff; coding: utf-8 -*- .\" Automatically generated by Pod::Man 5.01 (Pod::Simple 3.43) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>. .ie n \{\ . ds C` "" . ds C' "" 'br\} .el\{\ . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "DVIPNG 1" .TH DVIPNG 1 2025-02-02 "dvipng 1.18" "User commands" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH NAME dvipng \- A DVI\-to\-PNG translator .SH SYNOPSIS .IX Header "SYNOPSIS" dvipng [options] filename .PP dvipng [options] [filename] \- .SH DESCRIPTION .IX Header "DESCRIPTION" This program makes PNG and/or GIF graphics from DVI files as obtained from TeX and its relatives. .PP If GIF support is enabled, GIF output is chosen by using the \&\fBdvigif\fR binary or with the \fB\-\-gif\fR option. .PP The benefits of \fBdvipng\fR/\fBdvigif\fR include .IP * 4 Speed. It is a very fast bitmap-rendering code for DVI files, which makes it suitable for generating large amounts of images on-the-fly, as needed in preview-latex, WeBWorK and others. .IP * 4 It does not read the postamble, so it can be started before TeX finishes. There is a \fB\-\-follow\fR switch that makes dvipng wait at end-of-file for further output, unless it finds the POST marker that indicates the end of the DVI. .IP * 4 Interactive query of options. dvipng can read options interactively through stdin, and all options are usable. It is even possible to change the input file through this interface. .IP * 4 Supports PK, VF, PostScript Type1, and TrueType fonts, subfonts (i.e., as used in CJK-LaTeX), color specials, and inclusion of PostScript, PNG, JPEG or GIF images. .IP * 4 and more... .SH OPTIONS .IX Header "OPTIONS" Many of the parameterless options listed here can be turned off by suffixing the option with a zero (\fB0\fR); for instance, to turn off page reversal, use \fB\-r0\fR. Such options are marked with a trailing \&\fB*\fR. .IP \fB\-\fR 4 .IX Item "-" Read additional options from standard input after processing the command line. .IP \fB\-\-help\fR 4 .IX Item "--help" Print a usage message and exit. .IP \fB\-\-version\fR 4 .IX Item "--version" Print the version number and exit. .IP "\fB\-bd\fR \fInum\fR" 4 .IX Item "-bd num" .PD 0 .IP "\fB\-bd\fR \fIcolor_spec\fR" 4 .IX Item "-bd color_spec" .IP "\fB\-bd '\fR\fInum\fR\fB \fR\fIcolor_spec\fR\fB'\fR" 4 .IX Item "-bd 'num color_spec'" .PD Set the pixel width of the transparent border (default 0). Using this option will make the image edges transparent, but it only affects pixels with the background color. Giving a \fIcolor_spec\fR will set the fallback color, to be used in viewers that cannot handle transparency (the default is the background color). The color spec should be in TeX color \especial syntax, e.g., 'rgb 1.0 0.0 0.0'. Setting the fallback color makes the default border width 1 px. .IP "\fB\-\-bdpi\fR \fInum\fR" 4 .IX Item "--bdpi num" This option only has an effect when using bitmapped (PK) fonts. The option sets the base (Metafont) resolution, both horizontal and vertical, to \fInum\fR dpi (dots per inch). This option is necessary when manually selecting Metafont mode with the \-\-mode option (see below). .IP "\fB\-bg\fR \fIcolor_spec\fR" 4 .IX Item "-bg color_spec" Choose background color for the images. This option will be ignored if there is a background color \especial in the DVI. The color spec should be in TeX color \especial syntax, e.g., 'rgb 1.0 0.0 0.0'. You can also specify 'Transparent' or 'transparent' which will give you a transparent background with the normal background as a fallback color. A capitalized 'Transparent' will give a full-alpha transparency, while an all-lowercase 'transparent' will give a simple fully transparent background with non-transparent antialiased pixels. The latter would be suitable for viewers who cannot cope with a true alpha channel. GIF images do not support full alpha transparency, so in case of GIF output, both variants will use the latter behaviour. .IP "\fB\-d\fR \fInum\fR" 4 .IX Item "-d num" Set the debug flags, showing what dvipng (thinks it) is doing. This will work unless dvipng has been compiled without the \f(CW\*(C`DEBUG\*(C'\fR option (not recommended). Set the flags as you need them, use \fB\-d \-1\fR as the first option for maximum output. .IP "\fB\-D\fR \fInum\fR" 4 .IX Item "-D num" Set the output resolution, both horizontal and vertical, to \fInum\fR dpi (dots per inch). .Sp One may want to adjust this to fit a certain text font size (e.g., on a web page), and for a text font height of \fIfont_px\fR pixels (in Mozilla) the correct formula is .Sp .Vb 1 \& = * 72.27 / 10 [px * TeXpt/in / TeXpt] .Ve .Sp The last division by ten is due to the standard font height 10pt in your document, if you use 12pt, divide by 12. Unfortunately, some proprietary browsers have font height in pt (points), not pixels. You have to rescale that to pixels, using the screen resolution (default is usually 96 dpi) which means the formula is .Sp .Vb 1 \& = * 96 / 72 [pt * px/in / (pt/in)] .Ve .Sp On some high-res screens, the value is instead 120 dpi. Good luck! .IP \fB\-\-depth*\fR 4 .IX Item "--depth*" Report the depth of the image. This only works reliably when the LaTeX style \fIpreview.sty\fR from preview-latex is used with the \fBactive\fR option. It reports the number of pixels from the bottom of the image to the baseline of the image. This can be used for vertical positioning of the image in, e.g., web documents, where one would use (Cascading StyleSheets 1) .Sp .Vb 1 \& .Ve .Sp The depth is a negative offset in this case, so the minus sign is necessary, and the unit is pixels (px). .IP \fB\-\-dvinum*\fR 4 .IX Item "--dvinum*" Set this option to make the output page number be the TeX page numbers rather than the physical page number. See the \fB\-o\fR switch. .IP "\fB\-fg\fR \fIcolor_spec\fR" 4 .IX Item "-fg color_spec" Choose foreground color for the images. This option will be ignored if there is a foreground color \especial in the DVI. The color spec should be in TeX color \especial syntax, e.g., 'rgb 1.0 0.0 0.0'. .IP \fB\-\-follow*\fR 4 .IX Item "--follow*" Wait for data at end-of-file. One of the benefits of dvipng is that it does not read the postamble, so it can be started before TeX finishes. This switch makes dvipng wait at end-of-file for further output, unless it finds the POST marker that indicates the end of the DVI. This is similar to \fBtail \-f\fR but for DVI-to-PNG conversion. .IP \fB\-\-freetype*\fR 4 .IX Item "--freetype*" Enable/disable FreeType font rendering (default on). This option is available if the FreeType2 font library was present at compilation time. If this is the case, dvipng will have direct support for PostScript Type1 and TrueType fonts internally, rather than using \fBgsftopk\fR for rendering the fonts. If you have PostScript versions of Computer Modern installed, there will be no need to generate bitmapped (PK) variants on disk of these. Then, you can render images at different (and unusual) resolutions without cluttering the disk with lots of bitmapped fonts. One reason to disable FreeType font rendering would be to generate identical output on different platforms, since FreeType uses the native renderer and therefore can give slightly different output on each platform. .IP "\fB\-\-gamma\fR \fInum\fR" 4 .IX Item "--gamma num" Control the interpolation of colors in the greyscale anti-aliasing color palette. Default value is 1.0. For 0 < \fInum\fR < 1, the fonts will be lighter (more like the background), and for \fInum\fR > 1, the fonts will be darker (more like the foreground). .IP \fB\-\-gif*\fR 4 .IX Item "--gif*" The images are output in the GIF format, if GIF support is enabled. This is the default for the \fBdvigif\fR binary, which only will be available when GIF support is enabled. GIF images are palette images (see the \fB\-\-palette\fR option) and does not support true alpha channels (see the \fB\-\-bg\fR option). See also the \fB\-\-png\fR option. .IP \fB\-\-height*\fR 4 .IX Item "--height*" Report the height of the image. This only works reliably when the LaTeX style \fIpreview.sty\fR from preview-latex is used with the \fBactive\fR option. It reports the number of pixels from the top of the image to the baseline of the image. The total height of the image is obtained as the sum of the values reported from \&\fB\-\-height\fR and \fB\-\-depth\fR. .IP "\fB\-l [=]\fR\fInum\fR" 4 .IX Item "-l [=]num" The last page printed will be the first one numbered \fInum\fR. Default is the last page in the document. If \fInum\fR is prefixed by an equals sign, then it (and the argument to the \fB\-p\fR option, if specified) is treated as a physical (absolute) page number, rather than a value to compare with the TeX \fB\ecount0\fR values stored in the DVI file. Thus, using \fB\-l =9\fR will end with the ninth page of the document, no matter what the pages are actually numbered. .IP "\fB\-\-mode\fR \fImode\fR" 4 .IX Item "--mode mode" This option only has an effect when using bitmapped (PK) fonts. Use \&\fImode\fR as the Metafont device name for the PK fonts (both for path searching and font generation). This needs to be augmented with the base device resolution, given with the \fB\-\-bdpi\fR option. See the file <\fBftp://ftp.tug.org/tex/modes.mf\fR> for a list of resolutions and mode names for most devices. .IP \fB\-M*\fR 4 .IX Item "-M*" This option only has an effect when using bitmapped (PK) fonts. It turns off automatic PK font generation (\fImktexpk\fR). .IP \fB\-\-nogs*\fR 4 .IX Item "--nogs*" This switch prohibits the internal call to GhostScript for displaying PostScript specials. \fB\-\-nogs0\fR turns the call back on. .IP \fB\-\-nogssafer*\fR 4 .IX Item "--nogssafer*" Normally, if GhostScript is used to render PostScript specials, the GhostScript interpreter is run with the option \fB\-dSAFER\fR. The \&\fB\-\-nogssafer\fR option runs GhostScript without \fB\-dSAFER\fR. The \&\fB\-dSAFER\fR option in Ghostscript disables PostScript operators such as deletefile, to prevent possibly malicious PostScript programs from having any effect. .IP \fB\-\-norawps*\fR 4 .IX Item "--norawps*" Some packages generate raw PostScript specials, even non-rendering such specials. This switch turns off the internal call to GhostScript intended to display these raw PostScript specials. \fB\-\-norawps0\fR turns the call back on. .IP "\fB\-o\fR \fIname\fR" 4 .IX Item "-o name" Send output to the file \fIname\fR. A single occurrence of \fR\f(CB%d\fR\fB\fR or \&\fB\fR\f(CB%01d\fR\fB\fR, ..., \fB\fR\f(CB%09d\fR\fB\fR will be exchanged for the physical page number (this can be changed, see the \fB\-\-dvinum\fR switch). The default output filename is \fIfile\fR\fB\fR\f(CB%d\fR\fB.png\fR where the input DVI file was \fIfile\fR\fB.dvi\fR. .IP "\fB\-O\fR \fIx\-offset\fR\fB,\fR\fIy\-offset\fR" 4 .IX Item "-O x-offset,y-offset" Move the origin by \fIx\-offset\fR,\fIy\-offset\fR, a comma-separated pair of dimensions such as \fB.1in,\-.3cm\fR. The origin of the page is shifted from the default position (of one inch down, one inch to the right from the upper left corner of the paper) by this amount. .IP "\fB\-p [=]\fR\fInum\fR" 4 .IX Item "-p [=]num" The first page printed will be the first one numbered \fInum\fR. Default is the first page in the document. If \fInum\fR is prefixed by an equals sign, then it (and the argument to the \fB\-l\fR option, if specified) is treated as a physical (absolute) page number, rather than a value to compare with the TeX \fB\ecount0\fR values stored in the DVI file. Thus, using \fB\-p =3\fR will start with the third page of the document, no matter what the pages are actually numbered. .IP \fB\-\-palette*\fR 4 .IX Item "--palette*" When an external image is included, \fBdvipng\fR will automatically switch to truecolor mode, to avoid unnecessary delay and quality reduction, and enable the EPS translator to draw on a transparent background and outside of the boundingbox. This switch will force palette (256\-color) output and make \fBdvipng\fR revert to opaque clipped image inclusion. This will also override the \fB\-\-truecolor\fR switch if present. .IP \fB\-\-picky*\fR 4 .IX Item "--picky*" No images are output when a warning occurs. Normally, dvipng will output an image in spite of a warning, but there may be something missing in this image. One reason to use this option would be if you have a more complete but slower fallback converter. Mainly, this is useful for failed figure inclusion and unknown \especial occurrences, but warnings will also occur for missing or unknown color specs and missing PK fonts. .IP \fB\-\-png*\fR 4 .IX Item "--png*" The images are output in the PNG format. This is the default for the \&\fBdvipng\fR binary. See also the \fB\-\-gif\fR option. .IP "\fB\-pp\fR \fIfirstpage\fR\fB\-\fR\fIlastpage\fR" 4 .IX Item "-pp firstpage-lastpage" Print pages \fIfirstpage\fR through \fIlastpage\fR; but not quite equivalent to \fB\-p\fR \fIfirstpage\fR \fB\-l\fR \fIlastpage\fR. For example, when rendering a book, there may be several instances of a page in the DVI file (one in \f(CW\*(C`\efrontmatter\*(C'\fR, one in \f(CW\*(C`\emainmatter\*(C'\fR, and one in \f(CW\*(C`\ebackmatter\*(C'\fR). In case of several pages matching, \fB\-pp\fR \&\fIfirstpage\fR\fB\-\fR\fIlastpage\fR will render \fIall\fR pages that matches the specified range, while \fB\-p\fR \fIfirstpage\fR \fB\-l\fR \&\fIlastpage\fR will render the pages from the \fIfirst\fR occurrence of \fIfirstpage\fR to the \fIfirst\fR occurrence of \fIlastpage\fR. This is the (undocumented) behaviour of dvips. In dvipng you can give both kinds of options, in which case you get all pages that matches the range in \fB\-pp\fR between the pages from \fB\-p\fR to \fB\-l\fR. Also multiple \fB\-pp\fR options accumulate, unlike \fB\-p\fR and \fB\-l\fR. The \fB\-\fR separator can also be \fB:\fR. Note that \fB\-pp \-1\fR will be interpreted as "all pages up to and including 1", if you want a page numbered \-1 (only the table of contents, say) put \fB\-pp \-1\-\-1\fR, or more readable, \fB\-pp \-1:\-1\fR. .IP \fB\-q*\fR 4 .IX Item "-q*" Run quietly. Don't chatter about pages converted, etc. to standard output; report no warnings (only errors) to standard error. .IP "\fB\-Q\fR \fInum\fR" 4 .IX Item "-Q num" Set the quality to \fInum\fR. That is, choose the number of antialiasing levels for bitmapped fonts (PK), to be \&\fInum\fR*\fInum\fR+1. The default value is 4 which gives 17 levels of antialiasing for antialiased fonts from these two. If FreeType is available, its rendering is unaffected by this option. .IP \fB\-r*\fR 4 .IX Item "-r*" Toggle output of pages in reverse/forward order. By default, the first page in the DVI is output first. .IP \fB\-\-strict*\fR 4 .IX Item "--strict*" The program exits when a warning occurs. Normally, dvipng will output an image in spite of a warning, but there may be something missing in this image. One reason to use this option would be if you have a more complete but slower fallback converter. See the \fB\-\-picky\fR option above for a list of when warnings occur. .IP "\fB\-T\fR \fIimage_size\fR" 4 .IX Item "-T image_size" Set the image size to \fIimage_size\fR which can be either of \&\fBbbox\fR, \fBtight\fR, or a comma-separated pair of dimensions \&\fIhsize\fR,\fIvsize\fR such as \fB.1in,.3cm\fR. The default is \&\fBbbox\fR which produces a PNG that includes all ink put on the page and in addition the DVI origin, located 1in from the top and 1in from the left edge of the paper. This usually gives whitespace above and to the left in the produced image. The value \fBtight\fR will make dvipng only include all ink put on the page, producing neat images. .IP \fB\-\-truecolor*\fR 4 .IX Item "--truecolor*" This will make \fBdvipng\fR generate truecolor output. Note that truecolor output is automatic if you include an external image in your DVI, e.g., via a PostScript special (i.e., the \fBgraphics\fR or \&\fBgraphicx\fR package). This switch is overridden by the \&\fB\-\-palette\fR switch. .IP \fB\-v*\fR 4 .IX Item "-v*" Enable verbose operation. This will currently indicate what fonts is used, in addition to the usual output. .IP \fB\-\-width*\fR 4 .IX Item "--width*" Report the width of the image. See also \fB\-\-height\fR and \&\fB\-\-depth\fR. .IP "\fB\-x\fR \fInum\fR" 4 .IX Item "-x num" This option is deprecated; it should not be used. It is much better to select the output resolution directly with the \fB\-D\fR option. This option sets the magnification ratio to \fInum\fR/1000 and overrides the magnification specified in the DVI file. Must be between 10 and 100000. It is recommended that you use standard magstep values (1095, 1200, 1440, 1728, 2074, 2488, 2986, and so on) to help reduce the total number of PK files generated. \fInum\fR may be a real number, not an integer, for increased precision. .IP "\fB\-z\fR \fInum\fR" 4 .IX Item "-z num" Set the PNG compression level to \fInum\fR. This option is enabled if your \fBlibgd\fR is new enough. The default compression level is 1, which selects maximum speed at the price of slightly larger PNGs. For an older \fBlibgd\fR, the hard-soldered value 5 is used. The include file \&\fBpng.h\fR says "Currently, valid values range from 0 \- 9, corresponding directly to the zlib compression levels 0 \- 9 (0 \- no compression, 9 \- "maximal" compression). Note that tests have shown that zlib compression levels 3\-6 usually perform as well as level 9 for PNG images, and do considerably fewer calculations. In the future, these values may not correspond directly to the zlib compression levels." .SH NOTES .IX Header "NOTES" The full manual is accessible in info format, on most systems by typing .PP .Vb 1 \& info dvipng .Ve .SH COPYRIGHT .IX Header "COPYRIGHT" This program is released under the GNU Lesser General Public License version 3, see the COPYING file in the dvipng distribution or <\fBhttp://www.gnu.org/licenses/gpl.html\fR>. .PP Copyright (c) 2002\-2015, 2019 Jan-AAke Larsson dvipng.c0000664000175000017500000001000114750476235012000 0ustar janla64janla64/* dvipng.c */ /************************************************************************ Part of the dvipng distribution This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . Copyright (C) 2002-2015,2019 Jan-Åke Larsson ************************************************************************/ /* This program translates TeX's DVI-Code into Portable Network Graphics. */ #define MAIN #include "dvipng.h" #ifdef MIKTEX # define main __cdecl Main #endif /* MIKTEX */ /**********************************************************************/ /******************************* main *******************************/ /**********************************************************************/ int main(int argc, char ** argv) { bool parsestdin; #ifdef TIMING # ifdef HAVE_GETTIMEOFDAY gettimeofday(&Tp, NULL); timer = Tp.tv_sec + Tp.tv_usec / 1000000.0; # else # ifdef HAVE_FTIME ftime(&timebuffer); timer = timebuffer.time + timebuffer.millitm / 1000.0; # endif # endif #endif /* setbuf(stderr, NULL); */ #ifdef HAVE_LIBKPATHSEA /* Use extra paths as used by dvips */ kpse_set_program_name(argv[0],"dvips"); /* If dvipng is not installed in the texmf tree, and _only_ * SELFAUTO... is used in texmf.cnf, kpathsea will not find a) * Virtual fonts b) ps2pk.map or psfonts.map c) PostScript fonts * * We adjust these things here */ /* char selfautodir[MAXPATHLEN]; FILE *self; self = popen("kpsewhich -expand-var='$SELFAUTODIR'", "r"); if (!self) ... if (!fgets(selfautodir, MAXPATHLEN, self)) ... fclose(self); */ # ifdef ENV_SELFAUTOLOC putenv(ENV_SELFAUTOLOC); # endif # ifdef ENV_SELFAUTODIR putenv(ENV_SELFAUTODIR); # endif # ifdef ENV_SELFAUTOPARENT putenv(ENV_SELFAUTOPARENT); # endif kpse_set_program_enabled (kpse_pk_format, makeTexPK, kpse_src_compile); #endif #ifdef HAVE_TEXLIVE_GS_INIT texlive_gs_init(); #endif initcolor(); parsestdin = DecodeArgs(argc, argv); #ifdef HAVE_LIBKPATHSEA if (user_mfmode) if (user_bdpi) kpse_init_prog("DVIPNG", user_bdpi, user_mfmode, "cmr10"); else { Warning("--mfmode given without --bdpi"); /* this will give a lot of warnings but... */ kpse_init_prog("DVIPNG", 300, user_mfmode, "cmr10"); } else kpse_init_prog("DVIPNG", 300, "cx", "cmr10"); #endif #ifdef HAVE_FT2 InitPSFontMap(); #endif if (dvi!=NULL) DrawPages(); if (parsestdin) { char line[STRSIZE]; printf("%s> ",dvi!=NULL?dvi->name:""); while(fgets(line,STRSIZE,stdin)) { DecodeString(line); if (dvi!=NULL) { DVIReOpen(dvi); DrawPages(); } printf("%s> ",dvi!=NULL?dvi->name:""); } printf("\n"); } #ifdef TIMING # ifdef HAVE_GETTIMEOFDAY gettimeofday(&Tp, NULL); timer = Tp.tv_sec + Tp.tv_usec/1000000.0 - timer; # else # ifdef HAVE_FTIME ftime(&timebuffer); timer = timebuffer.time + timebuffer.millitm/1000.0 - timer; # endif # endif if (ndone > 0) fprintf(stderr, "Time of complete run: %.2f s, %d page(s), %.4f s/page.\n", timer, ndone, timer / ndone); if (my_toc >= 0.0001) fprintf(stderr, "Thereof in TIC/TOC region %.5f s.\n",my_toc); #endif ClearFonts(); DVIClose(dvi); ClearColorNames(); #ifdef HAVE_FT2 ClearPSFontMap(); ClearEncoding(); ClearSubfont(); if (libfreetype!=NULL && FT_Done_FreeType(libfreetype)) Fatal("an error occurred during freetype destruction"); libfreetype = NULL; #endif exit(exitcode); } dvipng.h0000664000175000017500000004162214747641605012023 0ustar janla64janla64/* dvipng.h */ /************************************************************************ Part of the dvipng distribution This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . Copyright (C) 2002-2015 Jan-Åke Larsson ************************************************************************/ #ifndef DVIPNG_H #define DVIPNG_H #include "config.h" #define STRSIZE 255 /* stringsize for file specifications */ #define FIRSTFNTCHAR 0 #define LASTFNTCHAR 255 #define NFNTCHARS LASTFNTCHAR+1 #define STACK_SIZE 100 /* DVI-stack size */ #define DEFAULT_GAMMA 1.0 /* Name of the program which is called to generate missing pk files */ #define MAKETEXPK "mktexpk" #ifdef HAVE_INTTYPES_H # include #else /* HAVE_INTTYPES_H */ # ifndef __sgi /* IRIX has the following types typedef'd in sys/types.h already, * i.e., _old_ IRIX systems; newer ones have a working inttypes.h */ typedef signed char int8_t; typedef short int16_t; typedef int int32_t; #endif /* ! __sgi */ typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef unsigned int uint32_t; typedef long long int64_t; typedef unsigned long long uint64_t; #endif /* HAVE_INTTYPES_H */ #ifndef INT32_MIN #define INT32_MIN (-2147483647-1) #endif #ifndef INT32_MAX #define INT32_MAX (2147483647) #endif #include #ifdef HAVE_KPATHSEA_KPATHSEA_H # include #else # error: kpathsea/kpathsea.h is missing from your system #endif #ifdef HAVE_FT2 #include #include FT_FREETYPE_H #endif #ifdef HAVE_STDBOOL_H # include #else # ifdef HAVE_KPATHSEA_KPATHSEA_H /* boolean is an enum type from kpathsea/types.h loaded in kpathsea/kpathsea.h, use it as fallback */ # define bool boolean # else typedef int bool; # define true (bool) 1 # define false (bool) 0 # endif #endif #ifndef HAVE_VPRINTF # ifdef HAVE_DOPRNT # define vfprintf(stream, message, args) _doprnt(message, args, stream) # else # error: vfprintf AND _doprnt are missing!!! /* If we have neither, should fall back to fprintf with fixed args. */ # endif #endif /*************************************************************/ /************************* protos.h ************************/ /*************************************************************/ typedef int pixels; typedef int32_t subpixels; typedef int32_t dviunits; #define MM_TO_PXL(x) (int)(((x)*resolution*10)/254) #define PT_TO_PXL(x) (int)((int32_t)((x)*resolution*100l)/7224) #define PT_TO_DVI(x) (int32_t)((x)*65536l) /*#define PIXROUND(x,c) ((((double)x+(double)(c>>1))/(double)c)+0.5)*/ /*#define PIXROUND(x,c) (((x)+c)/(c))*/ /*#define PIXROUND(x,c) ((x+c-1)/(c))*/ /*#define PIXROUND(x,c) ((x)/(c))*/ /* integer round to the nearest number, not towards zero */ #define PIXROUND(num,den) ((num)>0 ? ((num)+(den)/2)/(den) : -(((den)/2-(num))/(den))) /********************************************************/ /*********************** dvi.h ************************/ /********************************************************/ #define DVI_TYPE 0 struct dvi_data { /* dvi entry */ int type; /* This is a DVI */ struct dvi_data *next; uint32_t num, den, mag; /* PRE command parameters */ int32_t conv; /* computed from num and den */ /* divide dvi units (sp) with conv to get mf device resolution */ /* divide further with shrinkfactor to get true resolution */ char * name; /* full name of DVI file */ char * outname; /* output filename (basename) */ FILE * filep; /* file pointer */ time_t mtime; /* modification time */ struct font_num *fontnump; /* DVI font numbering */ struct page_list *pagelistp; /* DVI page list */ #define DVI_PREVIEW_LATEX_TIGHTPAGE 1 #define DVI_PREVIEW_BOP_HOOK (1<<1) uint32_t flags; /* Preview-latex flags */ }; #define PAGE_POST INT32_MAX #define PAGE_LASTPAGE INT32_MAX-1 #define PAGE_MAXPAGE INT32_MAX-2 /* assume no pages out of this range */ #define PAGE_FIRSTPAGE INT32_MIN #define PAGE_MINPAGE INT32_MIN+1 /* assume no pages out of this range */ struct dvi_color { int red,green,blue; }; struct page_list { struct page_list* next; int offset; /* file offset to BOP */ int32_t count[11]; /* 10 dvi counters + absolute pagenum in file */ int csp; /* color stack pointer at BOP */ struct dvi_color cstack[2]; /* color stack at BOP, may be longer */ }; struct dvi_data* DVIOpen(char*,char*); void DVIClose(struct dvi_data*); bool DVIReOpen(struct dvi_data*); struct page_list*FindPage(struct dvi_data*, int32_t, bool); struct page_list*NextPage(struct dvi_data*, struct page_list*); struct page_list*PrevPage(struct dvi_data*, struct page_list*); int SeekPage(struct dvi_data*, struct page_list*); bool DVIFollowToggle(void); unsigned char* DVIGetCommand(struct dvi_data*); bool DVIIsNextPSSpecial(struct dvi_data*); uint32_t CommandLength(unsigned char*); void ClearPSHeaders(void); /********************************************************/ /********************** misc.h ************************/ /********************************************************/ struct filemmap { #ifdef WIN32 HANDLE hFile; HANDLE hMap; #else /* WIN32 */ int fd; #endif /* WIN32 */ char* data; size_t size; }; bool DecodeArgs(int, char *[]); void DecodeString(char *); bool MmapFile (char *filename,struct filemmap *fmmap); void UnMmapFile(struct filemmap* fmmap); void Message(int, const char *fmt, ...); void Warning(const char *fmt, ...); void Fatal(const char *fmt, ...); int32_t SNumRead(unsigned char*, register int); uint32_t UNumRead(unsigned char*, register int); bool MmapFile (char *filename,struct filemmap *fmmap); void UnMmapFile(struct filemmap* fmmap); /********************************************************/ /*********************** font.h ***********************/ /********************************************************/ struct encoding { struct encoding* next; char* name; char* charname[257]; }; struct subfont { struct subfont* next; char* name; char* infix; int encoding; int32_t charindex[256]; }; #ifdef HAVE_FT2 struct psfontmap { struct psfontmap *next; char *line,*psfile,*tfmname,*encname,*end; struct encoding* encoding; FT_Matrix* ft_transformp; FT_Matrix ft_transform; struct subfont* subfont; }; #endif #define FONT_TYPE_PK 1 #define FONT_TYPE_VF 2 #define FONT_TYPE_FT 3 struct char_entry { /* PK/FT Glyph/VF Macro */ dviunits tfmw; /* TFM width */ unsigned char *data; /* glyph data, either pixel data * (0=transp, 255=max ink) or VF macro */ uint32_t length; /* Length of PK data or VF macro */ /* Only used in pixel fonts */ pixels w,h; /* width and height in pixels */ subpixels xOffset, yOffset; /* x offset and y offset in subpixels */ /* Only used in PK fonts */ unsigned char *pkdata; /* Points to beginning of PK data */ unsigned char flag_byte; /* PK flagbyte */ }; struct font_entry { /* font entry */ int type; /* PK/VF/Type1 ... */ struct font_entry *next; uint32_t c, s, d; uint8_t a, l; char n[STRSIZE]; /* FNT_DEF command parameters */ int dpi; /* computed from s and d */ char * name; /* full name of PK/VF file */ struct filemmap fmmap; /* file memory map */ uint32_t magnification; /* magnification read from font file */ uint32_t designsize; /* design size read from font file */ void * chr[NFNTCHARS]; /* character information */ #ifdef HAVE_FT2 FT_Face face; /* Freetype2 face */ struct psfontmap* psfontmap; /* Font transformation */ #endif struct font_num *vffontnump; /* VF local font numbering */ int32_t defaultfont; /* VF default font number */ }; struct font_num { /* Font number. Different for VF/DVI, and several font_num can point to one font_entry */ struct font_num *next; int32_t k; struct font_entry *fontp; }; void CheckChecksum(uint32_t, uint32_t, const char*); void InitPK (struct font_entry *newfontp); void DonePK(struct font_entry *oldfontp); void InitVF (struct font_entry *newfontp); void DoneVF(struct font_entry *oldfontp); void FontDef(unsigned char*, void* /* dvi/vf */); void ClearFonts(void); void SetFntNum(int32_t, void* /* dvi/vf */); void FreeFontNumP(struct font_num *hfontnump); #ifdef HAVE_FT2 char* copyword(char* orig); struct psfontmap *NewPSFont(struct psfontmap* copyfrom); void InitPSFontMap(void); void ClearPSFontMap(void); struct psfontmap* FindPSFontMap(char*); struct encoding* FindEncoding(char*); void ClearEncoding(void); bool ReadTFM(struct font_entry *, char*); bool InitFT(struct font_entry *); void DoneFT(struct font_entry *tfontp); void LoadFT(int32_t, struct char_entry *); struct psfontmap* FindSubFont(struct psfontmap* entry, char* fontname); void ClearSubfont(void); #endif /********************************************************/ /********************* ppagelist.h ********************/ /********************************************************/ bool ParsePages(const char*); void FirstPage(int32_t,bool); void LastPage(int32_t,bool); void ClearPpList(void); void Reverse(bool); struct page_list* NextPPage(void* /* dvi */, struct page_list*); #ifdef MAIN #define EXTERN #define INIT(x) =x #else #define EXTERN extern #define INIT(x) #endif /********************************************************/ /********************** draw.h ************************/ /********************************************************/ #include "commands.h" void CreateImage(pixels width, pixels height); void DestroyImage(void); void DrawCommand(unsigned char*, void* /* dvi/vf */); void DrawPages(void); void WriteImage(char*, int); void LoadPK(int32_t, register struct char_entry *); int32_t SetChar(int32_t); dviunits SetGlyph(struct char_entry *ptr, int32_t hh,int32_t vv); void Gamma(double gamma); int32_t SetVF(struct char_entry *ptr); int32_t SetRule(int32_t, int32_t, int32_t, int32_t); void SetSpecial(char *, char *, int32_t, int32_t); void BeginVFMacro(struct font_entry*); void EndVFMacro(void); /**************************************************/ void handlepapersize(const char*,int32_t*,int32_t*); void stringrgb(const char* colorstring,int *r,int *g,int *b); void background(const char *); void initcolor(void); void popcolor(void); void pushcolor(const char *); void resetcolorstack(const char *); void StoreColorStack(struct page_list *tpagep); void ReadColorStack(struct page_list *tpagep); void StoreBackgroundColor(struct page_list *tpagep); void ClearColorNames(void); void InitXColorPrologue(const char* prologuename); /**********************************************************************/ /************************* Global Variables *************************/ /**********************************************************************/ #ifdef MAKETEXPK #ifdef HAVE_LIBKPATHSEA EXTERN bool makeTexPK INIT(MAKE_TEX_PK_BY_DEFAULT); #else EXTERN bool makeTexPK INIT(_TRUE); #endif #endif EXTERN uint32_t usermag INIT(0); /* user specified magstep */ EXTERN struct font_entry *hfontptr INIT(NULL); /* font list pointer */ EXTERN struct internal_state { struct font_entry* currentfont; } current_state; #define BE_NONQUIET 1 #define BE_VERBOSE (1<<1) #define PARSE_STDIN (1<<2) #define EXPAND_BBOX (1<<3) #define TIGHT_BBOX (1<<4) #define FORCE_TRUECOLOR (1<<5) #define USE_FREETYPE (1<<6) #define REPORT_HEIGHT (1<<7) #define REPORT_DEPTH (1<<8) #define REPORT_WIDTH (1<<9) #define DVI_PAGENUM (1<<10) #define MODE_PICKY (1<<11) #define GIF_OUTPUT (1<<12) #define MODE_STRICT (1<<13) #define NO_GHOSTSCRIPT (1<<14) #define NO_GSSAFER (1<<15) #define BG_TRANSPARENT (1<<16) #define BG_TRANSPARENT_ALPHA (1<<17) #define FORCE_PALETTE (1<<18) #define NO_RAW_PS (1<<19) EXTERN uint32_t option_flags INIT(BE_NONQUIET | USE_FREETYPE); #define PAGE_GAVE_WARN 1 #define PAGE_PREVIEW_BOP (1<<1) #define PAGE_TRUECOLOR (1<<2) EXTERN uint32_t page_flags INIT(0); #ifdef DEBUG EXTERN unsigned int debug INIT(0); #define DEBUG_PRINT(a,b) if (debug & a) { printf b; fflush(stdout); } #define DEBUG_DVI 1 #define DEBUG_VF (1<<1) #define DEBUG_PK (1<<2) #define DEBUG_TFM (1<<3) #define DEBUG_GLYPH (1<<4) #define DEBUG_FT (1<<5) #define DEBUG_ENC (1<<6) #define DEBUG_COLOR (1<<7) #define DEBUG_GS (1<<8) #define LASTDEBUG DEBUG_GS #define DEBUG_DEFAULT DEBUG_DVI #else #define DEBUG_PRINT(a,b) #endif /************************timing stuff*********************/ #ifdef TIMING # ifdef HAVE_SYS_TIME_H # include # endif # include EXTERN double timer INIT(0); EXTERN double my_tic,my_toc INIT(0); EXTERN int ndone INIT(0); /* number of pages converted */ # ifdef HAVE_GETTIMEOFDAY EXTERN struct timeval Tp; # define TIC { gettimeofday(&Tp, NULL); \ my_tic= Tp.tv_sec + Tp.tv_usec/1000000.0;} # define TOC { gettimeofday(&Tp, NULL); \ my_toc += Tp.tv_sec + Tp.tv_usec/1000000.0 - my_tic;} # else # ifdef HAVE_FTIME EXTERN struct timeb timebuffer; # define TIC() { ftime(&timebuffer); \ my_tic= timebuffer.time + timebuffer.millitm/1000.0; # define TOC() { ftime(&timebuffer); \ my_toc += timebuffer.time + timebuffer.millitm/1000.0 - my_tic;} # else # define TIC() # define TOC() # endif # endif #endif /* TIMING */ EXTERN char* user_mfmode INIT(NULL); EXTERN int user_bdpi INIT(0); EXTERN int dpi INIT(100); #ifdef HAVE_GDIMAGEPNGEX EXTERN int compression INIT(1); #endif #undef min #undef max # define max(x,y) if ((y)>(x)) x = y # define min(x,y) if ((y)<(x)) x = y /* These are in pixels*/ EXTERN int x_min INIT(0); EXTERN int y_min INIT(0); EXTERN int x_max INIT(0); EXTERN int y_max INIT(0); /* Page size: default set by -T */ EXTERN int x_width_def INIT(0); EXTERN int y_width_def INIT(0); /* Offset: default set by -O and -T bbox */ EXTERN int x_offset_def INIT(0); EXTERN int y_offset_def INIT(0); /* Preview-latex's tightpage */ EXTERN int x_width_tightpage INIT(0); EXTERN int y_width_tightpage INIT(0); EXTERN int x_offset_tightpage INIT(0); EXTERN int y_offset_tightpage INIT(0); /* Paper size: set by -t, for cropmark purposes only */ /* This has yet to be written */ EXTERN int x_pwidth INIT(0); EXTERN int y_pwidth INIT(0); /* The transparent border preview-latex desires */ EXTERN int borderwidth INIT(0); /* fallback color for transparent background */ EXTERN bool userbordercolor INIT(FALSE); /* if true, use user-supplied color */ EXTERN struct dvi_color bordercolor; EXTERN gdImagePtr page_imagep INIT(NULL); EXTERN int32_t shrinkfactor INIT(4); EXTERN struct dvi_color cstack[STACK_SIZE]; EXTERN int csp INIT(1); EXTERN struct font_entry* currentfont; EXTERN struct dvi_data* dvi INIT(NULL); #ifdef HAVE_FT2 EXTERN FT_Library libfreetype INIT(NULL); #endif #define EXIT_FATAL EXIT_FAILURE+1 EXTERN int exitcode INIT(EXIT_SUCCESS); #endif /* DVIPNG_H */ dvipng.texi0000664000175000017500000011311214737210011012515 0ustar janla64janla64\input texinfo @setfilename dvipng.info @settitle A DVI-to-PNG translator @ifset man @c man begin SYNOPSIS dvipng [options] filename dvipng [options] [filename] - @c man end @end ifset @set version 1.17 @set month-year January 2020 @c Put everything in one index (arbitrarily chosen to be the concept index). @syncodeindex fn cp @syncodeindex ky cp @syncodeindex pg cp @syncodeindex vr cp @include macros.texi @iftex @tolerance 10000 @emergencystretch 3em @end iftex @dircategory TeX @direntry * DVI-to-PNG: (dvipng). Translating TeX DVI files to Portable Network Graphics (PNG). * dvipng: (dvipng). A DVI-to-PNG translator. @end direntry @finalout @titlepage @title dvipng @subtitle A DVI-to-PNG Translator @subtitle Version @value{version} @author by Jan-@AA{}ke Larsson. @page @vskip 0pt plus 1filll Copyright @copyright{} 2002-2020 Jan-@AA{}ke Larsson Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. @ignore Permission is granted to process this file through TeX and print the results, provided the printed document carries copying permission notice identical to this one except for the removal of this paragraph (this paragraph not being relevant to the printed manual). @end ignore Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided also that the section entitled ``Copying'' is included exactly as in the original, and provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved by the Free Software Foundation. @end titlepage @page @c @summarycontents @contents @ifnottex @node Top @top dvipng This manual documents dvipng, a program to translate a DVI (DeVice Independent) file into PNG (Portable Network Graphics). This file documents dvipng version @value{version} Corrections or perhaps rewrites of sections are @emph{very welcome}. Jan-@AA{}ke Larsson @end ifnottex @menu * Introduction:: Introduction * Installation:: How to compile and install dvipng * Basic usage:: First things first * Command-line options:: Advanced usage * Graphics:: Including PostScript and/or bitmaps * Color:: Using color with dvipng * Diagnosing problems:: Problems? * Credits:: People who have contributed * Copying:: GNU Lesser General Public License * Index:: General index @end menu @node Introduction @chapter Introduction @c man begin DESCRIPTION @include readme.texi @c man end @node Installation @chapter Installation @cindex configuration, of dvipng @cindex compilation @cindex installation, of dvipng @include install.texi @node Basic usage @chapter Basic usage of dvipng @cindex invoking dvipng To use dvipng at its simplest, simply type @example dvipng foo @end example @noindent where @file{foo.dvi} is the output of @TeX{} that you want to convert to PNG format. If there are four pages in @file{foo.dvi}, those pages will be output as @file{foo1.png}, @file{foo2.png}, @file{foo3.png}, and @file{foo4.png}, respectively. If you have enabled the PostScript font support (via FreeType), fonts will be rendered as they are needed. Otherwise, dvipng will use bitmapped (PK) fonts, and if you use PK fonts that have not been used on your system before, they may be automatically generated; this process can take a few minutes, so progress reports appear by default. The next time the same font is used, it will have been saved on disk, so rendering will go much faster. (If dvipng tries to endlessly generate the same fonts over and over again, something is wrong. @xref{Unable to generate fonts,,, kpathsea, Kpathsea}.) Many options are available (see the next section). For a brief summary of available options, just type @example dvipng --help @end example @node Command-line options @chapter Command-line options @cindex command-line options @cindex options, dvipng dvipng has a plethora of command line options. Reading through this section will give a good idea of the capabilities of the driver. @menu * Option summary:: Quick listing, from dvipng --help. * Option details:: More information about each option. @end menu @node Option summary @section Option summary @cindex options, summary Here is a handy summary of the options; it is printed out when you run dvipng with no arguments or with the standard @samp{--help} option. @example @include dvipng.help @end example @node Option details @section Option details @cindex option, details of @c man begin OPTIONS Many of the parameterless options listed here can be turned off by suffixing the option with a zero (@samp{0}); for instance, to turn off page reversal, use @samp{-r0}. Such options are marked with a trailing @samp{*}. @table @samp @item - @cindex options, reading from standard input @cindex standard input, reading options from Read additional options from standard input after processing the command line. @item --help Print a usage message and exit. @item --version Print the version number and exit. @item -bd @var{num} @item -bd @var{color_spec} @item -bd '@var{num} @var{color_spec}' @cindex transparent border width @cindex transparent border fallback color Set the pixel width of the transparent border (default 0). Using this option will make the image edges transparent, but it only affects pixels with the background color. Giving a @var{color_spec} will set the fallback color, to be used in viewers that cannot handle transparency (the default is the background color). The color spec should be in @TeX{} color \special syntax, e.g., 'rgb 1.0 0.0 0.0'. Setting the fallback color makes the default border width 1 px. @xref{Color}. @item --bdpi @var{num} @cindex base resolution, setting This option only has an effect when using bitmapped (PK) fonts. The option sets the base (Metafont) resolution, both horizontal and vertical, to @var{num} dpi (dots per inch). This option is necessary when manually selecting Metafont mode with the --mode option (see below). @item -bg @var{color_spec} @cindex background color (option) Choose background color for the images. This option will be ignored if there is a background color \special in the DVI. The color spec should be in @TeX{} color \special syntax, e.g., 'rgb 1.0 0.0 0.0'. You can also specify 'Transparent' or 'transparent' which will give you a transparent background with the normal background as a fallback color. A capitalized 'Transparent' will give a full-alpha transparency, while an all-lowercase 'transparent' will give a simple fully transparent background with non-transparent antialiased pixels. The latter would be suitable for viewers who cannot cope with a true alpha channel. GIF images do not support full alpha transparency, so in case of GIF output, both variants will use the latter behaviour. @xref{Color}. @item -d @var{num} @cindex debugging Set the debug flags, showing what dvipng (thinks it) is doing. This will work unless dvipng has been compiled without the @code{DEBUG} option (not recommended). Set the flags as you need them, use @samp{-d -1} as the first option for maximum output. @xref{Debug options}. @item -D @var{num} @cindex output resolution, setting Set the output resolution, both horizontal and vertical, to @var{num} dpi (dots per inch). One may want to adjust this to fit a certain text font size (e.g., on a web page), and for a text font height of @var{font_px} pixels (in Mozilla) the correct formula is @example @var{dpi} = @var{font_px} * 72.27 / 10 [px * @TeX{}pt/in / @TeX{}pt] @end example The last division by ten is due to the standard font height 10pt in your document, if you use 12pt, divide by 12. Unfortunately, some proprietary browsers have font height in pt (points), not pixels. You have to rescale that to pixels, using the screen resolution (default is usually 96 dpi) which means the formula is @example @var{font_px} = @var{font_pt} * 96 / 72 [pt * px/in / (pt/in)] @end example On some high-res screens, the value is instead 120 dpi. Good luck! @item --depth* @cindex baseline reporting @cindex depth reporting Report the depth of the image. This only works reliably when the @LaTeX{} style @file{preview.sty} from @previewlatex{} is used with the @samp{active} option. It reports the number of pixels from the bottom of the image to the baseline of the image. This can be used for vertical positioning of the image in, e.g., web documents, where one would use (Cascading StyleSheets 1) @example @end example The depth is a negative offset in this case, so the minus sign is necessary, and the unit is pixels (px). @item --dvinum* Set this option to make the output page number be the @TeX{} page numbers rather than the physical page number. See the @samp{-o} switch. @ignore @item -e @var{num} @cindex maxdrift @cindex accuracy in positioning @cindex positioning accuracy Maximum drift in pixels of each character from its `true' resolution-independent position on the page. The default value of this parameter is resolution dependent (it is the number of entries in the list [100, 200, 300, 400, 500, 600, 800, 1000, 1200, 1600, 2000, 2400, 2800, 3200, @dots{}] that are less than or equal to the resolution in dots per inch). Allowing individual characters to `drift' from their correctly rounded positions by a few pixels, while regaining the true position at the beginning of each new word, improves the spacing of letters in words. @item -f* @cindex filter, running as a @cindex standard I/O @cindex pipes, not readable @vindex PRINTER@r{, avoided with @samp{-f}} Run as a filter. Read the DVI file from standard input and write the PostScript to standard output. The standard input must be seekable, so it cannot be a pipe. If your input must be a pipe, write a shell script that copies the pipe output to a temporary file and then points dvipng at this file. This option also disables the automatic reading of the @code{PRINTER} environment variable; use @samp{-P$PRINTER} after the @samp{-f} to read it anyway. It also turns off the automatic sending of control-D if it was turned on with the @samp{-F} option or in the configuration file; use @samp{-F} after the @samp{-f} to send it anyway. @item -k* @cindex cropmarks Print crop marks. This option increases the paper size (which should be specified, either with a paper size special or with the @samp{-T} option) by a half inch in each dimension. It translates each page by a quarter inch and draws cross-style crop marks. It is mostly useful with typesetters that can set the page size automatically. This works by downloading @file{crop.pro}. @end ignore @item -fg @var{color_spec} @cindex foreground color (option) Choose foreground color for the images. This option will be ignored if there is a foreground color \special in the DVI. The color spec should be in @TeX{} color \special syntax, e.g., 'rgb 1.0 0.0 0.0'. @xref{Color}. @item --follow* @cindex follow mode Wait for data at end-of-file. One of the benefits of dvipng is that it does not read the postamble, so it can be started before @TeX{} finishes. This switch makes dvipng wait at end-of-file for further output, unless it finds the POST marker that indicates the end of the DVI. This is similar to @samp{tail -f} but for DVI-to-PNG conversion. @item --freetype* @cindex FreeType font rendering Enable/disable FreeType font rendering (default on). This option is available if the FreeType2 font library was present at compilation time. If this is the case, dvipng will have direct support for PostScript Type1 and TrueType fonts internally, rather than using @samp{gsftopk} for rendering the fonts. If you have PostScript versions of Computer Modern installed, there will be no need to generate bitmapped (PK) variants on disk of these. Then, you can render images at different (and unusual) resolutions without cluttering the disk with lots of bitmapped fonts. One reason to disable FreeType font rendering would be to generate identical output on different platforms, since FreeType uses the native renderer and therefore can give slightly different output on each platform. @item --gamma @var{num} @cindex gamma @cindex dark fonts @cindex light fonts @cindex fuzzy images Control the interpolation of colors in the greyscale anti-aliasing color palette. Default value is 1.0. For 0 < @var{num} < 1, the fonts will be lighter (more like the background), and for @var{num} > 1, the fonts will be darker (more like the foreground). @item --gif* @cindex GIF image format The images are output in the GIF format, if GIF support is enabled. This is the default for the @samp{dvigif} binary, which only will be available when GIF support is enabled. GIF images are palette images (see the @samp{--palette} option) and does not support true alpha channels (see the @samp{--bg} option). See also the @samp{--png} option. @item --height* @cindex baseline reporting @cindex height reporting Report the height of the image. This only works reliably when the @LaTeX{} style @file{preview.sty} from @previewlatex{} is used with the @samp{active} option. It reports the number of pixels from the top of the image to the baseline of the image. The total height of the image is obtained as the sum of the values reported from @samp{--height} and @samp{--depth}. @item -l [=]@var{num} @cindex last page printed @cindex page, last printed @cindex physical page number, and @samp{-l} @cindex absolute page number, and @samp{-l} The last page printed will be the first one numbered @var{num}. Default is the last page in the document. If @var{num} is prefixed by an equals sign, then it (and the argument to the @samp{-p} option, if specified) is treated as a physical (absolute) page number, rather than a value to compare with the @TeX{} @samp{\count0} values stored in the DVI file. Thus, using @samp{-l =9} will end with the ninth page of the document, no matter what the pages are actually numbered. @item --mode @var{mode} @cindex mode name, specifying @cindex Metafont mode, specifying This option only has an effect when using bitmapped (PK) fonts. Use @var{mode} as the Metafont device name for the PK fonts (both for path searching and font generation). This needs to be augmented with the base device resolution, given with the @samp{--bdpi} option. See the file @url{ftp://ftp.tug.org/tex/modes.mf} for a list of resolutions and mode names for most devices. @xref{Unable to generate fonts,,, kpathsea, Kpathsea}. @item -M* @cindex font generation, avoiding @pindex mktexpk@r{, avoiding} @c this description repeated in kpathsea.texi This option only has an effect when using bitmapped (PK) fonts. It turns off automatic PK font generation (@file{mktexpk}). @ignore @flindex missfont.log If @code{mktexpk}, the invocation is appended to a file @file{missfont.log} (by default) in the current directory. You can then execute the log file to create the missing files after fixing the problem. @vindex TEXMFOUTPUT @vindex MISSFONT_LOG If the current directory is not writable and the environment variable or configuration file value @samp{TEXMFOUTPUT} is set, its value is used. Otherwise, nothing is written. The name @samp{missfont.log} is overridden by the @samp{MISSFONT_LOG} environment variable or configuration file value. @end ignore @item --nogs* @cindex GhostScript, turning off This switch prohibits the internal call to GhostScript for displaying PostScript specials. @samp{--nogs0} turns the call back on. @item --nogssafer* @cindex GhostScript and -dSAFER @cindex -dSAFER Normally, if GhostScript is used to render PostScript specials, the GhostScript interpreter is run with the option @samp{-dSAFER}. The @samp{--nogssafer} option runs GhostScript without @samp{-dSAFER}. The @samp{-dSAFER} option in Ghostscript disables PostScript operators such as deletefile, to prevent possibly malicious PostScript programs from having any effect. @item --norawps* @cindex PostScript, turning off raw PostScript specials Some packages generate raw PostScript specials, even non-rendering such specials. This switch turns off the internal call to GhostScript intended to display these raw PostScript specials. @samp{--norawps0} turns the call back on. @item -o @var{name} @cindex output, redirecting @cindex standard output, output to Send output to the file @var{name}. A single occurrence of @samp{%d} or @samp{%01d}, @dots{}, @samp{%09d} will be exchanged for the physical page number (this can be changed, see the @samp{--dvinum} switch). The default output filename is @samp{@var{file}%d.png} where the input DVI file was @samp{@var{file}.dvi}. @item -O @var{x-offset},@var{y-offset} @cindex offset pages Move the origin by @var{x-offset},@var{y-offset}, a comma-separated pair of dimensions such as @samp{.1in,-.3cm}. @c (@pxref{papersize special}). The origin of the page is shifted from the default position (of one inch down, one inch to the right from the upper left corner of the paper) by this amount. @item -p [=]@var{num} @cindex first page printed @cindex page, first printed @cindex physical page number, and @samp{-p} @cindex absolute page number, and @samp{-p} The first page printed will be the first one numbered @var{num}. Default is the first page in the document. If @var{num} is prefixed by an equals sign, then it (and the argument to the @samp{-l} option, if specified) is treated as a physical (absolute) page number, rather than a value to compare with the @TeX{} @samp{\count0} values stored in the DVI file. Thus, using @samp{-p =3} will start with the third page of the document, no matter what the pages are actually numbered. @item --palette* @cindex forcing palette output When an external image is included, @samp{dvipng} will automatically switch to truecolor mode, to avoid unnecessary delay and quality reduction, and enable the EPS translator to draw on a transparent background and outside of the boundingbox. This switch will force palette (256-color) output and make @samp{dvipng} revert to opaque clipped image inclusion. This will also override the @samp{--truecolor} switch if present. @item --picky* @cindex no erroneous images No images are output when a warning occurs. Normally, dvipng will output an image in spite of a warning, but there may be something missing in this image. One reason to use this option would be if you have a more complete but slower fallback converter. Mainly, this is useful for failed figure inclusion and unknown \special occurrences, but warnings will also occur for missing or unknown color specs and missing PK fonts. @item --png* @cindex PNG image format The images are output in the PNG format. This is the default for the @samp{dvipng} binary. See also the @samp{--gif} option. @item -pp @var{firstpage}-@var{lastpage} @cindex page range Print pages @var{firstpage} through @var{lastpage}; but not quite equivalent to @samp{-p @var{firstpage} -l @var{lastpage}}. For example, when rendering a book, there may be several instances of a page in the DVI file (one in @code{\frontmatter}, one in @code{\mainmatter}, and one in @code{\backmatter}). In case of several pages matching, @samp{-pp @var{firstpage}-@var{lastpage}} will render @emph{all} pages that matches the specified range, while @samp{-p @var{firstpage} -l @var{lastpage}} will render the pages from the @emph{first} occurrence of @var{firstpage} to the @emph{first} occurrence of @var{lastpage}. This is the (undocumented) behaviour of dvips. In dvipng you can give both kinds of options, in which case you get all pages that matches the range in @samp{-pp} between the pages from @samp{-p} to @samp{-l}. Also multiple @samp{-pp} options accumulate, unlike @samp{-p} and @samp{-l}. The @samp{-} separator can also be @samp{:}. Note that @samp{-pp -1} will be interpreted as "all pages up to and including 1", if you want a page numbered -1 (only the table of contents, say) put @samp{-pp -1--1}, or more readable, @samp{-pp -1:-1}. @item -q* @cindex quiet operation @cindex silent operation @cindex warnings, suppressing Run quietly. Don't chatter about pages converted, etc.@: to standard output; report no warnings (only errors) to standard error. @item -Q @var{num} @cindex antialiasing levels@r{, number of} @cindex quality Set the quality to @var{num}. That is, choose the number of antialiasing levels for bitmapped fonts (PK), to be @var{num}*@var{num}+1. The default value is 4 which gives 17 levels of antialiasing for antialiased fonts from these two. If FreeType is available, its rendering is unaffected by this option. @item -r* @cindex reverse pagination Toggle output of pages in reverse/forward order. By default, the first page in the DVI is output first. @ignore @item -R @cindex security @cindex shell command execution, disabling @cindex absolute filenames, disabling @cindex pipes, disabling output to Run securely. This disables shell command execution in @code{\special} (via @samp{`}, @pxref{Dynamic creation of graphics}) and config files (via the @samp{E} option, @pxref{Configuration file commands}), pipes as output files, and opening of any absolute filenames. @item -t @var{papertype} @cindex paper type @cindex media @cindex letter papertype @cindex legal papertype @cindex ledger papertype @cindex a4 papertype @cindex a3 papertype @cindex landscape papertype Set the paper type to @var{papertype}. @c usually defined in one of the @c configuration files, along with the appropriate PostScript code to @c select it (@pxref{Config file paper sizes}). You can also specify a @var{papertype} of @samp{landscape}, which rotates a document by 90 degrees. To rotate a document whose paper type is not the default, you can use the @samp{-t} option twice, once for the paper type, and once for @samp{landscape}. @end ignore @item --strict* @cindex exit on erroneous images The program exits when a warning occurs. Normally, dvipng will output an image in spite of a warning, but there may be something missing in this image. One reason to use this option would be if you have a more complete but slower fallback converter. See the @samp{--picky} option above for a list of when warnings occur. @item -T @var{image_size} Set the image size to @var{image_size} which can be either of @samp{bbox}, @samp{tight}, or a comma-separated pair of dimensions @var{hsize},@var{vsize} such as @samp{.1in,.3cm}. The default is @samp{bbox} which produces a PNG that includes all ink put on the page and in addition the DVI origin, located 1in from the top and 1in from the left edge of the paper. This usually gives whitespace above and to the left in the produced image. The value @samp{tight} will make dvipng only include all ink put on the page, producing neat images. @c (@pxref{papersize special}). @c This option overrides any papersize special in the DVI file. @item --truecolor* @cindex truecolor output This will make @samp{dvipng} generate truecolor output. Note that truecolor output is automatic if you include an external image in your DVI, e.g., via a PostScript special (i.e., the @samp{graphics} or @samp{graphicx} package). This switch is overridden by the @samp{--palette} switch. @item -v* Enable verbose operation. This will currently indicate what fonts is used, in addition to the usual output. @item --width* @cindex width reporting Report the width of the image. See also @samp{--height} and @samp{--depth}. @item -x @var{num} @cindex magnification, overriding DVI This option is deprecated; it should not be used. It is much better to select the output resolution directly with the @samp{-D} option. This option sets the magnification ratio to @math{@var{num}/1000} and overrides the magnification specified in the DVI file. Must be between 10 and 100000. It is recommended that you use standard magstep values (1095, 1200, 1440, 1728, 2074, 2488, 2986, and so on) to help reduce the total number of PK files generated. @var{num} may be a real number, not an integer, for increased precision. @item -z @var{num} @cindex compression Set the PNG compression level to @var{num}. This option is enabled if your @samp{libgd} is new enough. The default compression level is 1, which selects maximum speed at the price of slightly larger PNGs. For an older @samp{libgd}, the hard-soldered value 5 is used. The include file @samp{png.h} says @ifclear man @quotation Currently, valid values range from 0 - 9, corresponding directly to the zlib compression levels 0 - 9 (0 - no compression, 9 - "maximal" compression). Note that tests have shown that zlib compression levels 3-6 usually perform as well as level 9 for PNG images, and do considerably fewer calculations. In the future, these values may not correspond directly to the zlib compression levels. @end quotation @end ifclear @ifset man ``Currently, valid values range from 0 - 9, corresponding directly to the zlib compression levels 0 - 9 (0 - no compression, 9 - "maximal" compression). Note that tests have shown that zlib compression levels 3-6 usually perform as well as level 9 for PNG images, and do considerably fewer calculations. In the future, these values may not correspond directly to the zlib compression levels.'' @end ifset @end table @c man end @node Graphics @chapter Graphics @samp{dvipng} attempts to handle graphics as included by the @samp{graphicx} and @samp{graphics} packages, without the need of specifying a driver to these packages. This means that it recognizes the encapsulated postscript inclusion meant for @samp{dvips}, but is also able (from version 1.8) to include bitmapped graphics. It also tries to handle some of the raw PostScript that is output from various packages. Some of the possibilities and problems are mentioned below. @menu * Encapsulated PostScript:: An internal call to GhostScript * Bitmapped graphics:: PNG, JPEG and GIF * Raw PostScript:: Ignore or give to GhostScript @end menu @node Encapsulated PostScript @section Encapsulated PostScript When an EPS file is included, a call to GhostScript is performed to produce a bitmapped image that can be included. The default is to produce an image with transparent background, at the same size as the DVI page currently being converted to PNG, and include that as foreground on the PNG. Of course, if the image is to be cropped, that is done. The included image will be a truecolor image, so for maximum performance the output PNG will be in truecolor mode as well. This conversion needs the @samp{pngalpha} output device to be present in your copy of GhostScript. If that device is not present, or you use the @samp{--palette} switch or request GIF output, the fallback is to use the @samp{png16m} device to produce a cropped opaque image for inclusion. Other relevant switches are @samp{--noghostscript} and @samp{--nogssafer}. @xref{Option details}. @cindex PostScript inclusion problems The most common problem with including graphics is an incorrect bounding box. Complain to whoever wrote the software that generated the file if the bounding box is indeed incorrect. An adjusted boundingbox can be specified in the @samp{\includegraphics} call, as in this example (using @samp{graphicx}): @example \includegraphics[bb=10 20 100 200]@{imagename.eps@} @end example @node Bitmapped graphics @section Bitmapped graphics dvipng can include PNG, JPEG and GIF graphics. When including such images via @samp{\includegraphics} you need to specify the bounding box since @TeX{} itself cannot read them from the files in question. The bounding box size should be given as @samp{0 0 w h} in pixels, e.g., if the file @samp{imagename.png} is 300x400 pixels, the inclusion would read @example \includegraphics[bb=0 0 300 400]@{imagename.png@} @end example The default size is the image size in bp (``big points'' in TeX nomenclature or PostScript points as other people have it, 72 per inch). That is, default resolution will be 72 dpi for included bitmaps, which is the default size in the few other bitmap-capable drivers that are known to me (dvipdfm and PDFLaTeX). If you want 100 dpi you need to specify the width accordingly. You just divide your image width by 100: a 135 pixel wide image at 100 dpi will take up 1.35 inches. If you want 200 dpi you divide by 200, and so on. Simple, eh? The example above at 200 dpi would be 1.5 inches wide: @example \includegraphics[bb=0 0 300 400,witdh=1.5in]@{imagename.png@} @end example @node Raw PostScript @section Raw PostScript dvipng attempts to handle raw PostScript. Rendering raw PostScript specials is done on top of the page by including a transparent image generated by the @samp{pngalpha} device in GhostScript (automatically selecting @samp{truecolor} mode in dvipng). Included PostScript headers are respected, and if the header @samp{tex.pro} is included, dvipng also throws in @samp{color.pro} and @samp{special.pro}. The package @samp{xcolor} includes its own headers with color names, and this is not only kept as a PostScript header, but is also read and interpreted by dvipng itself. An attempt is also made to respect the PGF header. The non-rendering specials from @samp{hyperref} are handled via some heuristics and do not give an error. Really rendering and moving things with raw PostScript specials is more troublesome. The \rotatebox macro serves as a good example. The dvips driver of the graphicx package surrounds DVI glyphs with PostScript code so that after conversion by dvips, the glyphs (now themselves in PostScript) will be rotated in the desired way. dvipng does not handle this, at present. An attempt has been made to handle the rendering specials output by PGF (tikz), and also PSTricks. Some things work, but others do not. This is especially clear when mixing PostScript and DVI rendering commands such as glyphs. dvipng cannot at present detect if PostScript code moves @samp{currentpoint} or rotates the frame since GhostScript does not return such information. A recommendation would be to produce images from these packages as EPS files and include them into your document in the standard manner. Another way to handle this would be to use a slower fallback (with dvips and gs, for example). If you want to disable raw PostScript handling in dvipng, use the switch @samp{--norawps}. This switch turns off the internal call to GhostScript intended to display these raw PostScript specials. Further, when dvipng encounters raw PostScript and the gs call is turned off, it gives a warning. It is now possible to use the switch @samp{--picky} to disable page rendering of pages with warnings, and use the slower fallback for these pages. @node Color @chapter Color To support color, dvipng recognizes a certain set of specials as generated by the @samp{color} and @samp{xcolor} style files. These specials start with the keyword @samp{color} or the keyword @samp{background}, followed by a color specification. @menu * Color specifications:: * Color specials:: @end menu @node Color specifications @section Color specifications @cindex color specifications The color specification supported by dvipng is by-value or by-name. The by-value spec starts with the name of a color model (one of @samp{rgb}, @samp{hsb}, @samp{cmy}, @samp{cmyk}, or @samp{gray}) followed by the appropriate number of parameters. Thus, the color specification @samp{rgb 0.3 0.4 0.5} would correspond to the color that is @samp{0.3 0.4 0.5} in its red, blue and green values. The color model used internally in dvipng is @samp{RGB} (discretized to 256 levels), for details on the formulas used in conversion, see the @samp{xcolor} documentation. By-name color specifications are single (case-dependent) words and are compared with color names defined in @samp{dvipsnam.def} (from the @samp{graphics} bundle), @samp{svgnam.def} and @samp{xcolor.sty} (from the @samp{xcolor} bundle). See the @samp{xcolor} documentation for a list of names and the corresponding colors. On the command-line, the name @samp{Transparent} can also be used as an argument to @samp{--bg} to choose transparent background. @xref{Option details}. @node Color specials @section Color specials We will describe @samp{background} first, since it is the simplest. The @samp{background} keyword must be followed by a color specification. That color specification is used as a fill color for the background. The last @samp{background} special on a page is the one that gets used, and is used for the whole of the page image. (This is possible because the prescan phase of dvipng notices all of the color specials so that the appropriate information can be written out during the second phase.) The @samp{color} special itself has three forms. The first is just @samp{color} followed by a color specification. In this case, the current global color is set to that color; the color stack must be empty when such a command is executed. The second form is @samp{color push} followed by a color specification. This saves the current color on the color stack and sets the color to be that given by the color specification. This is the most common way to set a color. The final form of the @samp{color} special is just @samp{color pop}, with no color specification; this says to pop the color last pushed on the color stack from the color stack and set the current color to be that color. dvipng correctly handles these color specials across pages, even when the pages are rendered repeatedly or in reverse order. @node Diagnosing problems @chapter Diagnosing problems @cindex problems @cindex trouble @cindex debugging You've gone through all the trouble of installing dvipng, carefully read all the instructions in this manual, and still can't get something to work. The following sections provide some helpful hints if you find yourself in such a situation. @menu * Contact information:: Who to ask. * Debug options:: Getting diagnostics. @end menu @node Contact information @section Contact information Bug reports should be sent to @email{dvipng@@nongnu.org}. Questions, suggestions for new features, pleas for help, and/or praise should go to @email{dvipng@@nongnu.org}. For more information on this mailing list, send a message with just the word `help' as subject or body to @email{dvipng-request@@nongnu.org} or look at @url{http://lists.nongnu.org/mailman/listinfo/dvipng}. Offers to support further development will be appreciated. For developer access, ask on @email{dvipng@@nongnu.org}. For details on the @TeX{} path-searching library, and @code{mktexpk} problems, @pxref{Common problems,,, kpathsea, Kpathsea}. @node Debug options @section Debug options The @samp{-d} flag to dvipng helps in tracking down certain errors. The parameter to this flag is an integer that tells what errors are currently being tracked. To track a certain class of debug messages, simply provide the appropriate number given below; if you wish to track multiple classes, sum the numbers of the classes you wish to track. To track all classes, you can use @code{-1}. Some of these debugging options are actually provided by Kpathsea (@pxref{Debugging, , , kpathsea, Kpathsea}). The classes are: @table @asis @item 1 Normal dvi op-codes @item 2 Virtual fonts @item 4 PK fonts @item 8 TFM files @item 16 Glyph rendering @item 32 FreeType calls @item 64 Encoding loads @item 128 Color specials @item 256 GhostScript specials @item 512 Kpathsea @code{stat} calls @item 1024 Kpathsea hash table lookups @item 2048 Kpathsea path element expansion @item 4096 Kpathsea path searches @ignore @item 8192 @item 16384 @end ignore @end table @node Credits @chapter Credits A number of persons have contributed, if I forget to mention someone, I apologize. First and foremost we have David Kastrup whose @previewlatex{} project provided the incentive to write this program. There is also a number of people who have contributed by reporting bugs and suggesting improvements as the thing has evolved. These include but is perhaps not limited to (in semi-random order): Thomas Esser (te@TeX{}), Christian Schenk (MIK@TeX{}), Brian R Furry (debian package), Angus Leeming (LyX), Thomas Boutell (libgd), John Jones (first user report), Uwe Kern (xcolor), Karl Berry and Peter Breitenlohner (@TeX{} Live), David Harvey (hinting in Freetype), Neal Harmon, Alan Shutko, Reiner Stieb, Nick Alcock, Adam Buchbinder, Svend Tollak Munkejord, James Longstreet, Bernhard Simon, Bob McElrath, Georg Schwarz, Jason Farmer, Brian V. Smith, Samuel Hathaway, Thomas R. Shemanske, Stephen Gibson, Christian Ridderstr@"om, Ezra Peisach, William H Wheeler, Thomas Klausner, Harald Koenig, Adrian Bunk, Kevin Smith, Jason Riedy, Wolfram Krause, Reinhard Kotucha, Takeshi Abe, Waldeck Schutzer, Ahzo, and Andy Nguyen. @ifset man @c man begin NOTES The full manual is accessible in info format, on most systems by typing @example info dvipng @end example @c man end @c man begin COPYRIGHT This program is released under the GNU Lesser General Public License version 3, see the COPYING file in the dvipng distribution or @url{http://www.gnu.org/licenses/gpl.html}. Copyright @copyright{} 2002-2015, 2019 Jan-@AA{}ke Larsson @c man end @end ifset @node Copying @chapter Copying This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . @sp 2 @noindent Copyright @copyright{} 2002-2015, 2019 Jan-@AA{}ke Larsson @node Index @unnumbered Index @printindex cp @bye enc.c0000664000175000017500000000653314737210011011254 0ustar janla64janla64/* enc.c */ /************************************************************************ Part of the dvipng distribution This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . Copyright (C) 2002-2008 Jan-Åke Larsson ************************************************************************/ #include "dvipng.h" struct encoding* encodingp=NULL; static struct encoding* InitEncoding(char* encoding) { char *pos,*max,*buf,*enc_file; int i; struct encoding* encp=NULL; struct filemmap fmmap; boolean mmapfailed; #ifdef HAVE_KPSE_ENC_FORMATS enc_file=kpse_find_file(encoding,kpse_enc_format,false); #else enc_file=kpse_find_file(encoding,kpse_tex_ps_header_format,false); #endif if (enc_file == NULL) { Warning("encoding file %s could not be found",encoding); return(NULL); } DEBUG_PRINT((DEBUG_FT|DEBUG_ENC),("\n OPEN ENCODING:\t'%s'", enc_file)); mmapfailed = MmapFile(enc_file,&fmmap); free(enc_file); if (mmapfailed) return(NULL); if ((encp = calloc(sizeof(struct encoding)+strlen(encoding)+1 +fmmap.size,1))==NULL) { Warning("cannot alloc space for encoding",encoding); UnMmapFile(&fmmap); return(NULL); } encp->name=(char*)encp+sizeof(struct encoding); strcpy(encp->name,encoding); pos=fmmap.data; max=fmmap.data+fmmap.size; buf=encp->name+strlen(encoding)+1; #define SKIPCOMMENT(x) if (*x=='%') while (xcharname[256]=buf; while(poscharname[256])); while (pos < max && *pos!='[') { SKIPCOMMENT(pos); pos++; } while(poscharname[i++]=buf; while(poscharname[i-1])); while(posname)!=0) temp=temp->next; if (temp==NULL) { temp=InitEncoding(encoding); if (temp!=NULL) { temp->next=encodingp; encodingp=temp; } } return(temp); } void ClearEncoding(void) { struct encoding *temp=encodingp; while(temp!=NULL) { encodingp=encodingp->next; free(temp); temp=encodingp; } } font.c0000664000175000017500000002455014737210011011454 0ustar janla64janla64/* font.c */ /************************************************************************ Part of the dvipng distribution This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . Copyright (C) 2002-2015 Jan-Åke Larsson ************************************************************************/ #include "dvipng.h" void CheckChecksum(uint32_t c1, uint32_t c2, const char* name) { /* Report a warning if both checksums are nonzero, they don't match, and the user hasn't turned it off. */ if (c1 && c2 && c1 != c2 #ifdef HAVE_LIBKPATHSEA && !kpse_tex_hush ("checksum") #endif ) { Warning ("checksum mismatch in %s", name) ; } } static double ActualFactor(uint32_t unmodsize) /* compute the actual size factor given the approximation */ /* actually factor * 1000 */ { double realsize; /* the actual magnification factor */ realsize = (double)unmodsize / 1000.0; if (abs((int)(unmodsize - 1095l))<2) realsize = 1.095445115; /*stephalf*/ else if (abs((int)(unmodsize - 1315l))<2) realsize = 1.31453414; /*stepihalf*/ else if (abs((int)(unmodsize - 1577l))<2) realsize = 1.57744097; /*stepiihalf*/ else if (abs((int)(unmodsize - 1893l))<2) realsize = 1.89292916; /*stepiiihalf*/ else if (abs((int)(unmodsize - 2074l))<2) realsize = 2.0736; /*stepiv*/ else if (abs((int)(unmodsize - 2488l))<2) realsize = 2.48832; /*stepv*/ else if (abs((int)(unmodsize - 2986l))<2) realsize = 2.985984; /*stepvi*/ /* the remaining magnification steps are represented with sufficient accuracy already */ return(realsize); } void FontDef(unsigned char* command, void* parent) { int32_t k; uint32_t c, s, d; uint8_t a, l; unsigned char* current; struct font_entry *tfontptr; /* temporary font_entry pointer */ struct font_num *tfontnump = NULL; /* temporary font_num pointer */ unsigned short i; current = command + 1; k = UNumRead(current, (int)*command - FNT_DEF1 + 1); current += (int)*command - FNT_DEF1 + 1; c = UNumRead(current, 4); /* checksum */ s = UNumRead(current+4, 4); /* space size */ d = UNumRead(current+8, 4); /* design size */ a = UNumRead(current+12, 1); /* length for font name */ l = UNumRead(current+13, 1); /* device length */ if (((struct font_entry*)parent)->type==FONT_TYPE_VF) { DEBUG_PRINT(DEBUG_VF,(" %d %d %d",k,c,s)); /* Rescale. s is relative to the actual scale /(1<<20) */ s = (uint32_t)((uint64_t) s * (((struct font_entry*) parent)->s) / (1<<20)); DEBUG_PRINT(DEBUG_VF,(" (%d) %d",s,d)); /* Oddly, d differs in the DVI and the VF that my system produces */ d = (uint32_t)((uint64_t) d * ((struct font_entry*)parent)->d / ((struct font_entry*)parent)->designsize); DEBUG_PRINT(DEBUG_VF,(" (%d)",d)); DEBUG_PRINT(DEBUG_VF,(" %d %d '%.*s'",a,l,a+l,current+14)); #ifdef DEBUG } else { DEBUG_PRINT(DEBUG_DVI,(" %d %d %d %d %d %d '%.*s'",k,c,s,d,a,l, a+l,current+14)); #endif } if (a+l > STRSIZE-1) Fatal("too long font name for font %ld",k); /* Find entry with this font number in use */ switch (((struct font_entry*)parent)->type) { case FONT_TYPE_VF: tfontnump = ((struct font_entry*)parent)->vffontnump; break; case DVI_TYPE: tfontnump = ((struct dvi_data*)parent)->fontnump; } while (tfontnump != NULL && tfontnump->k != k) { tfontnump = tfontnump->next; } /* If found, return if it is correct */ if (tfontnump!=NULL && tfontnump->fontp->s == s && tfontnump->fontp->d == d && strlen(tfontnump->fontp->n) == a+l && strncmp(tfontnump->fontp->n,(char*)current+14,a+l) == 0) { DEBUG_PRINT((DEBUG_DVI|DEBUG_VF),("\n FONT %d:\tMatch found",k)); return; } /* If not found, create new */ if (tfontnump==NULL) { if ((tfontnump=malloc(sizeof(struct font_num)))==NULL) Fatal("cannot malloc memory for new font number"); tfontnump->k=k; switch (((struct font_entry*)parent)->type) { case FONT_TYPE_VF: tfontnump->next=((struct font_entry*)parent)->vffontnump; ((struct font_entry*)parent)->vffontnump=tfontnump; break; case DVI_TYPE: tfontnump->next=((struct dvi_data*)parent)->fontnump; ((struct dvi_data*)parent)->fontnump=tfontnump; } } /* Search font list for possible match */ tfontptr = hfontptr; while (tfontptr != NULL && (tfontptr->s != s || tfontptr->d != d || strlen(tfontptr->n) != a+l || strncmp(tfontptr->n,(char*)current+14,a+l) != 0 ) ) { tfontptr = tfontptr->next; } /* If found, set its number and return */ if (tfontptr!=NULL) { DEBUG_PRINT((DEBUG_DVI|DEBUG_VF),("\n FONT %d:\tMatch found, number set",k)); tfontnump->fontp = tfontptr; return; } DEBUG_PRINT((DEBUG_DVI|DEBUG_VF),("\n FONT %d:\tNew entry created",k)); /* No fitting font found, create new entry. */ if ((tfontptr = calloc(1,sizeof(struct font_entry))) == NULL) Fatal("cannot malloc space for font_entry"); tfontptr->next = hfontptr; hfontptr = tfontptr; tfontnump->fontp = tfontptr; #ifndef WIN32 tfontptr->fmmap.fd = 0; #else /* WIN32 */ tfontptr->fmmap.hFile = INVALID_HANDLE_VALUE; #endif tfontptr->c = c; /* checksum */ tfontptr->s = s; /* space size */ tfontptr->d = d; /* design size */ tfontptr->a = a; /* length for font name */ tfontptr->l = l; /* device length */ strncpy(tfontptr->n,(char*)current+14,a+l); /* full font name */ tfontptr->n[a+l] = '\0'; tfontptr->name = NULL; for (i = FIRSTFNTCHAR; i <= LASTFNTCHAR; i++) { tfontptr->chr[i] = NULL; } tfontptr->dpi = (uint32_t)((ActualFactor((uint32_t)(1000.0*tfontptr->s /(double)tfontptr->d+0.5)) * ActualFactor(dvi->mag) * dpi*shrinkfactor) + 0.5); #ifdef HAVE_FT2 tfontptr->psfontmap=NULL; #endif } #ifdef HAVE_FT2 static char* kpse_find_t1_or_tt(char* filename) { char* filepath = kpse_find_file(filename, kpse_type1_format, false); if ((option_flags & USE_FREETYPE) && filepath==NULL) filepath = kpse_find_file(filename, kpse_truetype_format, false); return(filepath); } #endif static void FontFind(struct font_entry * tfontptr) { kpse_glyph_file_type font_ret; /* tfontptr->dpi = kpse_magstep_fix (tfontptr->dpi, resolution, NULL); */ DEBUG_PRINT(DEBUG_DVI,("\n FIND FONT:\t%s %d",tfontptr->n,tfontptr->dpi)); tfontptr->name = kpse_find_vf (tfontptr->n); if (tfontptr->name!=NULL) InitVF(tfontptr); #ifdef HAVE_FT2 else if (option_flags & USE_FREETYPE) { tfontptr->psfontmap = FindPSFontMap(tfontptr->n); if (tfontptr->psfontmap!=NULL) tfontptr->name=kpse_find_t1_or_tt(tfontptr->psfontmap->psfile); else tfontptr->name=kpse_find_t1_or_tt(tfontptr->n); if (tfontptr->name!=NULL) { char* tfmname=kpse_find_file(tfontptr->n, kpse_tfm_format, false); if (tfmname!=NULL) { if (!ReadTFM(tfontptr,tfmname)) { Warning("unable to read tfm file %s", tfmname); free(tfontptr->name); tfontptr->name=NULL; } else if ((option_flags & USE_FREETYPE)==0 || !InitFT(tfontptr)) { /* if Freetype loading fails for some reason, fall back to PK font */ free(tfontptr->name); tfontptr->name=NULL; } free(tfmname); } } } #endif /* HAVE_FT2 */ if (tfontptr->name==NULL) { tfontptr->name=kpse_find_pk (tfontptr->n, tfontptr->dpi, &font_ret); if (tfontptr->name!=NULL) { if (!FILESTRCASEEQ (tfontptr->n, font_ret.name)) { page_flags |= PAGE_GAVE_WARN; Warning("font %s not found, using %s at %d dpi instead", tfontptr->n, font_ret.name, font_ret.dpi); tfontptr->c = 0; /* no checksum warning */ } else if (!kpse_bitmap_tolerance ((double)font_ret.dpi, (double) tfontptr->dpi)) { page_flags |= PAGE_GAVE_WARN; Warning("font %s at %d dpi not found, using %d dpi instead", tfontptr->n, tfontptr->dpi, font_ret.dpi); } InitPK(tfontptr); } else { page_flags |= PAGE_GAVE_WARN; Warning("font %s at %d dpi not found, characters will be left blank", tfontptr->n, tfontptr->dpi); #ifndef WIN32 tfontptr->fmmap.fd = 0; #else /* WIN32 */ tfontptr->fmmap.hFile = INVALID_HANDLE_VALUE; #endif tfontptr->magnification = 0; tfontptr->designsize = 0; } } } static void DoneFont(struct font_entry *tfontp) { switch (tfontp->type) { case FONT_TYPE_PK: DonePK(tfontp); break; case FONT_TYPE_VF: DoneVF(tfontp); break; #ifdef HAVE_FT2 case FONT_TYPE_FT: DoneFT(tfontp); break; #endif } } void FreeFontNumP(struct font_num *hfontnump) { struct font_num *tmp; while(hfontnump!=NULL) { tmp=hfontnump->next; free(hfontnump); hfontnump=tmp; } } void ClearFonts(void) { struct font_entry *tmp; while(hfontptr!=NULL) { tmp=hfontptr->next; DoneFont(hfontptr); if (hfontptr->name != NULL) free(hfontptr->name); free(hfontptr); hfontptr=tmp; } if (dvi!=NULL) FreeFontNumP(dvi->fontnump); } /*-->SetFntNum*/ /**********************************************************************/ /**************************** SetFntNum *****************************/ /**********************************************************************/ void SetFntNum(int32_t k, void* parent /* dvi/vf */) /* this routine is used to specify the font to be used in printing future characters */ { struct font_num *tfontnump=NULL; /* temporary font_num pointer */ switch (((struct font_entry*)parent)->type) { case FONT_TYPE_VF: tfontnump = ((struct font_entry*)parent)->vffontnump; break; case DVI_TYPE: tfontnump = ((struct dvi_data*)parent)->fontnump; } while (tfontnump != NULL && tfontnump->k != k) tfontnump = tfontnump->next; if (tfontnump == NULL) Fatal("font %d undefined", k); currentfont = tfontnump->fontp; if (currentfont->name==NULL) FontFind(currentfont); } fontmap.c0000664000175000017500000002305514737210011012151 0ustar janla64janla64/* fontmap.c */ /************************************************************************ Part of the dvipng distribution This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . Copyright (C) 2002-2015 Jan-Åke Larsson ************************************************************************/ #include "dvipng.h" static struct filemmap psfont_mmap; #ifdef HAVE_FT2 static struct filemmap ttfont_mmap; #endif static struct psfontmap *psfontmap=NULL; static char* newword(char** buffer, char* end) { char *word,*pos=*buffer; while(posline = copyfrom->line; newentry->tfmname = copyword(copyfrom->tfmname); newentry->psfile = copyword(copyfrom->psfile); newentry->encname = copyword(copyfrom->encname); newentry->encoding = copyfrom->encoding; #ifdef HAVE_FT2 newentry->ft_transformp = copyfrom->ft_transformp; newentry->subfont = copyfrom->subfont; #endif newentry->end = copyfrom->end; } else { newentry->line = NULL; newentry->tfmname = NULL; newentry->psfile = NULL; newentry->encname = NULL; newentry->encoding = NULL; #ifdef HAVE_FT2 newentry->ft_transformp = NULL; newentry->subfont = NULL; #endif newentry->end = NULL; } newentry->next=psfontmap; psfontmap=newentry; return(newentry); } static struct psfontmap *SearchPSFontMap(char* fontname, struct filemmap* search_mmap) { static char *pos=NULL,*end=NULL; static struct filemmap* searching_mmap=NULL; struct psfontmap *entry=NULL; if (pos==end && search_mmap!=searching_mmap) { searching_mmap=search_mmap; pos=searching_mmap->data; end=searching_mmap->data+searching_mmap->size; } while(postfmname,fontname)!=0)) { while(pos < end && (*pos=='\r' || *pos=='\n' || *pos==' ' || *pos=='\t' || *pos=='%' || *pos=='*' || *pos==';' || *pos=='#')) { while(pos < end && *pos!='\r' && *pos!='\n') pos++; /* skip comments/empty rows */ pos++; } if (pos < end) { entry=NewPSFont(NULL); entry->line = pos; /* skip tfmname = newword(&pos,end); while(pos < end && *pos!='\r' && *pos!='\n') pos++; entry->end = pos; } pos++; } if (entry!=NULL && strcmp(entry->tfmname,fontname)!=0) entry=NULL; return(entry); } void ClearPSFontMap(void) { struct psfontmap *entry; while(psfontmap!=NULL) { entry=psfontmap; psfontmap=psfontmap->next; free(entry->tfmname); if (entry->psfile!=NULL) free(entry->psfile); if (entry->encname!=NULL) free(entry->encname); free(entry); } UnMmapFile(&psfont_mmap); #ifdef HAVE_FT2 UnMmapFile(&ttfont_mmap); #endif } static void ReadPSFontMap(struct psfontmap *entry) { char *pos,*end,*psname; int nameno = 0; DEBUG_PRINT(DEBUG_FT,("\n PSFONTMAP: %s ",entry->tfmname)); pos=entry->line; end=entry->end; while(pos < end) { if (*pos=='<') { /* filename follows */ pos++; if (pospsfile = newword((char**)&pos,end); DEBUG_PRINT(DEBUG_FT,("<%s ",entry->psfile)); } else if (posencname = newword((char**)&pos,end); DEBUG_PRINT(DEBUG_FT,("<[%s ",entry->encname)); } else { /* encname=word; DEBUG_PRINT(DEBUG_FT,("<[%s ",entry->encname)); } else { /* psfile=word; DEBUG_PRINT(DEBUG_FT,("<%s ",entry->psfile)); } } } else if (*pos=='"') { /* PS code: reencoding/tranformation exists */ char *word; double cxx=1.0,cxy=0.0; pos++; DEBUG_PRINT(DEBUG_FT,("\"")); while(pos < end && *pos!='"') { word=newword((char**)&pos,end); while(pos < end && (*pos==' ' || *pos=='\t')) pos++; if (pos+10ft_transformp=&(entry->ft_transform); entry->ft_transform.xx=(FT_Fixed)(cxx*0x10000); entry->ft_transform.xy=(FT_Fixed)(cxy*0x10000); entry->ft_transform.yx=0; entry->ft_transform.yy=0x10000; #endif DEBUG_PRINT(DEBUG_FT,("\" ")); pos++; } else { /* bare word */ switch (++nameno) { case 1: /* first word is tfmname and perhaps psname, NOT psfile */ while(postfmname; break; case 2: /* second word is psname, NOT psfile */ psname = newword((char**)&pos,end); DEBUG_PRINT(DEBUG_FT,("(%s) ",psname)); free(psname); break; case 3: /* third word is encoding */ entry->encname = newword((char**)&pos,end); DEBUG_PRINT(DEBUG_FT,("<[%s ",entry->encname)); break; default: while(pospsfile==NULL) { /* No psfile-name given, use tfmname */ entry->psfile=copyword(entry->tfmname); DEBUG_PRINT(DEBUG_FT,(" <%s ",entry->psfile)); } if (entry->encname!=NULL && (entry->encoding=FindEncoding(entry->encname))==NULL) Warning("unable to load font encoding '%s' for %s", entry->encname,entry->tfmname); } struct psfontmap* FindPSFontMap(char* fontname) { struct psfontmap *entry; static struct filemmap* search_mmap_p=&psfont_mmap; entry=psfontmap; while(entry!=NULL && strcmp(entry->tfmname,fontname)!=0) entry=entry->next; if(entry==NULL) { entry=SearchPSFontMap(fontname,search_mmap_p); #ifdef HAVE_FT2 if(entry==NULL && search_mmap_p!=&ttfont_mmap) { search_mmap_p=&ttfont_mmap; entry=SearchPSFontMap(fontname,search_mmap_p); } } if(entry==NULL) { struct psfontmap* entry_subfont=NULL; entry=psfontmap; while(entry!=NULL && strcmp(entry->tfmname,fontname)!=0) { while(entry!=NULL && strchr(entry->tfmname,'@')==NULL) entry=entry->next; if (entry!=NULL) { entry_subfont=FindSubFont(entry,fontname); if (entry_subfont!=NULL) entry=entry_subfont; else entry=entry->next; } } #endif } if (entry!=NULL && entry->psfile==NULL) ReadPSFontMap(entry); if (entry!=NULL && entry->encname!=NULL && entry->encoding==NULL) /* Encoding given but it cannot be found. Unusable font */ return(NULL); return(entry); } ft.c0000664000175000017500000001371714750476164011144 0ustar janla64janla64/* ft.c */ /************************************************************************ Part of the dvipng distribution This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . Copyright (C) 2002-2009 Jan-Åke Larsson ************************************************************************/ #include "dvipng.h" void LoadFT(int32_t c, struct char_entry * ptr) { FT_Bitmap bitmap; FT_UInt glyph_i; int i,j,k; unsigned char* bit; static bool hintwarning=false; DEBUG_PRINT(DEBUG_FT,("\n LOAD FT CHAR\t%d (%d)",c,ptr->tfmw)); if (currentfont->psfontmap!=NULL && currentfont->psfontmap->encoding != NULL) { DEBUG_PRINT(DEBUG_FT,(" %s",currentfont->psfontmap->encoding->charname[c])); glyph_i = FT_Get_Name_Index(currentfont->face, currentfont->psfontmap->encoding->charname[c]); } else if (currentfont->psfontmap!=NULL && currentfont->psfontmap->subfont != NULL) { glyph_i = FT_Get_Char_Index( currentfont->face, currentfont->psfontmap->subfont->charindex[c] ); DEBUG_PRINT(DEBUG_FT,(" 0x%X",currentfont->psfontmap->subfont->charindex[c])); } else glyph_i = FT_Get_Char_Index( currentfont->face, c ); if (FT_Load_Glyph( currentfont->face, glyph_i, FT_LOAD_RENDER | FT_LOAD_TARGET_LIGHT )) { /* On some configurations (with FreeType <= 2.1.7) the above fails, while the below works */ if (!hintwarning) { hintwarning=true; Warning("the used FreeType does not have target_light hinting"); } if (FT_Load_Glyph( currentfont->face, glyph_i, FT_LOAD_RENDER | FT_LOAD_NO_HINTING )) Fatal("cannot load FT char %d",c); } ptr->xOffset = -currentfont->face->glyph->bitmap_left*shrinkfactor; ptr->yOffset = (currentfont->face->glyph->bitmap_top-1)*shrinkfactor; bitmap=currentfont->face->glyph->bitmap; DEBUG_PRINT(DEBUG_FT,(" (%dx%d)",bitmap.width,bitmap.rows)); if ((ptr->data = calloc(bitmap.width*bitmap.rows,sizeof(char))) == NULL) Fatal("unable to malloc image space for char %c", (char)c); ptr->w = bitmap.width; ptr->h = bitmap.rows; #define GREYLEVELS 16 DEBUG_PRINT(DEBUG_GLYPH,("\nDRAW GLYPH %d\n", (int)c)); bit=ptr->data; for(i=0;i0 ? k*16-1 : 0; */ DEBUG_PRINT(DEBUG_GLYPH,("%3u ",k)); bit[i*bitmap.width+j]=k; } DEBUG_PRINT(DEBUG_GLYPH,("|\n")); } } bool InitFT(struct font_entry * tfontp) { int error; if (libfreetype==NULL) { if (FT_Init_FreeType( &libfreetype )) { Warning("an error occurred during freetype initialisation, disabling it"); option_flags &= ~USE_FREETYPE; return(false); } # ifdef DEBUG else { FT_Int amajor, aminor, apatch; DEBUG_PRINT(DEBUG_FT,("\n COMPILED WITH FREETYPE %d.%d.%d", FREETYPE_MAJOR, FREETYPE_MINOR, FREETYPE_PATCH)); # ifdef HAVE_FT_LIBRARY_VERSION FT_Library_Version( libfreetype, &amajor, &aminor, &apatch ); DEBUG_PRINT(DEBUG_FT,("\n USING LIBFT %d.%d.%d", amajor, aminor, apatch)); # endif } # endif } DEBUG_PRINT((DEBUG_DVI|DEBUG_FT),("\n OPEN FT FONT:\t'%s'", tfontp->name)); error = FT_New_Face( libfreetype, tfontp->name, 0, &tfontp->face ); if (error == FT_Err_Unknown_File_Format) { Warning("font file %s has unknown format", tfontp->name); return(false); } else if (error) { Warning("font file %s could not be opened", tfontp->name); return(false); } Message(BE_VERBOSE,"<%s>", tfontp->name); if (tfontp->psfontmap != NULL && tfontp->psfontmap->subfont != NULL) error=FT_Select_Charmap(tfontp->face, tfontp->psfontmap->subfont->encoding); else if (tfontp->psfontmap == NULL || tfontp->psfontmap->encoding == NULL) #ifndef FT_ENCODING_ADOBE_CUSTOM # define FT_ENCODING_ADOBE_CUSTOM ft_encoding_adobe_custom # define FT_ENCODING_ADOBE_STANDARD ft_encoding_adobe_standard #endif error=FT_Select_Charmap(tfontp->face, FT_ENCODING_ADOBE_CUSTOM); if (error) { Warning("unable to set font encoding for %s", tfontp->name); if(FT_Select_Charmap( tfontp->face, FT_ENCODING_ADOBE_STANDARD )) { Warning("unable to set fallback font encoding for %s", tfontp->name); return(false); } } if (FT_Set_Char_Size( tfontp->face, /* handle to face object */ 0, /* char_width in 1/64th of points */ ((int64_t)tfontp->d*64*7200)/7227/65536, /* char_height in 1/64th of _big_points, not TeX points */ tfontp->dpi/shrinkfactor, /* horizontal resolution */ tfontp->dpi/shrinkfactor )) /* vertical resolution */ { Warning("unable to set font size for %s", tfontp->name); return(false); } if (tfontp->psfontmap!=NULL) FT_Set_Transform(tfontp->face, tfontp->psfontmap->ft_transformp, NULL); tfontp->type = FONT_TYPE_FT; return(true); } static void UnLoadFT(struct char_entry *ptr) { if (ptr->data!=NULL) free(ptr->data); ptr->data=NULL; } void DoneFT(struct font_entry *tfontp) { int c=0; int error = FT_Done_Face( tfontp->face ); if (error) Warning("font file %s could not be closed", tfontp->name); while(cchr[c]!=NULL) { UnLoadFT((struct char_entry*)tfontp->chr[c]); free(tfontp->chr[c]); tfontp->chr[c]=NULL; } c++; } if (tfontp->name!=NULL) free(tfontp->name); tfontp->name=NULL; } INSTALL0000664000175000017500000001400714747712246011411 0ustar janla64janla64Installing dvipng ***************** Installing dvipng should be simple: merely ‘./configure’, ‘make’, and ‘make install’. Prerequisites ============= • The GD Graphics Draw library, libgd The drawing library ‘libgd’ is necessary, and is downloadable at , and there are binary packages for most operating systems from their respective distributors. In any case, the library installs using ‘autoconf’ so it should not be difficult for you to install it from source, and then proceed with installing dvipng. • The path-searching library kpathsea Kpathsea is most likely included in your LaTeX installation, but it may happen that ./configure does not find it; see below. If you do not have it, download it from and compile it. I have no experience with this, so I cannot help much here. • The font-rendering library FreeType 2 While not strictly necessary, a recent FreeType 2 is recommended since dvipng currently will produce better-quality images when this library is available. To take advantage of this, you should have at least FreeType 2.1.9. FreeType 2 will enable direct support for PostScript and TrueType fonts, so that dvipng will not need to generate bitmapped variants on disk of the TeX fonts since modern TeX distributions include PostScript versions of them. Then, you can render images at different (and unusual) resolutions without cluttering the disk with lots of bitmapped fonts. Finally, it will enable subfont support in dvipng. That is, if you want to render CJK-LaTeX characters, you must have FreeType 2 installed. • libpng and libz To be able to compress and write PNG files to disk, dvipng (or really libgd) uses libpng which in turn uses libz. These should be available on any modern system, if not, download them and install them. • The ‘texinfo’ package This is needed for building the documentation. Configure ========= The first step is to configure the source code, telling it where various files will be. To do so, run ./configure OPTIONS (Note: if you have fetched dvipng from CVS rather than a regular release, you will have to first generate ‘./configure’ by running ‘autoconf’ 2.53 or later.) On many machines, you will not need to specify any options, but if ‘configure’ cannot determine something on its own, you'll need to help it out. For a list of the options type ./configure --help On some machines, the libraries will be installed in directories that are not in the linker's search path. This will generate an error when running ‘./configure’, indicating that it cannot find libgd or libkpathsea (most likely). You then need to specify the path to the respective library's object files. They are typically called e.g., ‘libgd.a’ or ‘libgd.so’. If they are located in e.g., ‘/sw/local/lib’, do ./configure LDFLAGS=-L/sw/local/lib If the library is available as a shared object file (‘.so’), the runtime linker may also need to be told where to find the library, then use ./configure LDFLAGS='-L/sw/local/lib -R/sw/local/lib' When either of these is necessary, it is likely that the C header files are also installed in directories that are not in the C preprocessor's search path. This will also generate an error when running ‘./configure’, indicating that it cannot find e.g., ‘gd.h’ or ‘kpathsea.h’ (most likely). You then need to specify the path to the respective library's C header files. If they are located in e.g., ‘/sw/local/include’, do ./configure CPPFLAGS=-I/sw/local/include On my SUN Solaris workstation, I had to combine this into ./configure CPPFLAGS='-I/sw/local/include -I/sw/tex/teTeX/1.0/include'\ LDFLAGS='-L/sw/local/lib -R/sw/local/lib -L/sw/tex/teTeX/1.0/lib/' where the backslash denotes a continuation of the line. Build/install ============= Once ‘configure’ has been run, simply enter make at the prompt to compile the C code, and build the documentation files. To install the files into the locations chosen earlier, type make install You may need special privileges to install, e.g., if you are installing into system directories. Installation outside the texmf tree =================================== In some cases, a dvipng binary installed outside the texmf tree will not be able to find virtual fonts, or the PostScript font maps (normally used by dvips). This may be because _only_ $SELFAUTOLOC, $SELFAUTODIR, and $SELFAUTOPARENT are used in the texmf tree configuration file ‘texmf.cnf’. If so, give the switch ‘--enable-selfauto-set’ to ‘./configure’. This will make dvipng adjust these three internally so that kpathsea thinks that dvipng _is_ installed in the texmf tree. Installation for non-privileged users ===================================== Often people without system administration privileges want to install software for their private use. In that case you need to specify more options to the ‘configure’ script, usually this is done by using the ‘--prefix’ option to the ‘configure’ script, and let it point to the personal home directory. In that way, resulting binaries will be installed under the ‘bin’ subdirectory of your home directory, manual pages under ‘man’ and so on. That way, it is reasonably easy to maintain a bunch of additional packages, since the prefix argument is supported by most ‘configure’ scripts. You'll have to add something like ‘/home/myself/bin’ to your ‘PATH’ shell variable, if it isn't there already, and similarly set the ‘INFOPATH’ and ‘MANPATH’ variables to be able to access the documentation. Copying ======= This program is released under the GNU Lesser General Public License version 3, see the COPYING file in the dvipng distribution or . Copyright © 2002-2015, 2019 Jan-Ã…ke Larsson install-sh0000700000175000017500000003577614747641202012361 0ustar janla64janla64#!/bin/sh # install - install a program, script, or datafile scriptversion=2020-11-14.01; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. tab=' ' nl=' ' IFS=" $tab$nl" # Set DOITPROG to "echo" to test this script. doit=${DOITPROG-} doit_exec=${doit:-exec} # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_mkdir= # Desired mode of installed file. mode=0755 # Create dirs (including intermediate dirs) using mode 755. # This is like GNU 'install' as of coreutils 8.32 (2020). mkdir_umask=22 backupsuffix= chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false is_target_a_directory=possibly usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -p pass -p to $cpprog. -s $stripprog installed files. -S SUFFIX attempt to back up existing files, with suffix SUFFIX. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG By default, rm is invoked with -f; when overridden with RMPROG, it's up to you to specify -f if you want it. If -S is not specified, no backups are attempted. Email bug reports to bug-automake@gnu.org. Automake home page: https://www.gnu.org/software/automake/ " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -p) cpprog="$cpprog -p";; -s) stripcmd=$stripprog;; -S) backupsuffix="$2" shift;; -t) is_target_a_directory=always dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) is_target_a_directory=never;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done # We allow the use of options -d and -T together, by making -d # take the precedence; this is for compatibility with GNU install. if test -n "$dir_arg"; then if test -n "$dst_arg"; then echo "$0: target directory not allowed when installing a directory." >&2 exit 1 fi fi if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then if test $# -gt 1 || test "$is_target_a_directory" = always; then if test ! -d "$dst_arg"; then echo "$0: $dst_arg: Is not a directory." >&2 exit 1 fi fi fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? # Don't chown directories that already exist. if test $dstdir_status = 0; then chowncmd="" fi else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename. if test -d "$dst"; then if test "$is_target_a_directory" = never; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dstbase=`basename "$src"` case $dst in */) dst=$dst$dstbase;; *) dst=$dst/$dstbase;; esac dstdir_status=0 else dstdir=`dirname "$dst"` test -d "$dstdir" dstdir_status=$? fi fi case $dstdir in */) dstdirslash=$dstdir;; *) dstdirslash=$dstdir/;; esac obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false # The $RANDOM variable is not portable (e.g., dash). Use it # here however when possible just to lower collision chance. tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap ' ret=$? rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null exit $ret ' 0 # Because "mkdir -p" follows existing symlinks and we likely work # directly in world-writeable /tmp, make sure that the '$tmpdir' # directory is successfully created first before we actually test # 'mkdir -p'. if (umask $mkdir_umask && $mkdirprog $mkdir_mode "$tmpdir" && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. test_tmpdir="$tmpdir/a" ls_ld_tmpdir=`ls -ld "$test_tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null fi trap '' 0;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac oIFS=$IFS IFS=/ set -f set fnord $dstdir shift set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=${dstdirslash}_inst.$$_ rmtmp=${dstdirslash}_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && { test -z "$stripcmd" || { # Create $dsttmp read-write so that cp doesn't create it read-only, # which would cause strip to fail. if test -z "$doit"; then : >"$dsttmp" # No need to fork-exec 'touch'. else $doit touch "$dsttmp" fi } } && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # If $backupsuffix is set, and the file being installed # already exists, attempt a backup. Don't worry if it fails, # e.g., if mv doesn't support -f. if test -n "$backupsuffix" && test -f "$dst"; then $doit $mvcmd -f "$dst" "$dst$backupsuffix" 2>/dev/null fi # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: install.texi0000664000175000017500000001474514737210011012710 0ustar janla64janla64@c install.texi @c @c Part of the dvipng distribution @include macros.texi @ifset rawfile @chapter Installing dvipng @end ifset @c ----------------------- Installing dvipng should be simple: merely @code{./configure}, @code{make}, and @code{make install}. @ifclear rawfile @menu * Prerequisites:: * Configure:: * Build/install:: * Installation outside the texmf tree:: * Advice for non-privileged users:: @end menu @end ifclear @node Prerequisites @section Prerequisites @itemize @bullet @item The GD Graphics Draw library, libgd The drawing library @samp{libgd} is necessary, and is downloadable at @uref{https://bitbucket.org/libgd/gd-libgd/downloads}, and there are binary packages for most operating systems from their respective distributors. In any case, the library installs using @samp{autoconf} so it should not be difficult for you to install it from source, and then proceed with installing dvipng. @item The path-searching library kpathsea Kpathsea is most likely included in your @LaTeX{} installation, but it may happen that ./configure does not find it; see below. If you do not have it, download it from @uref{http://www.ctan.org} and compile it. I have no experience with this, so I cannot help much here. @item The font-rendering library FreeType 2 While not strictly necessary, a recent FreeType 2 is recommended since dvipng currently will produce better-quality images when this library is available. To take advantage of this, you should have at least FreeType 2.1.9. FreeType 2 will enable direct support for PostScript and TrueType fonts, so that dvipng will not need to generate bitmapped variants on disk of the @TeX{} fonts since modern @TeX{} distributions include PostScript versions of them. Then, you can render images at different (and unusual) resolutions without cluttering the disk with lots of bitmapped fonts. Finally, it will enable subfont support in dvipng. That is, if you want to render CJK-@LaTeX{} characters, you must have FreeType 2 installed. @item libpng and libz To be able to compress and write PNG files to disk, dvipng (or really libgd) uses libpng which in turn uses libz. These should be available on any modern system, if not, download them and install them. @item The @code{texinfo} package This is needed for building the documentation. @end itemize @node Configure @section Configure The first step is to configure the source code, telling it where various files will be. To do so, run @example ./configure @var{options} @end example (Note: if you have fetched dvipng from CVS rather than a regular release, you will have to first generate @file{./configure} by running @code{autoconf} 2.53 or later.) On many machines, you will not need to specify any options, but if @code{configure} cannot determine something on its own, you'll need to help it out. For a list of the options type @example ./configure --help @end example On some machines, the libraries will be installed in directories that are not in the linker's search path. This will generate an error when running @file{./configure}, indicating that it cannot find libgd or libkpathsea (most likely). You then need to specify the path to the respective library's object files. They are typically called e.g., @file{libgd.a} or @file{libgd.so}. If they are located in e.g., @file{/sw/local/lib}, do @example ./configure LDFLAGS=-L/sw/local/lib @end example If the library is available as a shared object file (@file{.so}), the runtime linker may also need to be told where to find the library, then use @example ./configure LDFLAGS='-L/sw/local/lib -R/sw/local/lib' @end example When either of these is necessary, it is likely that the C header files are also installed in directories that are not in the C preprocessor's search path. This will also generate an error when running @file{./configure}, indicating that it cannot find e.g., @file{gd.h} or @file{kpathsea.h} (most likely). You then need to specify the path to the respective library's C header files. If they are located in e.g., @file{/sw/local/include}, do @example ./configure CPPFLAGS=-I/sw/local/include @end example On my SUN Solaris workstation, I had to combine this into @example ./configure CPPFLAGS='-I/sw/local/include -I/sw/tex/teTeX/1.0/include'\ LDFLAGS='-L/sw/local/lib -R/sw/local/lib -L/sw/tex/teTeX/1.0/lib/' @end example @noindent where the backslash denotes a continuation of the line. @node Build/install @section Build/install Once @file{configure} has been run, simply enter @example make @end example @noindent at the prompt to compile the C code, and build the documentation files. To install the files into the locations chosen earlier, type @example make install @end example @noindent You may need special privileges to install, e.g., if you are installing into system directories. @node Installation outside the texmf tree @section Installation outside the texmf tree In some cases, a dvipng binary installed outside the texmf tree will not be able to find virtual fonts, or the PostScript font maps (normally used by dvips). This may be because @emph{only} $SELFAUTOLOC, $SELFAUTODIR, and $SELFAUTOPARENT are used in the texmf tree configuration file @samp{texmf.cnf}. If so, give the switch @samp{--enable-selfauto-set} to @samp{./configure}. This will make dvipng adjust these three internally so that kpathsea thinks that dvipng @emph{is} installed in the texmf tree. @node Advice for non-privileged users @section Installation for non-privileged users Often people without system administration privileges want to install software for their private use. In that case you need to specify more options to the @file{configure} script, usually this is done by using the @samp{--prefix} option to the @file{configure} script, and let it point to the personal home directory. In that way, resulting binaries will be installed under the @file{bin} subdirectory of your home directory, manual pages under @file{man} and so on. That way, it is reasonably easy to maintain a bunch of additional packages, since the prefix argument is supported by most @file{configure} scripts. You'll have to add something like @file{/home/myself/bin} to your @code{PATH} shell variable, if it isn't there already, and similarly set the @code{INFOPATH} and @code{MANPATH} variables to be able to access the documentation. @ifset rawfile @section Copying This program is released under the GNU Lesser General Public License version 3, see the COPYING file in the dvipng distribution or @url{http://www.gnu.org/licenses/}. Copyright @copyright{} 2002-2015, 2019 Jan-@AA{}ke Larsson @end ifset macros.texi0000664000175000017500000000271514737210011012520 0ustar janla64janla64@ignore macros.texi Part of the dvipng distribution This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . Copyright @copyright{} 2002-2008 Jan-@AA{}ke Larsson @end ignore @ifclear macros @set macros @macro AUCTeX {} AUC@TeX{} @end macro @ifnottex @macro LaTeX {} La@TeX{} @end macro @macro previewlatex {} preview-latex @end macro @ifset no-acronym @clear no-acronym @macro acronym {text} @sc{\text\} @end macro @end ifset @ifset no-env @clear no-env @macro env {text} @code{\text\} @end macro @end ifset @ifset no-option @clear no-option @macro option {text} @samp{\text\} @end macro @end ifset @end ifnottex @tex \gdef\LaTeX{L\kern-.36em\raise.3ex\hbox{\sc{a}}\kern-.15em\TeX} \gdef\previewlatex{Preview-\LaTeX} \ifx\acronym\undefined \gdef\acronym#1{{\smallcaps \lowercase{#1}}} \fi \ifx\env\undefined \global\let\env=\code \fi \ifx\option\undefined \global\let\option=\samp \fi @end tex @end ifclear Makefile.in0000664000175000017500000001125014737210011012400 0ustar janla64janla64# Makefile is generated by 'configure' from Makefile.in #************************************************************************ # # Part of the dvipng distribution # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as # published by the Free Software Foundation, either version 3 of the # License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this program. If not, see # . # # Copyright (C) 2002-2015 Jan-Åke Larsson # #************************************************************************ PACKAGE_STRING="@PACKAGE_STRING@" CC = @CC@ CFLAGS = @CFLAGS@ -Wall CPPFLAGS = @CPPFLAGS@ -I. LN_S = @LN_S@ LIBS = @LIBS@ LDFLAGS = @LDFLAGS@ srcdir = @srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ infodir = @infodir@ mandir = @mandir@ datarootdir = @datarootdir@ DESTDIR= INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ MKINSTALLDIRS = $(srcdir)/mkinstalldirs MAKEINFO=@MAKEINFO@ @MAKEINFO_MACROS@ INSTALL_INFO=@INSTALL_INFO@ TEX=tex TEXIDVI=texi2dvi TEXIHTML=texi2html DVIPS=dvips TEXIFILES = dvipng.texi readme.texi install.texi macros.texi dvipng.help objects = dvipng.o color.o draw.o dvi.o font.o misc.o pk.o \ set.o special.o papersiz.o ppagelist.o \ vf.o @PSFONTS_O@ all: dvipng docs install: @INSTALL_BIN_TARGET@ @INSTALL_BIN_TARGET@-docs ####################################### The program dvipng: $(objects) $(CC) $(LDFLAGS) $(objects) -o dvipng $(LIBS) $(objects): dvipng.h commands.h config.h install-dvipng: dvipng -$(MKINSTALLDIRS) $(DESTDIR)$(bindir) $(INSTALL) dvipng $(DESTDIR)$(bindir) install-dvigif: install-dvipng (cd $(DESTDIR)$(bindir) && rm -f dvigif && $(LN_S) dvipng dvigif) ####################################### The documentation docs: dvipng.dvi dvipng.info dvipng.dvi: $(TEXIFILES) -$(TEXIDVI) -I $(srcdir) $(srcdir)/dvipng.texi dvipng.ps: dvipng.dvi $(DVIPS) -Ppdf dvipng.dvi dvipng.info: $(TEXIFILES) dvipng.help -$(MAKEINFO) -I$(srcdir) $(srcdir)/dvipng.texi dvipng.help: dvipng -./dvipng > dvipng.tmp ( test -r dvipng.help && diff dvipng.tmp dvipng.help ) \ || cp dvipng.tmp dvipng.help rm -f dvipng.tmp www: $(TEXIFILES) dvipng.help mkdir -p www texi2html -split chapter -nosec-nav -subdir html \ -I $(srcdir) $(srcdir)/dvipng.texi (cd html; for i in *; do \ sed -e "s/Jan-A/Jan-\Å\;/g" $$i > ../www/$$i; \ done) cp www/dvipng.html www/index.html rm -rf html dvipng_mono.html: $(TEXIFILES) dvipng.help texi2html --monolithic -nomenu -nosec_nav -o dvipng_mono.html \ -I $(srcdir) $(srcdir)/dvipng.texi install-docs: docs -$(MKINSTALLDIRS) $(DESTDIR)$(infodir) for x in dvipng.info* ; do \ $(INSTALL_DATA) $$x $(DESTDIR)$(infodir) ; \ done -$(INSTALL_INFO) --info-dir=$(DESTDIR)$(infodir) dvipng.info -$(MKINSTALLDIRS) $(DESTDIR)$(mandir)/man1 $(INSTALL_DATA) $(srcdir)/dvipng.1 $(DESTDIR)$(mandir)/man1 install-dvipng-docs: install-docs install-dvigif-docs: install-docs (cd $(DESTDIR)$(mandir)/man1 && rm -f dvigif.1 && $(LN_S) dvipng.1 dvigif.1) ####################################### The test test: test_dvipng.dvi dvipng ./dvipng -T tight -strict test_dvipng echo View the result e.g. with xv test_dvipng\*.png test_dvipng.dvi: test_dvipng.tex latex $(srcdir)/test_dvipng.tex ####################################### The cleaning up clean: rm -f *.o dvipng *.help *.info* *dvipng.dvi *.aux *.log rm -f *dvipng*.png *.cp *.fn *.ky *~ \#*\# \ *.tp *.vr *.pg *.toc *.tp *.bak *.cps *.kys *.tps \ *.fns *.vrs *.pgs *.html *.tmp distclean: clean rm -f Makefile rm -f config.status config.log config.cache c-auto.h rm -rf autom4te.cache ####################################### Maintainer targets INSTALL: install.texi -$(MAKEINFO) -D rawfile --no-headers --no-validate \ --no-number-sections \ -I$(srcdir) $(srcdir)/install.texi --output INSTALL README: readme.texi -$(MAKEINFO) -D rawfile --no-headers --no-validate \ --no-number-sections \ -I$(srcdir) $(srcdir)/readme.texi --output README dvipng.1: dvipng.texi readme.texi ~/bin/texi2pod.pl -D man $(srcdir)/dvipng.texi | \ sed -es/@//g -es/previewlatex/preview-latex/g -es/{}//g > dvipng.pod pod2man --center="User commands" --release=$(PACKAGE_STRING)\ dvipng.pod > dvipng.1 rm dvipng.pod dist: INSTALL README dvipng.1 distclean # SunOS make suffix rule wierdness .cps.h: miktex.h0000664000175000017500000001655314747640236012041 0ustar janla64janla64/* config.h. Edited for MiKTeX. */ /************************************************************************ Part of the dvipng distribution This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . Copyright (C) 2002-2015 Jan-Åke Larsson ************************************************************************/ /* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP systems. This function is required for `alloca.c' support on those systems. */ #undef CRAY_STACKSEG_END /* Define to 1 if using `alloca.c'. */ #undef C_ALLOCA /* Define as 1 to get the debug (-d) option. */ #define DEBUG 1 /* The environment setting for $SELFAUTODIR */ #undef ENV_SELFAUTODIR /* The environment setting for $SELFAUTOLOC */ #undef ENV_SELFAUTOLOC /* The environment setting for $SELFAUTOPARENT */ #undef ENV_SELFAUTOPARENT /* Define as the path to GhostScript. */ #undef GS_PATH /* Define to 1 if you have `alloca', as a function or macro. */ #define HAVE_ALLOCA 1 /* Define to 1 if you have and it should be used (not on Ultrix). */ #undef HAVE_ALLOCA_H /* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */ #undef HAVE_DOPRNT /* Define to 1 if you have the `dup2' function. */ #undef HAVE_DUP2 /* Define to 1 if you have the header file. */ #define HAVE_FCNTL_H 1 /* Define to 1 if you have the `fork' function. */ #undef HAVE_FORK /* Define to 1 if you have freetype2 */ #undef HAVE_FT2 /* Define to 1 if you have the `ftime' function. */ #undef HAVE_FTIME /* Define to 1 if you have the `FT_Library_Version' function. */ #undef HAVE_FT_LIBRARY_VERSION /* Define to 1 if you have the `gdImageAlphaBlending' function. */ #undef HAVE_GDIMAGEALPHABLENDING /* Define to 1 if you have the `gdImageColorResolveAlpha' function. */ #undef HAVE_GDIMAGECOLORRESOLVEALPHA /* Define to 1 if you have the `gdImageCreateTrueColor' function. */ #define HAVE_GDIMAGECREATETRUECOLOR 1 /* Define to 1 if you have the `gdImageGif' function. */ #undef HAVE_GDIMAGEGIF /* Define to 1 if you have the `gdImagePngEx' function. */ #define HAVE_GDIMAGEPNGEX 1 /* Define to 1 if you have the `gdImageTrueColorToPalette' function. */ #define HAVE_GDIMAGETRUECOLORTOPALETTE 1 /* Define to 1 if you have the header file. */ #define HAVE_GD_H 1 /* Define to 1 if you have the `getpagesize' function. */ #undef HAVE_GETPAGESIZE /* Define to 1 if you have the `gettimeofday' function. */ #undef HAVE_GETTIMEOFDAY /* Define to 1 if you have the header file. */ #define HAVE_INTTYPES_H 1 /* Define to 1 if you have the header file. */ #define HAVE_KPATHSEA_KPATHSEA_H 1 /* Define to 1 if your kpathsea has kpse_enc_format */ #define HAVE_KPSE_ENC_FORMATS 1 /* Define to 1 if you have the `gd' library (-lgd). */ #define HAVE_LIBGD 1 /* Define to 1 if you have the `gen' library (-lgen). */ #undef HAVE_LIBGEN /* Define to 1 if you have the `kpathsea' library (-lkpathsea). */ #define HAVE_LIBKPATHSEA 1 /* Define to 1 if you have the `m' library (-lm). */ #define HAVE_LIBM 1 /* Define to 1 if you have the `png' library (-lpng). */ #define HAVE_LIBPNG 1 /* Define to 1 if you have the `z' library (-lz). */ #undef HAVE_LIBZ /* Define to 1 if your system has a GNU libc compatible `malloc' function, and to 0 otherwise. */ #undef HAVE_MALLOC /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the `memset' function. */ #define HAVE_MEMSET 1 /* Define to 1 if you have a working `mmap' system call. */ #undef HAVE_MMAP /* Define to 1 if you have the `munmap' function. */ #undef HAVE_MUNMAP /* Define to 1 if you have the header file. */ #define HAVE_PNG_H 1 /* Define to 1 if you have the `pow' function. */ #undef HAVE_POW /* Define to 1 if you have the `putenv' function. */ #undef HAVE_PUTENV /* Define to 1 if stdbool.h conforms to C99. */ #undef HAVE_STDBOOL_H 1 /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #define HAVE_STDLIB_H 1 /* Define to 1 if you have the `strchr' function. */ #define HAVE_STRCHR 1 /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #define HAVE_STRING_H 1 /* Define to 1 if you have the `strrchr' function. */ #undef HAVE_STRRCHR /* Define to 1 if you have the `strstr' function. */ #undef HAVE_STRSTR /* Define to 1 if you have the `strtol' function. */ #undef HAVE_STRTOL /* Define to 1 if you have the header file. */ #define HAVE_SYS_STAT_H 1 /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TIME_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have that is POSIX.1 compatible. */ #undef HAVE_SYS_WAIT_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if you have the `vfork' function. */ #undef HAVE_VFORK /* Define to 1 if you have the header file. */ #undef HAVE_VFORK_H /* Define to 1 if you have the `vprintf' function. */ #define HAVE_VPRINTF 1 /* Define to 1 if `fork' works. */ #undef HAVE_WORKING_FORK /* Define to 1 if `vfork' works. */ #undef HAVE_WORKING_VFORK /* Define to 1 if the system has the type `_Bool'. */ #undef HAVE__BOOL 1 /* Define to the address where bug reports for this package should be sent. */ #define PACKAGE_BUGREPORT "dvipng@nongnu.org" /* Define to the full name of this package. */ #define PACKAGE_NAME "dvipng" /* Define to the full name and version of this package. */ #define PACKAGE_STRING "dvipng 1.7" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "dvipng" /* Define to the version of this package. */ #define PACKAGE_VERSION "1.7" /* If using the C implementation of alloca, define if you know the direction of stack growth for your system; otherwise it will be automatically deduced at run-time. STACK_DIRECTION > 0 => grows toward higher addresses STACK_DIRECTION < 0 => grows toward lower addresses STACK_DIRECTION = 0 => direction of growth unknown */ #undef STACK_DIRECTION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Define as 1 to get execution time output. */ #undef TIMING /* Define to empty if `const' does not conform to ANSI C. */ #undef const /* Define to `long long' if does not define it. */ #undef int64_t /* Define to rpl_malloc if the replacement function should be used. */ #undef malloc /* Define to `int' if does not define. */ #undef pid_t /* Define to `unsigned' if does not define. */ #undef size_t /* Define to `unsigned long long' if does not define it. */ #undef uint64_t /* Define as `fork' if `vfork' does not work. */ #undef vfork miktex.mak0000664000175000017500000001515014737210011012331 0ustar janla64janla64## miktex.mak: dvipng ## ## Copyright (C) 2004 Christian Schenk ## ## This file is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published ## by the Free Software Foundation; either version 2, or (at your ## option) any later version. ## ## This file is distributed in the hope that it will be useful, but ## WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this file; if not, write to the Free Software ## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA ## 02110-1301 USA. miktex_cc_no_warnings = 1 miktex_cc_disable_optimization = 1 !include ..\miktex.inc objects = \ $(outdir)\color.obj \ $(outdir)\draw.obj \ $(outdir)\dvi.obj \ $(outdir)\dvipng.obj \ $(outdir)\font.obj \ $(outdir)\misc.obj \ $(outdir)\papersiz.obj \ $(outdir)\pk.obj \ $(outdir)\ppagelist.obj \ $(outdir)\set.obj \ $(outdir)\special.obj \ $(outdir)\vf.obj \ $(wrapper_obj) \ sources = \ color.c \ draw.c \ dvi.c \ dvipng.c \ font.c \ misc.c \ papersiz.c \ pk.c \ ppagelist.c \ set.c \ special.c \ vf.c \ extra_cdefines = \ -Dalloca=_alloca \ -DUSE_MIKTEX_EXIT \ extra_cincludes = \ -I$(gdlibdir) \ -I$(kpslibdir) \ .c{$(outdir)\}.obj: $(cc) $(cstandard) \ $(extra_cdefines) \ $(extra_cincludes) \ $(ccopt_output_directory)$(outdir)\ $< binaries = $(outdir)\dvipng.exe all: common-all $(binaries) install: common-install install-binaries qrt: common-qrt # ----------------------------------------------------------------------------- # dvipng # ----------------------------------------------------------------------------- libs = \ $(miktex_lib) \ $(gd_lib) \ $(kps_lib) \ $(gnu_lib) \ $(texmf_lib) \ $(outdir)\dvipng.exe: \ $(outdir) \ $(objects) \ $(libs) \ $(outdir)\dvipng.res \ $(link) $(lstandard) \ -out:$@ \ $(objects) \ $(libs) \ $(outdir)\dvipng.res \ $(outdir)\dvipng.res: \ $(libdir)\miktex-version.h \ $(outdir) \ dvipng-version.h \ dvipng.rc \ $(rc) $(rcstandard) $(rcopt_output_file)$@ dvipng.rc # ----------------------------------------------------------------------------- # clean-up # ----------------------------------------------------------------------------- mostlyclean: common-mostlyclean clean: common-clean mostlyclean distclean: common-distclean clean realclean: common-realclean distclean # ----------------------------------------------------------------------------- # dependencies # ----------------------------------------------------------------------------- !include ..\common-dependencies.inc depend: $(sources) $(MAKEDEPEND1) $(extra_cincludes) $(extra_cdefines) $(sources) # DO NOT DELETE $(outdir)\color.obj: dvipng.h config.h .\inttypes.h $(gdlibdir)\gd.h $(outdir)\color.obj: $(gdlibdir)\gd_io.h $(gdlibdir)\gdfx.h $(outdir)\color.obj: $(kpslibdir)\kpathsea\kpathsea.h $(outdir)\color.obj: $(kpslibdir)\web2c-miktex.h ..\lib\miktex.h $(outdir)\color.obj: ..\lib\miktex-features.h commands.h $(outdir)\draw.obj: dvipng.h config.h .\inttypes.h $(gdlibdir)\gd.h $(outdir)\draw.obj: $(gdlibdir)\gd_io.h $(gdlibdir)\gdfx.h $(outdir)\draw.obj: $(kpslibdir)\kpathsea\kpathsea.h $(outdir)\draw.obj: $(kpslibdir)\web2c-miktex.h ..\lib\miktex.h $(outdir)\draw.obj: ..\lib\miktex-features.h commands.h $(outdir)\dvi.obj: dvipng.h config.h .\inttypes.h $(gdlibdir)\gd.h $(outdir)\dvi.obj: $(gdlibdir)\gd_io.h $(gdlibdir)\gdfx.h $(outdir)\dvi.obj: $(kpslibdir)\kpathsea\kpathsea.h $(outdir)\dvi.obj: $(kpslibdir)\web2c-miktex.h ..\lib\miktex.h $(outdir)\dvi.obj: ..\lib\miktex-features.h commands.h ..\libgnu\gnu-miktex.h $(outdir)\dvipng.obj: dvipng.h config.h .\inttypes.h $(outdir)\dvipng.obj: $(gdlibdir)\gd.h $(gdlibdir)\gd_io.h $(outdir)\dvipng.obj: $(gdlibdir)\gdfx.h $(outdir)\dvipng.obj: $(kpslibdir)\kpathsea\kpathsea.h $(outdir)\dvipng.obj: $(kpslibdir)\web2c-miktex.h ..\lib\miktex.h $(outdir)\dvipng.obj: ..\lib\miktex-features.h commands.h $(outdir)\font.obj: dvipng.h config.h .\inttypes.h $(gdlibdir)\gd.h $(outdir)\font.obj: $(gdlibdir)\gd_io.h $(gdlibdir)\gdfx.h $(outdir)\font.obj: $(kpslibdir)\kpathsea\kpathsea.h $(outdir)\font.obj: $(kpslibdir)\web2c-miktex.h ..\lib\miktex.h $(outdir)\font.obj: ..\lib\miktex-features.h commands.h $(outdir)\misc.obj: dvipng.h config.h .\inttypes.h $(gdlibdir)\gd.h $(outdir)\misc.obj: $(gdlibdir)\gd_io.h $(gdlibdir)\gdfx.h $(outdir)\misc.obj: $(kpslibdir)\kpathsea\kpathsea.h $(outdir)\misc.obj: $(kpslibdir)\web2c-miktex.h ..\lib\miktex.h $(outdir)\misc.obj: ..\lib\miktex-features.h commands.h $(outdir)\misc.obj: ..\libgnu\gnu-miktex.h $(outdir)\papersiz.obj: dvipng.h config.h .\inttypes.h $(outdir)\papersiz.obj: $(gdlibdir)\gd.h $(outdir)\papersiz.obj: $(gdlibdir)\gd_io.h $(outdir)\papersiz.obj: $(gdlibdir)\gdfx.h $(outdir)\papersiz.obj: $(kpslibdir)\kpathsea\kpathsea.h $(outdir)\papersiz.obj: $(kpslibdir)\web2c-miktex.h ..\lib\miktex.h $(outdir)\papersiz.obj: ..\lib\miktex-features.h commands.h $(outdir)\pk.obj: dvipng.h config.h .\inttypes.h $(gdlibdir)\gd.h $(outdir)\pk.obj: $(gdlibdir)\gd_io.h $(gdlibdir)\gdfx.h $(outdir)\pk.obj: $(kpslibdir)\kpathsea\kpathsea.h $(outdir)\pk.obj: $(kpslibdir)\web2c-miktex.h ..\lib\miktex.h $(outdir)\pk.obj: ..\lib\miktex-features.h commands.h $(outdir)\ppagelist.obj: dvipng.h config.h .\inttypes.h $(outdir)\ppagelist.obj: $(gdlibdir)\gd.h $(outdir)\ppagelist.obj: $(gdlibdir)\gd_io.h $(outdir)\ppagelist.obj: $(gdlibdir)\gdfx.h $(outdir)\ppagelist.obj: $(kpslibdir)\kpathsea\kpathsea.h $(outdir)\ppagelist.obj: $(kpslibdir)\web2c-miktex.h ..\lib\miktex.h $(outdir)\ppagelist.obj: ..\lib\miktex-features.h commands.h $(outdir)\set.obj: dvipng.h config.h .\inttypes.h $(gdlibdir)\gd.h $(outdir)\set.obj: $(gdlibdir)\gd_io.h $(gdlibdir)\gdfx.h $(outdir)\set.obj: $(kpslibdir)\kpathsea\kpathsea.h $(outdir)\set.obj: $(kpslibdir)\web2c-miktex.h ..\lib\miktex.h $(outdir)\set.obj: ..\lib\miktex-features.h commands.h $(outdir)\special.obj: dvipng.h config.h .\inttypes.h $(outdir)\special.obj: $(gdlibdir)\gd.h $(gdlibdir)\gd_io.h $(outdir)\special.obj: $(gdlibdir)\gdfx.h $(outdir)\special.obj: $(kpslibdir)\kpathsea\kpathsea.h $(outdir)\special.obj: $(kpslibdir)\web2c-miktex.h ..\lib\miktex.h $(outdir)\special.obj: ..\lib\miktex-features.h commands.h $(outdir)\vf.obj: dvipng.h config.h .\inttypes.h $(gdlibdir)\gd.h $(outdir)\vf.obj: $(gdlibdir)\gd_io.h $(gdlibdir)\gdfx.h $(outdir)\vf.obj: $(kpslibdir)\kpathsea\kpathsea.h $(outdir)\vf.obj: $(kpslibdir)\web2c-miktex.h ..\lib\miktex.h $(outdir)\vf.obj: ..\lib\miktex-features.h commands.h misc.c0000664000175000017500000006137014737210011011442 0ustar janla64janla64/* misc.c */ /************************************************************************ Part of the dvipng distribution This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . Copyright (C) 2002-2015, 2019 Jan-Åke Larsson ************************************************************************/ #include "dvipng.h" #ifdef HAVE_LIBGEN_H # include #endif #include /* open/close */ #ifdef HAVE_MMAP #include #endif #include #if defined _WIN32 && !defined __CYGWIN__ && !defined __CYGWIN32__ /* Use Windows separators on all _WIN32 defining environments, except Cygwin. */ # define DIR_SEPARATOR_CHAR '\\' #endif #ifndef DIR_SEPARATOR_CHAR # define DIR_SEPARATOR_CHAR '/' #endif /* !DIR_SEPARATOR_CHAR */ static char *programname; /*-->DecodeArgs*/ /*********************************************************************/ /***************************** DecodeArgs ****************************/ /*********************************************************************/ bool DecodeArgs(int argc, char ** argv) { int i; /* argument index for options */ bool ppused=false; /* Flag when -pp is used */ int32_t number; /* Temporary storage for numeric parameter */ char *dviname=NULL; /* Name of dvi file */ char *outname=NULL; /* Name of output file */ programname=PACKAGE_NAME; if (argv[0]) { #ifdef HAVE_GDIMAGEGIF programname=strrchr(argv[0],DIR_SEPARATOR_CHAR); if (programname!=NULL) programname++; else programname=argv[0]; if (strncasecmp(programname,"dvigif",6)==0) option_flags |= GIF_OUTPUT; #endif programname=argv[0]; } Message(BE_NONQUIET,"This is %s",programname); if (option_flags & GIF_OUTPUT) Message(BE_NONQUIET," (%s)", PACKAGE_NAME); Message(BE_NONQUIET," %s Copyright 2002-2015, 2019 Jan-Ake Larsson\n", PACKAGE_VERSION); for (i=1; i'9' && *p!='-') { if (strncmp(p,"vinum",5)==0) { if (p[5] != '0') { option_flags |= DVI_PAGENUM; Message(PARSE_STDIN,"DVI page number output on\n",p); } else { option_flags &= ~DVI_PAGENUM; Message(PARSE_STDIN,"DVI page number output off\n"); } break; } else if (strncmp(p,"epth",4)==0) { /* Depth reporting */ if (p[4] != '0') { option_flags |= REPORT_DEPTH; Message(PARSE_STDIN,"Depth reporting on\n",p); } else { option_flags &= ~REPORT_DEPTH; Message(PARSE_STDIN,"Depth reporting off\n"); } break; } goto DEFAULT; } else { #ifdef DEBUG if (*p == 0 && argv[i+1]) p = argv[i+1]; debug = atoi(p); if (debug > 0) { if (p == argv[i+1]) i++; } else debug = DEBUG_DEFAULT; Message(PARSE_STDIN,"Debug output enabled\n"); #ifdef HAVE_LIBKPATHSEA kpathsea_debug = debug / LASTDEBUG / 2 ; #endif #else Warning("This instance of %s was compiled without the debug (-d) option", programname); #endif break; } case 'o': /* Output file is specified */ if (*p == 0 && argv[i+1]) p = argv[++i] ; outname=p; /* remove .png extension */ Message(PARSE_STDIN,"Output file: %s\n", outname); break; #ifdef MAKETEXPK case 'M': /* -M, -M1 => don't make font; -M0 => do. */ makeTexPK = (*p == '0'); #ifdef HAVE_LIBKPATHSEA kpse_set_program_enabled (kpse_pk_format, makeTexPK, kpse_src_cmdline); #endif if (makeTexPK) Message(PARSE_STDIN,"MakeTeXPK enabled\n"); else Message(PARSE_STDIN,"MakeTeXPK disabled\n"); break; #endif /* MAKETEXPK */ case 'm': if (strcmp(p,"ode") == 0 ) { if (argv[i+1]) user_mfmode = argv[++i] ; Message(PARSE_STDIN,"MetaFont mode: %s\n",user_mfmode); break; } goto DEFAULT; case 'h': if (strcmp(p,"elp") == 0 ) { break; } else if (strncmp(p,"eight",5) == 0 ) { /* Height reporting */ if (p[5] != '0') { option_flags |= REPORT_HEIGHT; Message(PARSE_STDIN,"Height reporting on\n",p); } else { option_flags &= ~REPORT_HEIGHT; Message(PARSE_STDIN,"Height reporting off\n"); } break; } goto DEFAULT; case 'O' : /* Offset */ if (*p == 0 && argv[i+1]) p = argv[++i] ; handlepapersize(p, &x_offset_def, &y_offset_def) ; Message(PARSE_STDIN,"Offset: (%d,%d)\n",x_offset_def,y_offset_def); break ; case 'e': if (strncmp(p,"xpand-bbox",10) == 0 ) { if (p[10] != '0') { option_flags |= EXPAND_BBOX; Message(PARSE_STDIN,"BBox expansion on\n",p); } else { option_flags &= ~EXPAND_BBOX; Message(PARSE_STDIN,"BBox expansion off\n"); } break; } goto DEFAULT; case 'T' : if (*p == 0 && argv[i+1]) p = argv[++i]; if (strcmp(p,"bbox")==0) { x_width_def=0; y_width_def=0; Message(PARSE_STDIN,"Pagesize: (bbox)\n"); } else if (strcmp(p,"tight")==0) { x_width_def=-1; y_width_def=-1; Message(PARSE_STDIN,"Pagesize: (tight bbox)\n"); } else { handlepapersize(p, &x_width_def, &y_width_def) ; Message(PARSE_STDIN,"Pagesize: (%d,%d)\n", x_width_def,y_width_def); } break ; case 't': /* specify paper format, only for cropmarks */ #ifdef HAVE_GDIMAGECREATETRUECOLOR /* Truecolor */ if (strncmp(p,"ruecolor",8)==0) { if (p[8] != '0') { option_flags |= FORCE_TRUECOLOR; Message(PARSE_STDIN,"Truecolor mode on\n",p); } else { option_flags &= ~FORCE_TRUECOLOR; Message(PARSE_STDIN,"Truecolor mode off\n"); } } else #endif { /* cropmarks not implemented yet */ if (*p == 0 && argv[i+1]) p = argv[++i] ; if (strcmp(p,"a4")==0) { handlepapersize("210mm,297mm",&x_pwidth,&y_pwidth); } else if (strcmp(p,"letter")==0) { handlepapersize("8.5in,11in",&x_pwidth,&y_pwidth); } else if (strcmp(p,"legal")==0) { handlepapersize("8.5in,14in",&x_pwidth,&y_pwidth); } else if (strcmp(p,"executive")==0) { handlepapersize("7.25in,10.5in",&x_pwidth,&y_pwidth); } else Fatal("papersize %s is not implemented",p); Message(PARSE_STDIN,"Papersize: %s\n",p); } break; /* case 'c': */ /* if (strncmp(p,"acheimages",10)==0) { */ /* if (p[10] != '0') { */ /* option_flags |= CACHE_IMAGES; */ /* Message(PARSE_STDIN,"Caching images\n",p); */ /* } else { */ /* option_flags &= ~CACHE_IMAGES; */ /* Message(PARSE_STDIN,"Not caching images\n"); */ /* } */ /* break; */ /* } */ /* goto DEFAULT; */ case 'b': if ( *p == 'g' ) { /* -bg background color */ p++; if (*p == 0 && argv[i+1]) p = argv[++i] ; if (strncmp(p,"Transparent",11) == 0 ) option_flags |= BG_TRANSPARENT_ALPHA; else if (strncmp(p,"transparent",11) == 0 ) option_flags |= BG_TRANSPARENT; else background(p); if (option_flags & BG_TRANSPARENT) Message(PARSE_STDIN,"Transp. background (fallback rgb %d,%d,%d)\n", cstack[0].red,cstack[0].green,cstack[0].blue); else Message(PARSE_STDIN,"Background: rgb %d,%d,%d\n", cstack[0].red,cstack[0].green,cstack[0].blue); break; } else if (strcmp(p, "dpi")==0) { p+=3; if (*p == 0 && argv[i+1]) p = argv[++i]; number = atoi(p); if (number < 10 || number > 10000) Warning("Bad --bdpi parameter, ignored"); else { user_bdpi=number; Message(PARSE_STDIN,"Bdpi: %d\n",user_bdpi); } break; } else if ( *p == 'd' ) { /* -bd border width */ int tmpi; char* tmps; p++; if (*p == 0 && argv[i+1]) p = argv[++i] ; tmpi = strtol(p, &tmps, 10); if (p 1000000) Warning("Bad magnification parameter (-x or -y), ignored"); else { usermag=number; Message(PARSE_STDIN,"Magstep: %d\n",usermag); /*overridemag = (c == 'x' ? 1 : -1) ;*/ } break ; case 'g' : if (strncmp(p,"amma",4)==0) { /* --gamma correction */ double gamma=0.0; p+=4; if (*p == 0 && argv[i+1]) p = argv[++i]; if (p!=NULL) gamma=atof(p); if (gamma==0.0) { Warning("Bad gamma value, default is %f",DEFAULT_GAMMA); gamma=DEFAULT_GAMMA; } Gamma(gamma); Message(PARSE_STDIN,"Gamma value is %f\n", gamma); break; #ifdef HAVE_GDIMAGEGIF } else if (strncmp(p,"if",2)==0) { /* --gif output */ option_flags |= GIF_OUTPUT; Message(PARSE_STDIN,"GIF output\n"); break; #endif } goto DEFAULT; case 'p' : if (*p == 'p') { /* a -pp specifier for a page list */ ppused=true; p++ ; if (*p == 0 && argv[i+1]) p = argv[++i]; Message(PARSE_STDIN,"Page list: %s\n",p); if (ParsePages(p)) Fatal("bad page list specifier (-pp)"); } else if (strncmp(p,"ng",2)==0) { /* --png output */ option_flags &= ~GIF_OUTPUT; Message(PARSE_STDIN,"PNG output\n"); } else if (strncmp(p,"icky",4)==0) { if (p[4] != '0') { option_flags |= MODE_PICKY; Message(PARSE_STDIN,"No images output for pages with warnings\n",p); } else { option_flags &= ~MODE_PICKY; Message(PARSE_STDIN,"Images output even for pages with warnings\n"); } } else if (strncmp(p,"alette",6)==0) { if (p[6] != '0') { option_flags |= FORCE_PALETTE; Message(PARSE_STDIN,"Forcing 256-color PNG output\n",p); } else { option_flags &= ~FORCE_PALETTE; Message(PARSE_STDIN,"Allows truecolor PNG output\n"); } } else { /* a -p specifier for first page */ int32_t firstpage; bool abspage=false; if (*p == 0 && argv[i+1]) p = argv[++i] ; if (*p == '=') { abspage=true; p++ ; } if ((*p>='0'&&*p<='9') || (*p=='-' && *(p+1)>='0' && *(p+1)<='9')) { firstpage = atoi(p); FirstPage(firstpage,abspage); Message(PARSE_STDIN,"First page: %d\n",firstpage); } else Warning("Bad firstpage (-p) parameter, ignored"); } break ; case 's' : if (strncmp(p,"trict",5)==0) { if (p[5] != '0') { option_flags |= MODE_STRICT; Message(PARSE_STDIN,"Warnings are fatal\n",p); } else { option_flags &= ~MODE_STRICT; Message(PARSE_STDIN,"Warnings are not fatal\n"); } } else goto DEFAULT; break ; case 'n' : if (strncmp(p,"oghostscript",12)==0) { if (p[12] != '0') { option_flags |= NO_GHOSTSCRIPT; Message(PARSE_STDIN,"No GhostScript calls\n",p); } else { option_flags &= ~NO_GHOSTSCRIPT; Message(PARSE_STDIN,"GhostScript calls made\n"); } } else if (strncmp(p,"ogssafer",8)==0) { if (p[8] != '0') { option_flags |= NO_GSSAFER; Message(PARSE_STDIN,"GhostScript calls does not use -dSAFER\n",p); } else { option_flags &= ~NO_GSSAFER; Message(PARSE_STDIN,"GhostScript calls use -dSAFER\n"); } } else if (strncmp(p,"ogs",3)==0) { if (p[3] != '0') { option_flags |= NO_GHOSTSCRIPT; Message(PARSE_STDIN,"No GhostScript calls\n",p); } else { option_flags &= ~NO_GHOSTSCRIPT; Message(PARSE_STDIN,"GhostScript calls made\n"); } } else if (strncmp(p,"orawps",6)==0) { if (p[6] != '0') { option_flags |= NO_RAW_PS; Message(PARSE_STDIN,"Conversion of raw PostScript will not be attempted\n",p); } else { option_flags &= ~NO_RAW_PS; Message(PARSE_STDIN,"Conversion of raw PostScript will be attempted\n",p); } } else goto DEFAULT; break ; case 'l': { int32_t lastpage; bool abspage=false; if (*p == 0 && argv[i+1]) p = argv[++i] ; if (*p == '=') { abspage=true; p++ ; } if ((*p>='0'&&*p<='9') || (*p=='-' && *(p+1)>='0' && *(p+1)<='9')) { lastpage = atoi(p); LastPage(lastpage,abspage); Message(PARSE_STDIN,"Last page: %d\n",lastpage); } else Warning("Bad lastpage (-l) parameter, ignored"); } break ; case 'q': /* quiet operation */ if (*p != '0') option_flags &= (~BE_NONQUIET & ~BE_VERBOSE); else option_flags |= BE_NONQUIET; break; case 'r': /* process pages in reverse order */ if (*p != '0') { Message(PARSE_STDIN,"Reverse order\n"); Reverse(true); } else { Message(PARSE_STDIN,"Normal order\n"); Reverse(false); } break; case 'v': /* verbatim mode */ if (strcmp(p, "ersion")==0) { puts(PACKAGE_STRING); #ifdef HAVE_LIBKPATHSEA puts (KPSEVERSION); #endif #ifdef HAVE_FT2 printf("Compiled with Freetype %d.%d.%d\n", FREETYPE_MAJOR, FREETYPE_MINOR, FREETYPE_PATCH); # ifdef HAVE_FT_LIBRARY_VERSION if (FT_Init_FreeType( &libfreetype )) Warning("the Freetype library seems unusable"); else { FT_Int amajor, aminor, apatch; FT_Library_Version( libfreetype, &amajor, &aminor, &apatch ); printf("Using libft %d.%d.%d\n",amajor, aminor, apatch); FT_Done_FreeType(libfreetype); } # endif #endif puts ("Copyright (C) 2002-2015, 2019 Jan-Ake Larsson.\n\ There is NO warranty. You may redistribute this software\n\ under the terms of the GNU Lesser General Public License\n\ version 3, see the COPYING file in the dvipng distribution\n\ or ."); exit (EXIT_SUCCESS); } if (*p != '0') option_flags |= BE_NONQUIET | BE_VERBOSE; else option_flags &= ~BE_VERBOSE; break; case 'D' : if (*p == 0 && argv[i+1]) p = argv[++i] ; number = atoi(p); if (number < 10 || number > 10000) Warning("Bad resolution (-D) parameter, ignored") ; else { dpi=number; Message(PARSE_STDIN,"Dpi: %d\n",dpi); } break; case 'Q': /* quality (= shrinkfactor) */ if (*p == 0 && argv[i+1]) p = argv[++i]; if (*p>='0'&&*p<='9') { shrinkfactor = atoi(p); Message(PARSE_STDIN,"Quality: %d\n",shrinkfactor); } else { Warning("Non-numeric quality (-Q) value, ignored"); } break; case 'w': if (strncmp(p,"idth",4) == 0 ) { /* Width reporting */ if (p[4] != '0') { option_flags |= REPORT_WIDTH; Message(PARSE_STDIN,"Width reporting on\n",p); } else { option_flags &= ~REPORT_WIDTH; Message(PARSE_STDIN,"Width reporting off\n"); } break; } goto DEFAULT; #ifdef HAVE_GDIMAGEPNGEX case 'z': if (*p == 0 && argv[i+1]) p = argv[++i]; number = atoi(p); if (number<1 || number>9) Warning("Bad compression (-z) value, ignored"); else { compression=number; Message(PARSE_STDIN,"Compression: %d\n",shrinkfactor); } break; #endif case '\0': option_flags |= PARSE_STDIN; break; DEFAULT: default: Warning("%s is not a valid option", argv[i]); } } else { dviname=argv[i]; } } if (dviname != NULL) { if (dvi != NULL && dvi->filep != NULL) DVIClose(dvi); dvi=DVIOpen(dviname,outname); } if (dvi==NULL) { fprintf(stdout,"\nUsage: %s [OPTION]... FILENAME[.dvi]\n", programname); fprintf(stdout,"Options are chosen to be similar to dvips' options where possible:\n"); #ifdef DEBUG fprintf(stdout," -d # Debug (# is the debug bitmap, 1 if not given)\n"); #endif fprintf(stdout," -D # Output resolution\n"); fprintf(stdout," -l # Last page to be output\n"); fprintf(stdout," -o f Output file, '%%d' is pagenumber\n"); fprintf(stdout," -O c Image offset\n"); fprintf(stdout," -p # First page to be output\n"); fprintf(stdout," -pp #,#.. Page list to be output\n"); fprintf(stdout," -q* Quiet operation\n"); fprintf(stdout," -T c Image size (also accepts '-T bbox' and '-T tight')\n"); fprintf(stdout," -v* Verbose operation\n"); fprintf(stdout," - Interactive query of options\n"); fprintf(stdout,"\nThese do not correspond to dvips options:\n"); fprintf(stdout," -bd # Transparent border width in dots\n"); fprintf(stdout," -bd s Transparent border fallback color (TeX-style color)\n"); fprintf(stdout," -bg s Background color (TeX-style color or 'Transparent')\n"); fprintf(stdout," --depth* Output the image depth on stdout\n"); fprintf(stdout," --dvinum* Use TeX page numbers in output filenames\n"); fprintf(stdout," -fg s Foreground color (TeX-style color)\n"); fprintf(stdout," --follow* Wait for data at end-of-file\n"); #ifdef HAVE_FT2 fprintf(stdout," --freetype* FreeType font rendering (preferred, default on)\n"); #endif fprintf(stdout," --gamma # Control color interpolation\n"); #ifdef HAVE_GDIMAGEGIF fprintf(stdout," --gif Output GIF images (dvigif default)\n"); #endif fprintf(stdout," --height* Output the image height on stdout\n"); fprintf(stdout," --nogs* Don't use ghostscript for PostScript specials\n"); fprintf(stdout," --nogssafer* Don't use -dSAFER in ghostscript calls\n"); fprintf(stdout," --norawps* Don't convert raw PostScript specials\n"); #ifdef HAVE_GDIMAGECREATETRUECOLOR fprintf(stdout," --palette* Force palette output\n"); #endif fprintf(stdout," --picky When a warning occurs, don't output image\n"); #ifdef HAVE_GDIMAGEGIF fprintf(stdout," --png Output PNG images (dvipng default)\n"); #endif fprintf(stdout," --strict When a warning occurs, exit\n"); #ifdef HAVE_GDIMAGECREATETRUECOLOR fprintf(stdout," --truecolor* Truecolor output\n"); #endif fprintf(stdout," -Q # Quality (PK subsampling)\n"); fprintf(stdout," --width* Output the image width on stdout\n"); #ifdef HAVE_GDIMAGEPNGEX fprintf(stdout," -z # PNG compression level\n"); #endif fprintf(stdout,"\n # = number f = file s = string * = suffix, '0' to turn off\n"); fprintf(stdout," c = comma-separated dimension pair (e.g., 3.2in,-32.1cm)\n\n"); /*#ifdef HAVE_LIBKPATHSEA { extern DllImport char *kpse_bug_address; putc ('\n', stdout); fputs (kpse_bug_address, stdout); } #endif*/ if ((option_flags & PARSE_STDIN) == 0) { exit(EXIT_SUCCESS); } } if ((option_flags & PARSE_STDIN) == 0 && (!ppused)) ParsePages("-"); return((option_flags & PARSE_STDIN) != 0); } void DecodeString(char *string) { #define PARSEARGS 10 char *strv[PARSEARGS]; int strc=1; strv[0]=NULL; /* No program name */ while (*string==' ' || *string=='\t' || *string=='\r' || *string=='\n') string++; while (*string!='\0') { strv[strc++]=string; if (*string!='\'') { /* Normal split at whitespace */ while (*string!=' ' && *string!='\t' \ && *string!='\n' && *string!='\r' && *string!='\0') string++; } else { /* String delimiter found , so search for next */ strv[strc-1]=++string; while (*string!='\'' && *string!='\0') string++; } if (*string!='\0') *string++='\0'; while (*string==' ' || *string=='\t' || *string=='\r' || *string=='\n') string++; } if (strc>1) /* Nonempty */ (void) DecodeArgs(strc,strv); } uint32_t UNumRead(unsigned char* current, register int n) { uint32_t x = (unsigned char) *(current)++; /* number being constructed */ while(--n) x = (x << 8) | *(current)++; return(x); } int32_t SNumRead(unsigned char* current, register int n) { int32_t x = (signed char) *(current)++; /* number being constructed */ while(--n) x = (x << 8) | *(current)++; return(x); } /**********************************************************************/ /****************************** Fatal *******************************/ /**********************************************************************/ void Fatal (const char *fmt, ...) { va_list args; va_start(args, fmt); fflush(stdout); fprintf(stderr, "\n"); fprintf(stderr, "%s: Fatal error, ", programname); vfprintf(stderr, fmt, args); fprintf(stderr, "\n\n"); va_end(args); ClearFonts(); #ifdef HAVE_FT2 if (libfreetype) (void) FT_Done_FreeType(libfreetype); /* at this point, ignore error */ #endif exit(EXIT_FATAL); } /*-->Warning*/ /**********************************************************************/ /***************************** Warning ******************************/ /**********************************************************************/ void Warning(const char *fmt, ...) { va_list args; va_start(args, fmt); if ( option_flags & BE_NONQUIET ) { fflush(stdout); fprintf(stderr, "%s warning: ", programname); vfprintf(stderr, fmt, args); fprintf(stderr, " "); } va_end(args); } /*-->Message*/ /**********************************************************************/ /***************************** Message ******************************/ /**********************************************************************/ void Message(int activeflags, const char *fmt, ...) { va_list args; va_start(args, fmt); if ( option_flags & activeflags ) { vfprintf(stdout, fmt, args); } va_end(args); } bool MmapFile (char *filename,struct filemmap *fmmap) { #ifndef WIN32 struct stat stat; #endif DEBUG_PRINT(DEBUG_DVI,("\n OPEN FILE:\t'%s'", filename)); fmmap->data=NULL; #ifndef WIN32 if ((fmmap->fd = open(filename,O_RDONLY)) == -1) { Warning("cannot open file <%s>", filename); return(true); } fstat(fmmap->fd,&stat); fmmap->size=stat.st_size; # ifdef HAVE_MMAP fmmap->data = mmap(NULL,fmmap->size, PROT_READ, MAP_SHARED,fmmap->fd,0); if (fmmap->data == (char*)-1) { Warning("cannot mmap file <%s>",filename); fmmap->data=NULL; close(fmmap->fd); return(true); } # else /* HAVE_MMAP */ if ((fmmap->data = malloc(fmmap->size+1)) == NULL) { Warning("cannot malloc space for <%s>",filename); close(fmmap->fd); return(true); } if (read(fmmap->fd,fmmap->data,fmmap->size)size) { Warning("too little data in <%s>",filename); free(fmmap->data); fmmap->data=NULL; close(fmmap->fd); return(true); } close(fmmap->fd); # endif /* HAVE_MMAP */ #else /* WIN32 */ fmmap->hFile = CreateFile(filename, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_FLAG_RANDOM_ACCESS, 0); if (fmmap->hFile == INVALID_HANDLE_VALUE) { Warning("cannot open file <%s>", filename); return(true); } fmmap->size = GetFileSize(fmmap->hFile, 0); fmmap->hMap = CreateFileMapping(fmmap->hFile, 0, PAGE_READONLY, 0, 0, 0); if (fmmap->hMap == 0) { CloseHandle (fmmap->hFile); Warning("cannot CreateFileMapping() file <%s>", filename); return(true); } fmmap->data = MapViewOfFile(fmmap->hMap, FILE_MAP_READ, 0, 0, 0); if (fmmap->data == NULL) { Warning("cannot MapViewOfFile() file <%s>", filename); CloseHandle (fmmap->hMap); CloseHandle (fmmap->hFile); return(true); } #endif /* WIN32 */ return(false); } void UnMmapFile(struct filemmap* fmmap) { if (fmmap->data!=NULL) { #ifndef WIN32 # ifdef HAVE_MMAP if (munmap(fmmap->data,fmmap->size)) Warning("cannot munmap file at 0x%X",fmmap->data); if (close(fmmap->fd)) Warning("cannot close file descriptor %d",fmmap->fd); # else /* HAVE_MMAP */ free(fmmap->data); # endif /* HAVE_MMAP */ #else /* WIN32 */ UnmapViewOfFile (fmmap->data); CloseHandle (fmmap->hMap); CloseHandle (fmmap->hFile); #endif /* WIN32 */ } fmmap->data=NULL; } mkinstalldirs0000775000175000017500000000342114737210011013142 0ustar janla64janla64#! /bin/sh # mkinstalldirs --- make directory hierarchy # Author: Noah Friedman # Created: 1993-05-16 # Public domain # $Id$ errstatus=0 dirmode="" usage="\ Usage: mkinstalldirs [-h] [--help] [-m mode] dir ..." # process command line arguments while test $# -gt 0 ; do case "${1}" in -h | --help | --h* ) # -h for help echo "${usage}" 1>&2; exit 0 ;; -m ) # -m PERM arg shift test $# -eq 0 && { echo "${usage}" 1>&2; exit 1; } dirmode="${1}" shift ;; -- ) shift; break ;; # stop option processing -* ) echo "${usage}" 1>&2; exit 1 ;; # unknown option * ) break ;; # first non-opt arg esac done for file do if test -d "$file"; then shift else break fi done case $# in 0) exit 0 ;; esac case $dirmode in '') if mkdir -p -- . 2>/dev/null; then echo "mkdir -p -- $*" exec mkdir -p -- "$@" fi ;; *) if mkdir -m "$dirmode" -p -- . 2>/dev/null; then echo "mkdir -m $dirmode -p -- $*" exec mkdir -m "$dirmode" -p -- "$@" fi ;; esac for file do set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` shift pathcomp= for d do pathcomp="$pathcomp$d" case "$pathcomp" in -* ) pathcomp=./$pathcomp ;; esac if test ! -d "$pathcomp"; then echo "mkdir $pathcomp" mkdir "$pathcomp" || lasterr=$? if test ! -d "$pathcomp"; then errstatus=$lasterr else if test ! -z "$dirmode"; then echo "chmod $dirmode $pathcomp" lasterr="" chmod "$dirmode" "$pathcomp" || lasterr=$? if test ! -z "$lasterr"; then errstatus=$lasterr fi fi fi fi pathcomp="$pathcomp/" done done exit $errstatus # Local Variables: # mode: shell-script # sh-indentation: 3 # End: # mkinstalldirs ends here papersiz.c0000664000175000017500000000416214737210011012340 0ustar janla64janla64/* papersiz.c */ /************************************************************************ Part of the dvipng distribution This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . Copyright (C) 2002-2010 Jan-Åke Larsson ************************************************************************/ #include "dvipng.h" const char *lengthnames[]={ "sp", "pt", "bp", "dd", "mm", "pc", "cc", "cm", "in" }; const int32_t lengthsp[]={ 1L, 65536L, 65782L, 70124L, 186468L, 786432L, 841489L, 1864680L, 4736286L }; /* * Convert a double[unit], e.g., "3.2cm" or "1.0in" into length in pixels. * Advance the passed pointer as well. */ static int32_t myatodim(const char ** p) { double tmp; /* double accuracy is enough, I think */ int i=0; char *q; tmp = strtod(*p,&q); while (*q == ' ') q++; while (i<8 && (q[0]!=lengthnames[i][0] || q[1]!=lengthnames[i][1])) i++; if (i==8 && (q[0]!=lengthnames[i][0] || q[1]!=lengthnames[i][1])) Warning("unrecognized length unit \"%.2s\", assuming inches",q); while (*q != ',' && *q !='\0') q++; tmp = tmp*lengthsp[i]*dpi/4736286L; /* sp * dots/in / (sp/in), convert sp to pixels */ *p=q; return((int32_t) tmp); } /* * The routine where we handle the paper size special. We need to pass in * the string after the `papersize=' specification. */ void handlepapersize(const char * p, int32_t * x, int32_t * y) { while (*p == ' ') p++ ; *x = myatodim(&p) ; while (*p == ' ' || *p == ',') p++ ; *y = myatodim(&p) ; } pk.c0000664000175000017500000002764014737210011011123 0ustar janla64janla64/* pk.c */ /************************************************************************ Part of the dvipng distribution This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . Copyright (C) 2002-2009, 2019 Jan-Åke Larsson ************************************************************************/ #include "dvipng.h" #define PK_POST 245 #define PK_PRE 247 #define PK_ID 89 unsigned char dyn_f; int repeatcount; int poshalf; static unsigned char getnyb(unsigned char** pos) { if (poshalf == 0) { poshalf=1; return(**pos / 16); } else { poshalf=0; return(*(*pos)++ & 15); } } static uint32_t pk_packed_num(unsigned char** pos) { register int i; uint32_t j; i = (int)getnyb(pos); if (i == 0) { do { j = (uint32_t)getnyb(pos); i++; } while (j == 0); while (i > 0) { j = j * 16 + (uint32_t)getnyb(pos); i--; }; return (j - 15 + (13 - dyn_f) * 16 + dyn_f); } else if (i <= (int)dyn_f) { return ((uint32_t)i); } else if (i < 14) { return ((i-(uint32_t)dyn_f - 1) * 16 + (uint32_t)getnyb(pos) + dyn_f + 1); } else { if (i == 14) { repeatcount = (int)pk_packed_num(pos); } else { repeatcount = 1; } return (pk_packed_num(pos)); /* tail end recursion !! */ } } static unsigned char* skip_specials(unsigned char* pos, unsigned char* end) { uint32_t i; while (pos < end && *pos >= 240 && *pos != PK_POST) { i=0; switch (*pos++) { case 243: i = *pos++; case 242: if (pos >= end) break; i = 256 * i + *pos++; case 241: if (pos >= end) break; i = 256 * i + *pos++; case 240: if (pos >= end) break; i = 256 * i + *pos++; DEBUG_PRINT(DEBUG_PK,("\n PK SPECIAL\t'%.*s' ",(int)i,pos)); pos += i; break; case 244: #ifdef DEBUG { uint32_t c; c=UNumRead(pos,4); DEBUG_PRINT(DEBUG_PK,("\n PK SPECIAL\t%d",c)); } #endif pos += 4; break; case 245: break; case 246: DEBUG_PRINT(DEBUG_PK,("\n PK\tNOP ")); break; case 247: case 248: case 249: case 250: case 251: case 252: case 253: case 254: case 255: Fatal("unexpected PK flagbyte %d", (int)*pos); } } return(pos); } void LoadPK(int32_t c, register struct char_entry * ptr) { unsigned short shrunk_width,shrunk_height; unsigned short width,height; short xoffset,yoffset; unsigned short i_offset,j_offset; int i,j,k,n; int count=0; bool paint_switch; unsigned char *pos,*buffer; DEBUG_PRINT(DEBUG_PK,("\n LOAD PK CHAR\t%d",c)); pos=ptr->pkdata; if ((ptr->flag_byte & 7) == 7) n=4; else if ((ptr->flag_byte & 4) == 4) n=2; else n=1; dyn_f = ptr->flag_byte / 16; paint_switch = ((ptr->flag_byte & 8) != 0); /* * Read character preamble */ if (n != 4) { ptr->tfmw = UNumRead(pos, 3); /* +n: vertical escapement not used */ pos+=3+n; } else { ptr->tfmw = UNumRead(pos, 4); /* +4: horizontal escapement not used */ /* +n: vertical escapement not used */ pos+=8+n; } DEBUG_PRINT(DEBUG_PK,(" %d",ptr->tfmw)); ptr->tfmw = (dviunits) ((int64_t) ptr->tfmw * currentfont->s / 0x100000 ); DEBUG_PRINT(DEBUG_PK,(" (%d)",ptr->tfmw)); width = UNumRead(pos, n); height = UNumRead(pos+=n, n); DEBUG_PRINT(DEBUG_PK,(" %dx%d",width,height)); if (width > 0x7fff || height > 0x7fff) Fatal("character %d too large in file %s", c, currentfont->name); /* * Hotspot issues: Shrinking to the topleft corner rather than the hotspot will displace glyphs a fraction of a pixel. We deal with this in as follows: The glyph is shrunk to its hotspot by offsetting the bitmap somewhat to put the hotspot in the lower left corner of a "shrink square". Shrinking to the topleft corner will then act as shrinking to the hotspot. This may enlarge the bitmap somewhat, of course. (Also remember that the below calculation of i/j_offset is in integer arithmetics.) There will still be a displacement from rounding the dvi position, but vertically it will be equal for all glyphs on a line, so we displace a whole line vertically by fractions of a pixel. This is acceptible, IMHO. Sometime there will be support for subpixel positioning, horizontally. Will do for now, I suppose. */ xoffset = SNumRead(pos+=n, n); i_offset = ( shrinkfactor - xoffset % shrinkfactor ) % shrinkfactor; width += i_offset; ptr->xOffset = xoffset+i_offset; yoffset = SNumRead(pos+=n, n); j_offset = ( shrinkfactor - (yoffset-(shrinkfactor-1)) % shrinkfactor ) % shrinkfactor; height += j_offset; ptr->yOffset = yoffset+j_offset; DEBUG_PRINT(DEBUG_PK,(" (%dx%d)",width,height)); /* Extra marginal so that we do not crop the image when shrinking. */ shrunk_width = (width + shrinkfactor - 1) / shrinkfactor; shrunk_height = (height + shrinkfactor - 1) / shrinkfactor; ptr->w = shrunk_width; ptr->h = shrunk_height; pos+=n; if ((buffer = calloc(shrunk_width*shrunk_height* shrinkfactor*shrinkfactor,sizeof(char)))==NULL) Fatal("cannot allocate space for pk buffer"); DEBUG_PRINT(DEBUG_GLYPH,("\nDRAW GLYPH %d\n", (int)c)); /* Raster char */ if (dyn_f == 14) { /* get raster by bits */ int bitweight = 0; for (j = j_offset; j < (int) height; j++) { /* get all rows */ for (i = i_offset; i < (int) width; i++) { /* get one row */ bitweight /= 2; if (bitweight == 0) { count = *pos++; bitweight = 128; } if (count & bitweight) { buffer[i+j*width]=1; #ifdef DEBUG DEBUG_PRINT(DEBUG_GLYPH,("+")); } else { DEBUG_PRINT(DEBUG_GLYPH,(" ")); #endif } } DEBUG_PRINT(DEBUG_GLYPH,("|\n")); } } else { /* get packed raster */ poshalf=0; repeatcount = 0; for(i=i_offset, j=j_offset; j 0) { if (i+count < width) { if (paint_switch) for(k=0;k0; repeatcount--,j++) { for (i = i_offset; i0) { DEBUG_PRINT(DEBUG_GLYPH,("=")); } else { DEBUG_PRINT(DEBUG_GLYPH,(" ")); } #endif } DEBUG_PRINT(DEBUG_GLYPH,("|\n")); } i=i_offset; } } paint_switch = 1 - paint_switch; } if (i>i_offset) Fatal("wrong number of bits stored: char. %c, font %s", (char)c, currentfont->name); if (j>height) Fatal("bad PK file %s, too many bits", currentfont->name); } /* Shrink raster while doing antialiasing. (See above. The single-glyph output seems better than what xdvi at 300 dpi, shrinkfactor 3 produces.) */ if ((ptr->data = calloc(shrunk_width*shrunk_height,sizeof(char))) == NULL) Fatal("unable to malloc image space for char %c", (char)c); for (j = 0; j < (int) height; j++) { for (i = 0; i < (int) width; i++) { /* if (((i % shrinkfactor) == 0) && ((j % shrinkfactor) == 0)) ptr->data[i/shrinkfactor+j/shrinkfactor*shrunk_width] = buffer[i+j*width]; else */ ptr->data[i/shrinkfactor+j/shrinkfactor*shrunk_width] += buffer[i+j*width]; } } for (j = 0; j < shrunk_height; j++) { for (i = 0; i < shrunk_width; i++) { ptr->data[i+j*shrunk_width] = ptr->data[i+j*shrunk_width] *255/shrinkfactor/shrinkfactor; DEBUG_PRINT(DEBUG_GLYPH,("%3u ",ptr->data[i+j*shrunk_width])); } DEBUG_PRINT(DEBUG_GLYPH,("|\n")); } free(buffer); } void InitPK(struct font_entry * tfontp) { unsigned char* position, *end; struct char_entry *tcharptr; /* temporary char_entry pointer */ uint32_t hppp, vppp, packet_length; uint32_t c; DEBUG_PRINT((DEBUG_DVI|DEBUG_PK),("\n OPEN FONT:\t'%s'", tfontp->name)); Message(BE_VERBOSE,"<%s>", tfontp->name); if (MmapFile(tfontp->name,&(tfontp->fmmap))) Fatal("font file %s unusable", tfontp->name); position=(unsigned char*)tfontp->fmmap.data; if (tfontp->fmmap.size < 3 || tfontp->fmmap.size < 3+*(position+2)+16) Fatal("PK file %s ends prematurely",tfontp->name); if (*position++ != PK_PRE) Fatal("unknown font format in file %s",tfontp->name); if (*position++ != PK_ID) Fatal( "wrong version %d of PK file %s (should be 89)", (int)*(position-1),tfontp->name); DEBUG_PRINT(DEBUG_PK,("\n PK_PRE:\t'%.*s'",(int)*position, position+1)); position += *position + 1; tfontp->designsize = UNumRead(position, 4); DEBUG_PRINT(DEBUG_PK,(" %d", tfontp->designsize)); tfontp->type = FONT_TYPE_PK; c = UNumRead(position+4, 4); DEBUG_PRINT(DEBUG_PK,(" %d", c)); CheckChecksum (tfontp->c, c, tfontp->name); hppp = UNumRead(position+8, 4); vppp = UNumRead(position+12, 4); DEBUG_PRINT(DEBUG_PK,(" %d %d", hppp,vppp)); if (hppp != vppp) Warning("aspect ratio is %d:%d (should be 1:1)", hppp, vppp); tfontp->magnification = (uint32_t)((uint64_t)hppp * 7227 * 5 / 65536l + 50)/100; position+=16; /* Read char definitions */ end=(unsigned char *) tfontp->fmmap.data+tfontp->fmmap.size; position = skip_specials(position,end); while (position < end && *position != PK_POST) { DEBUG_PRINT(DEBUG_PK,("\n @%ld PK CHAR:\t%d", (long)((char *)position - tfontp->fmmap.data), *position)); if ((tcharptr = malloc(sizeof(struct char_entry))) == NULL) Fatal("cannot allocate space for char_entry"); tcharptr->flag_byte = *position; tcharptr->data = NULL; tcharptr->tfmw = 0; if ((*position & 7) == 7) { if (position >= end - 9) Fatal("PK file %s ends prematurely",tfontp->name); packet_length = UNumRead(position+1,4); c = UNumRead(position+5, 4); position += 9; } else if (*position & 4) { if (position >= end - 4) Fatal("PK file %s ends prematurely",tfontp->name); packet_length = (*position & 3) * 65536l + UNumRead(position+1, 2); c = UNumRead(position+3, 1); position += 4; } else { if (position >= end - 3) Fatal("PK file %s ends prematurely",tfontp->name); packet_length = (*position & 3) * 256 + UNumRead(position+1, 1); c = UNumRead(position+2, 1); position += 3; } DEBUG_PRINT(DEBUG_PK,(" %d %d",packet_length,c)); if (c > (LASTFNTCHAR)) Fatal("PK font %s exceeds char numbering limit",tfontp->name); tcharptr->length = packet_length; tcharptr->pkdata = position; tfontp->chr[c]=tcharptr; position += packet_length; position = skip_specials(position, end); } if (position >= end) Fatal("PK file %s ends prematurely",tfontp->name); } static void UnLoadPK(struct char_entry *ptr) { if (ptr->data!=NULL) free(ptr->data); ptr->data=NULL; } void DonePK(struct font_entry *tfontp) { int c=FIRSTFNTCHAR; UnMmapFile(&(tfontp->fmmap)); while(c<=LASTFNTCHAR) { if (tfontp->chr[c]!=NULL) { UnLoadPK((struct char_entry*)tfontp->chr[c]); free(tfontp->chr[c]); } c++; } if (tfontp->name!=NULL) free(tfontp->name); tfontp->name=NULL; } ppagelist.c0000664000175000017500000001301414737210011012467 0ustar janla64janla64/* ppagelist.c */ /************************************************************************ Part of the dvipng distribution This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . Copyright (C) 2002-2010 Jan-Åke Larsson ************************************************************************/ #include "dvipng.h" /* Some code at the end of this file is adapted from dvips */ static int32_t first=PAGE_FIRSTPAGE, last=PAGE_LASTPAGE; static bool abspage=false, reverse=false; bool no_ppage=true; /* dvips' behaviour: * -pp outputs _all_ pages with the correct numbers, * -p, -l outputs from the first occurrence of firstpage to the first * occurrence of lastpage. Using '=' means absolute pagenumbers */ void FirstPage(int32_t page, bool data) { first=page; abspage |= data; } void LastPage(int32_t page,bool data) { last=page; abspage |= data; } void Reverse(bool new) { reverse=new; } /*-->NextPPage*/ /**********************************************************************/ /**************************** NextPPage *****************************/ /**********************************************************************/ /* Return the page in turn on our queue */ /* (Implicitly, PAGE_POST is never in the pagelist) */ bool InPageList(int32_t i); struct page_list* NextPPage(void* dvi, struct page_list* page) { if (! reverse) { /*********** normal order */ if (page == NULL) { /* first call: find first page */ if (no_ppage) return(NULL); page=FindPage(dvi,first,abspage); } else /* later calls: count up, except "last" page */ page=(last==page->count[abspage ? 0 : 10]) ? NULL : NextPage(dvi,page); /* seek for pages in pagelist */ while (page!=NULL && ! InPageList(page->count[0])) page=(last==page->count[abspage ? 0 : 10]) ? NULL : NextPage(dvi,page); } else { /******************** reverse order */ if (page == NULL) { /* first call: find "last" page */ if (no_ppage) return(NULL); page=FindPage(dvi,last,abspage); } else /* later calls: count down, except "first" page */ page=(first==page->count[abspage ? 0 : 10]) ? NULL : PrevPage(dvi,page); /* seek for pages in pagelist */ while (page!=NULL && ! InPageList(page->count[0])) page=(first==page->count[abspage ? 0 : 10]) ? NULL : PrevPage(dvi,page); } return(page); } struct pp_list { struct pp_list *next; /* next in a series of alternates */ int32_t ps_low, ps_high; /* allowed range */ } *ppages = 0; /* the list of allowed pages */ /*-->InPageList*/ /**********************************************************************/ /****************************** InPageList **************************/ /**********************************************************************/ /* Return true iff i is one of the desired output pages */ bool InPageList(int32_t i) { register struct pp_list *pl = ppages; while (pl) { if ( i >= pl -> ps_low && i <= pl -> ps_high) return(true); /* success */ pl = pl -> next; } return(false); } static void ListPage(int32_t pslow, int32_t pshigh) { register struct pp_list *pl; /* Some added code, we want to reuse the list */ no_ppage=false; pl = ppages; while (pl != NULL && pl->ps_low <= pl->ps_high) pl = pl->next; if (pl == NULL) { if ((pl = (struct pp_list *)malloc(sizeof(struct pp_list))) ==NULL) Fatal("cannot malloc memory for page queue"); pl -> next = ppages; ppages = pl; } pl -> ps_low = pslow; pl -> ps_high = pshigh; } /* Parse a string representing a list of pages. Return 0 iff ok. As a side effect, the page selection(s) is (are) prepended to ppages. */ bool ParsePages(const char *s) { const char *c; /* conversion start */ char *t; long int ps_low = PAGE_MINPAGE, ps_high = PAGE_MAXPAGE; while (*s==' ' || *s=='\t') s++; while (*s!='\0') { if (*s=='-' || *s==':') { /* range with no starting value */ ps_low = PAGE_MINPAGE; c=s+1; ps_high = strtol(c,&t,10); s = t; if (c==s) ps_high=PAGE_MAXPAGE; /* no number */ while (*s==' ' || *s=='\t') s++; if (*s=='-' || *s==':') { /* Oh, range with negative starting value */ ps_low = -ps_high; c=s+1; ps_high = strtol(c,&t,10); s = t; if (c==s) ps_high=PAGE_MAXPAGE; /* no number */ } } else { /* range with starting value, or singleton */ c=s; ps_low = ps_high = strtol(c,&t,10); s = t; if (c==s) return(true); if (*s=='-' || *s==':') { /* range */ c=s+1; ps_high = strtol(c,&t,10); s = t; if (c==s) ps_high=PAGE_MAXPAGE; /* no number */ } } ListPage(ps_low, ps_high); while (*s==' ' || *s=='\t' || *s==',') s++; } return(false); } /* Addition, we want to be able to clear the pplist */ void ClearPpList(void) { register struct pp_list *pl = ppages; while (pl) { ppages=ppages->next; free(pl); pl = ppages; } first=PAGE_FIRSTPAGE; last=PAGE_LASTPAGE; abspage = false; no_ppage=true; } README0000664000175000017500000000750514747712246011245 0ustar janla64janla64dvipng ****** This program makes PNG and/or GIF graphics from DVI files as obtained from TeX and its relatives. If GIF support is enabled, GIF output is chosen by using the ‘dvigif’ binary or with the ‘--gif’ option. It is intended to produce anti-aliased screen-resolution images as fast as is possible. The target audience is people who need to generate and regenerate many images again and again. The primary target is the preview-latex (X)Emacs package, a package to preview formulas from within (X)Emacs. Yes, you get to see your formulas in the (X)Emacs buffer, see . It is also used in MediaWiki, the software behind Wikipedia and many other wikis out there. Dvipng is used to render mathematical formulae (in image mode) from version 1.8.0 of MediaWiki, see . Other applications may also benefit, like web applications as latex2html and WYSIWYG editors like LyX. Benefits of dvipng ================== The benefits of ‘dvipng’/‘dvigif’ include • Speed. It is a very fast bitmap-rendering code for DVI files, which makes it suitable for generating large amounts of images on-the-fly, as needed in preview-latex, WeBWorK and others. • It does not read the postamble, so it can be started before TeX finishes. There is a ‘--follow’ switch that makes dvipng wait at end-of-file for further output, unless it finds the POST marker that indicates the end of the DVI. • Interactive query of options. dvipng can read options interactively through stdin, and all options are usable. It is even possible to change the input file through this interface. • Supports PK, VF, PostScript Type1, and TrueType fonts, subfonts (i.e., as used in CJK-LaTeX), color specials, and inclusion of PostScript, PNG, JPEG or GIF images. • and more... Installation ============ Read ‘INSTALL’, included in the distribution. Usage ===== To use dvipng at its simplest, simply type dvipng foo where ‘foo.dvi’ is the output of TeX that you want to convert to PNG format. If there are four pages in ‘foo.dvi’, those pages will be output as ‘foo1.png’, ‘foo2.png’, ‘foo3.png’, and ‘foo4.png’, respectively. Many options are available (see the info manual). For a brief summary of available options, just type dvipng --help Availability ============ The dvipng package is available at Savannah, the GNU project site. Since dvipng is not part of the GNU project, although released under the GNU GPL, the web address is . Instructions for anonymous CVS access can be found at . Contacts ======== Bug reports should be sent to . Questions, suggestions for new features, pleas for help, and/or praise should go to . For more information on this mailing list, send a message with just the word 'help' as subject or body to or look at . Offers to support further development will be appreciated. For developer access, ask on . Copying ======= This program is released under the GNU Lesser General Public License version 3, see the COPYING file in the dvipng distribution or . Copyright © 2002-2014 Jan-Ã…ke Larsson Todo ==== • Use gs interpreter library for speed and possibly for functionality. • Add more color models for xcolor compatibility • Enable a named pipe as DVI • Further speed improvements. • Other output specials and source specials. • Clean internal structures. Overhaul file handling. • Fix the SELFAUTO stuff at runtime rather than at build time readme.texi0000664000175000017500000001021614737210011012464 0ustar janla64janla64@c readme.texi @c @c Part of the dvipng distribution @ifclear man @include macros.texi @ifset rawfile @chapter dvipng @end ifset @end ifclear @c ----------------------- This program makes PNG and/or GIF graphics from DVI files as obtained from @TeX{} and its relatives. If GIF support is enabled, GIF output is chosen by using the @samp{dvigif} binary or with the @samp{--gif} option. @ifclear man It is intended to produce anti-aliased screen-resolution images as fast as is possible. The target audience is people who need to generate and regenerate many images again and again. The primary target is the @previewlatex{} (X)Emacs package, a package to preview formulas from within (X)Emacs. Yes, you get to see your formulas in the (X)Emacs buffer, see @url{http://www.gnu.org/software/auctex/preview-latex.html}. It is also used in MediaWiki, the software behind Wikipedia and many other wikis out there. Dvipng is used to render mathematical formulae (in image mode) from version 1.8.0 of MediaWiki, see @url{http://www.mediawiki.org}. Other applications may also benefit, like web applications as latex2html and WYSIWYG editors like LyX. @ifset rawfile @section Benefits of dvipng @end ifset @end ifclear The benefits of @samp{dvipng}/@samp{dvigif} include @itemize @bullet @item Speed. It is a very fast bitmap-rendering code for DVI files, which makes it suitable for generating large amounts of images on-the-fly, as needed in @previewlatex{}, WeBWorK and others. @item It does not read the postamble, so it can be started before @TeX{} finishes. There is a @samp{--follow} switch that makes dvipng wait at end-of-file for further output, unless it finds the POST marker that indicates the end of the DVI. @item Interactive query of options. dvipng can read options interactively through stdin, and all options are usable. It is even possible to change the input file through this interface. @item Supports PK, VF, PostScript Type1, and TrueType fonts, subfonts (i.e., as used in CJK-@LaTeX{}), color specials, and inclusion of PostScript, PNG, JPEG or GIF images. @item and more... @end itemize @ifset rawfile @section Installation Read @file{INSTALL}, included in the distribution. @section Usage To use dvipng at its simplest, simply type @example dvipng foo @end example @noindent where @file{foo.dvi} is the output of @TeX{} that you want to convert to PNG format. If there are four pages in @file{foo.dvi}, those pages will be output as @file{foo1.png}, @file{foo2.png}, @file{foo3.png}, and @file{foo4.png}, respectively. Many options are available (see the info manual). For a brief summary of available options, just type @example dvipng --help @end example @section Availability The dvipng package is available at Savannah, the GNU project site. Since dvipng is not part of the GNU project, although released under the GNU GPL, the web address is @url{http://savannah.nongnu.org/projects/dvipng}. Instructions for anonymous CVS access can be found at @url{http://savannah.nongnu.org/cvs/?group=dvipng}. @section Contacts Bug reports should be sent to @email{dvipng@@nongnu.org}. Questions, suggestions for new features, pleas for help, and/or praise should go to @email{dvipng@@nongnu.org}. For more information on this mailing list, send a message with just the word `help' as subject or body to @email{dvipng-request@@nongnu.org} or look at @url{http://lists.nongnu.org/mailman/listinfo/dvipng}. Offers to support further development will be appreciated. For developer access, ask on @email{dvipng@@nongnu.org}. @section Copying This program is released under the GNU Lesser General Public License version 3, see the COPYING file in the dvipng distribution or @url{http://www.gnu.org/licenses/}. Copyright @copyright{} 2002-2014 Jan-@AA{}ke Larsson @section Todo @itemize @bullet @item Use gs interpreter library for speed and possibly for functionality. @item Add more color models for xcolor compatibility @item Enable a named pipe as DVI @item Further speed improvements. @item Other output specials and source specials. @item Clean internal structures. Overhaul file handling. @item Fix the SELFAUTO stuff at runtime rather than at build time @end itemize @end ifset RELEASE0000664000175000017500000000057514747705242011366 0ustar janla64janla64Release notes for version 1.18 of the dvipng package: This program makes PNG graphics from DVI files as obtained from TeX and its relatives. This is a bugfix release that removes division-by-zero errors from faulty DVI, avoids unneeded GhostScript calls, and gives more informative error messages for missing image files Report any bugs you find, see README for instructions. set.c0000664000175000017500000002261514750476326011323 0ustar janla64janla64/* set.c */ /************************************************************************ Part of the dvipng distribution This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . Copyright (C) 2002-2015 Jan-Åke Larsson ************************************************************************/ #include "dvipng.h" #include #ifndef HAVE_GDIMAGECREATETRUECOLOR #define gdImageColorAllocateAlpha(i,r,g,b,a) gdImageColorAllocate(i,r,g,b) #define gdImageColorResolveAlpha(i,r,g,b,a) gdImageColorResolve(i,r,g,b) #define gdImageAlpha(i,c) 0 #define gdAlphaMax 127 #endif #ifndef HAVE_GDIMAGEPNGEX #define gdImagePngEx(i,f,z) gdImagePng(i,f) #endif /* Persistent color cache. Index is ink thickness, 0=no ink, 127=total coverage */ static int ColorCache[gdAlphaMax+1]; void CreateImage(pixels x_width,pixels y_width) { if (page_imagep) gdImageDestroy(page_imagep); if (x_width <= 0) x_width=1; if (y_width <= 0) y_width=1; #ifdef HAVE_GDIMAGECREATETRUECOLOR /* GIFs are 256-color */ if ((option_flags & FORCE_TRUECOLOR || page_flags & PAGE_TRUECOLOR) && ~option_flags & GIF_OUTPUT && ~option_flags & FORCE_PALETTE) page_imagep=gdImageCreateTrueColor(x_width,y_width); else #endif page_imagep=gdImageCreate(x_width,y_width); /* Set bg color. GIFs cannot handle an alpha channel, resort to transparent color index, set in WriteImage */ if (!page_imagep) Fatal("cannot allocate GD image for DVI"); ColorCache[0] = gdImageColorAllocateAlpha(page_imagep, cstack[0].red, cstack[0].green, cstack[0].blue, (option_flags & BG_TRANSPARENT_ALPHA && ~option_flags & GIF_OUTPUT) ? 127 : 0); ColorCache[gdAlphaMax]=-1; #ifdef HAVE_GDIMAGECREATETRUECOLOR /* Alpha blending in libgd is only performed for truecolor images. We need it for palette images also. Turn libgd alpha blending off and calculate color blending where needed. We turn it back on briefly for image inclusion. */ gdImageAlphaBlending(page_imagep, 0); if (option_flags & BG_TRANSPARENT_ALPHA) gdImageSaveAlpha(page_imagep, 1); if (page_imagep->trueColor) /* Truecolor: there is no background color index, fill image instead. */ gdImageFilledRectangle(page_imagep, 0, 0, x_width-1, y_width-1, ColorCache[0]); #endif } static void ChangeColor(gdImagePtr imagep,int x1,int y1, int x2,int y2,int color1,int color2) /* In the given rectangle, change color1 to color2 */ { int x,y; for( y=y1; y<=y2; y++) { for( x=x1; x<=x2; x++) { if (gdImageGetPixel(imagep, x, y)==color1) gdImageSetPixel(imagep, x, y, color2); } } } void WriteImage(char *pngname, int pagenum) { char* pos, *freeme=NULL; FILE* outfp=NULL; /* Set transparent background. Maybe alpha is not available or perhaps we are producing GIFs, so test for BG_TRANSPARENT_ALPHA too */ if (option_flags & (BG_TRANSPARENT|BG_TRANSPARENT_ALPHA)) gdImageColorTransparent(page_imagep,ColorCache[0]); /* Transparent border */ if (borderwidth>0) { int Transparent; pixels x_width,y_width; x_width=gdImageSX(page_imagep); y_width=gdImageSY(page_imagep); /* Set ANOTHER bg color, transparent this time */ /* No semi-transparency here, given the motivation for this code * (box cursor visibility in Emacs) */ if (userbordercolor) Transparent = gdImageColorAllocate(page_imagep, bordercolor.red, bordercolor.green, bordercolor.blue); else Transparent = gdImageColorAllocate(page_imagep, gdImageRed(page_imagep,ColorCache[0]), gdImageGreen(page_imagep,ColorCache[0]), gdImageBlue(page_imagep,ColorCache[0])); gdImageColorTransparent(page_imagep,Transparent); ChangeColor(page_imagep,0,0,x_width-1,borderwidth-1, ColorCache[0],Transparent); ChangeColor(page_imagep,0,0,borderwidth-1,y_width-1, ColorCache[0],Transparent); ChangeColor(page_imagep,x_width-borderwidth,0,x_width-1,y_width-1, ColorCache[0],Transparent); ChangeColor(page_imagep,0,y_width-borderwidth,x_width-1,y_width-1, ColorCache[0],Transparent); } if ((pos=strchr(pngname,'%')) != NULL) { if (strchr(++pos,'%')) Fatal("too many %%s in output file name"); if (*pos == 'd' || (*pos=='0' && pos[1]>='1' && pos[1]<='9' && pos[2]=='d')) { /* %d -> pagenumber, so add 9 string positions since pagenumber max +-2^31 or +-2*10^9 */ if ((freeme = malloc(strlen(pngname)+9))==NULL) Fatal("cannot allocate memory for output file name"); sprintf(freeme,pngname,pagenum); pngname = freeme; } else { Fatal("unacceptable format spec in output file name"); } } #ifdef HAVE_GDIMAGEGIF if (option_flags & GIF_OUTPUT && (pos=strrchr(pngname,'.')) != NULL && strcmp(pos,".png")==0) { *(pos+1)='g'; *(pos+2)='i'; *(pos+3)='f'; } #endif if ((outfp = fopen(pngname,"wb")) == NULL) Fatal("cannot open output file %s",pngname); #ifdef HAVE_GDIMAGEGIF if (option_flags & GIF_OUTPUT) gdImageGif(page_imagep,outfp); else #endif gdImagePngEx(page_imagep,outfp,compression); fclose(outfp); DEBUG_PRINT(DEBUG_DVI,("\n WROTE: \t%s\n",pngname)); if (freeme) free(freeme); DestroyImage(); } void DestroyImage(void) { gdImageDestroy(page_imagep); page_imagep=NULL; } static int gammatable[]= {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19, 20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39, 40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59, 60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79, 80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99, 100,101,102,103,104,105,106,107,108,109, 110,111,112,113,114,115,116,117,118,119, 120,121,122,123,124,125,126,127}; void Gamma(double gamma) { int i=0; while (i<=gdAlphaMax) { gammatable[i]=gdAlphaMax- (int)(pow((gdAlphaMax-i)/((double)gdAlphaMax),gamma)*gdAlphaMax); DEBUG_PRINT(DEBUG_GLYPH, ("\n GAMMA GREYSCALE: %d -> %d ",i,gammatable[i])); i++; } } dviunits SetGlyph(struct char_entry *ptr, int32_t hh,int32_t vv) /* gdImageChar can only do monochrome glyphs */ { int dst_alpha,dst_weight,tot_weight,alpha; int x,y,pos=0; int bgColor,pixelgrey,pixelcolor; hh -= ptr->xOffset/shrinkfactor; vv -= ptr->yOffset/shrinkfactor; /* Initialize persistent color cache. Perhaps this should be in color.c? */ pixelcolor=gdImageColorResolve(page_imagep, cstack[csp].red, cstack[csp].green, cstack[csp].blue); if (ColorCache[gdAlphaMax]!=pixelcolor) { for( x=1; xh; y++) { for( x=0; xw; x++) { if (ptr->data[pos]>0) { pixelgrey=gammatable[(int)ptr->data[pos]/2]; bgColor = gdImageGetPixel(page_imagep, hh + x, vv + y); if (ColorCache[0]!=bgColor || ColorCache[pixelgrey]==-1) { DEBUG_PRINT(DEBUG_GLYPH,("\n GAMMA GREYSCALE: %d -> %d ", ptr->data[pos]/2,pixelgrey)); alpha = gdAlphaMax-pixelgrey; dst_alpha = gdImageAlpha(page_imagep,bgColor); dst_weight = (gdAlphaMax - dst_alpha) * alpha / gdAlphaMax; tot_weight = pixelgrey + dst_weight; pixelcolor = gdImageColorResolveAlpha(page_imagep, (cstack[csp].red*pixelgrey + gdImageRed(page_imagep,bgColor)*dst_weight)/tot_weight, (cstack[csp].green*pixelgrey + gdImageGreen(page_imagep,bgColor)*dst_weight)/tot_weight, (cstack[csp].blue*pixelgrey + gdImageBlue(page_imagep,bgColor)*dst_weight)/tot_weight, alpha*dst_alpha/gdAlphaMax); if (ColorCache[0]==bgColor) ColorCache[pixelgrey]=pixelcolor; } else pixelcolor=ColorCache[pixelgrey]; gdImageSetPixel(page_imagep, hh + x, vv + y, pixelcolor); } pos++; } } return(ptr->tfmw); } dviunits SetRule(dviunits a, dviunits b, subpixels hh,subpixels vv) { /* This routine will draw a \rule */ int Color; pixels width=0, height=0; if ( a > 0 && b > 0 ) { /* Calculate width and height, round up */ width = (b+dvi->conv*shrinkfactor-1)/dvi->conv/shrinkfactor; height = (a+dvi->conv*shrinkfactor-1)/dvi->conv/shrinkfactor; } if (page_imagep != NULL) { if ((height>0) && (width>0)) { /* This code produces too dark rules. But what the hell. Grey * rules look fuzzy. */ Color = gdImageColorResolve(page_imagep, cstack[csp].red, cstack[csp].green, cstack[csp].blue); /* +1 and -1 are because the Rectangle coords include last pixels */ gdImageFilledRectangle(page_imagep,hh,vv-height+1,hh+width-1,vv,Color); DEBUG_PRINT(DEBUG_DVI,("\n RULE \t%dx%d at (%d,%d)", width, height, hh, vv)); } } else { /* The +1's are because things are cut _at_that_coordinate_. */ min(x_min,hh); min(y_min,vv-height+1); max(x_max,hh+width); max(y_max,vv+1); } return(b); } sfd.c0000664000175000017500000001265114737210011011261 0ustar janla64janla64/* sfd.c */ /************************************************************************ Part of the dvipng distribution This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . Copyright (C) 2002-2008 Jan-Åke Larsson ************************************************************************/ #include "dvipng.h" struct subfont* subfontp=NULL; static struct subfont* ReadSubfont(char* sfdname, char *infix) { char *pos,*max,*sfdfile=NULL; struct subfont* sfdp=NULL; struct filemmap fmmap; boolean mmapfailed; /* OK, find subfont and look for correct infix */ #ifdef HAVE_KPSE_ENC_FORMATS sfdfile=kpse_find_file(sfdname,kpse_sfd_format,false); #endif if (sfdfile == NULL) { Warning("subfont file %s could not be found",sfdname); return(NULL); } DEBUG_PRINT((DEBUG_FT|DEBUG_ENC),("\n OPEN SUBFONT:\t'%s'", sfdfile)); mmapfailed = MmapFile(sfdfile,&fmmap); free(sfdfile); if (mmapfailed) return(NULL); pos=fmmap.data; max=fmmap.data+fmmap.size; while(posname=(char*)sfdp+sizeof(struct subfont); strcpy(sfdp->name,sfdname); sfdp->infix=(char*)sfdp+sizeof(struct subfont)+strlen(sfdname)+1; strcpy(sfdp->infix,infix); sfdp->encoding=FT_ENCODING_UNICODE; while (poscharindex[codepoint]=number; DEBUG_PRINT(DEBUG_ENC,("\n SUBFONT MAP %d %d",codepoint,number)); number++; codepoint++; } default: if (codepoint<256) sfdp->charindex[codepoint]=number; DEBUG_PRINT(DEBUG_ENC,("\n SUBFONT MAP %d %d",codepoint,number)); } while(postfmname,*sfdwant=fontname, *sfdname,*infix,*postfix; while (*sfdspec!='\0' && *sfdspec==*sfdwant) { sfdspec++; sfdwant++; } /* Find delimiter */ if (*sfdspec!='@') return(NULL); sfdspec++; postfix=sfdspec; while (*postfix!='\0' && *postfix!='@') postfix++; if (*postfix!='@') return(NULL); /* Extract subfont name */ if ((sfdname=malloc(postfix-sfdspec+1))==NULL) Fatal("cannot allocate memory for subfont name"); strncpy(sfdname,sfdspec,postfix-sfdspec); sfdname[postfix-sfdspec]='\0'; /* Check postfix */ postfix++; if (strcmp(sfdwant+strlen(sfdwant)-strlen(postfix),postfix)!=0) return(NULL); /* Extract infix */ if ((infix=malloc(strlen(sfdwant)-strlen(postfix)+1))==NULL) Fatal("cannot allocate memory for subfont infix"); strncpy(infix,sfdwant,strlen(sfdwant)-strlen(postfix)); infix[strlen(sfdwant)-strlen(postfix)]='\0'; DEBUG_PRINT(DEBUG_ENC,("\n SUBFONT %s %s %s",fontname,sfdname,infix)); /* Find subfont */ while(temp!=NULL && (strcmp(sfdname,temp->name)!=0 || strcmp(infix,temp->infix)!=0)) temp=temp->next; if (temp==NULL) { temp=ReadSubfont(sfdname,infix); if (temp!=NULL) { temp->next=subfontp; subfontp=temp; } } entry=NewPSFont(entry); if (entry!=NULL) { entry->tfmname=copyword(fontname); entry->subfont=temp; } free(infix); free(sfdname); return(entry); } void ClearSubfont(void) { struct subfont *temp=subfontp; while(temp!=NULL) { subfontp=subfontp->next; free(temp); temp=subfontp; } } special.c0000664000175000017500000007215714747703542012155 0ustar janla64janla64/* special.c */ /************************************************************************ Part of the dvipng distribution This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . Copyright (C) 2002-2015, 2021, 2025 Jan-Åke Larsson ************************************************************************/ #include "dvipng.h" #ifndef MIKTEX #ifndef WIN32 #include #else /* WIN32 */ #include #include #include #ifndef pipe #define pipe(p) _pipe(p, 65536, O_BINARY | _O_NOINHERIT) #endif #ifndef snprintf #define snprintf _snprintf #endif #endif /* WIN32 */ #endif #define SKIPSPACES(s) while(s && *s==' ' && *s!='\0') s++ /* PostScript can come as a string (headers and raw specials) or a memory-mapped file (headers and included EPS figures). */ struct pscode { struct pscode* next; char* special; /* complete special */ const char* code; /* PS string, null if a file */ char* filename; /* file name, null if a string */ const char* postcode; /* post PS string */ struct filemmap fmmap; /* file mmap */ }; struct pscode* psheaderp=NULL; /* static, DVI-specific header list */ static void PSCodeInit(struct pscode *entry, char *special) { entry->next=NULL; entry->special=special; entry->code=NULL; entry->filename=NULL; entry->postcode=NULL; entry->fmmap.data=NULL; if (special==NULL) return; if (strncmp(special,"header=",7)==0) entry->filename=special+7; else if (strncmp(special,"ps:: plotfile ",14)==0) entry->filename=special+14; else if (special[0]=='"' || special[0]=='!') entry->code=special+1; else if (strncmp(special,"ps::[begin]",11)==0) entry->code=special+11; else if (strncmp(special,"ps::[end]",9)==0) entry->code=special+9; else if (strncmp(special,"ps::",4)==0) entry->code=special+4; else if (strncmp(special,"ps:",3)==0) entry->code=special+3; else entry->code=special; #ifdef DEBUG if (entry->code!=NULL) DEBUG_PRINT(DEBUG_GS,(" '%s'",entry->code)); if (entry->filename!=NULL) DEBUG_PRINT(DEBUG_GS,(" {%s}",entry->filename)); if (entry->postcode!=NULL) DEBUG_PRINT(DEBUG_GS,(" '%s'",entry->postcode)); #endif } void ClearPSHeaders(void) { struct pscode *temp=psheaderp; while(temp!=NULL) { psheaderp=psheaderp->next; if (temp->fmmap.data!=NULL) UnMmapFile(&(temp->fmmap)); free(temp); temp=psheaderp; } } static void writepscode(FILE* psstream,struct pscode* pscodep) { while (pscodep!=NULL) { if (pscodep->code!=NULL) { fputs(pscodep->code,psstream); putc('\n',psstream); DEBUG_PRINT(DEBUG_GS,("\n PS CODE:\t%s",pscodep->code)); } if (pscodep->filename!=NULL && pscodep->fmmap.data==NULL) { char* filepath= kpse_find_file(pscodep->filename,kpse_tex_ps_header_format,false); if (filepath==NULL) { Warning("Cannot find PostScript file %s, ignored", pscodep->filename); page_flags |= PAGE_GAVE_WARN; } else if (MmapFile(filepath,&(pscodep->fmmap))) { Warning("PostScript file %s unusable, ignored", pscodep->filename); page_flags |= PAGE_GAVE_WARN; } } if (pscodep->fmmap.data!=NULL) { unsigned char* position; DEBUG_PRINT(DEBUG_GS,("\n PS FILE:\t%s",pscodep->filename)); position=(unsigned char*)pscodep->fmmap.data; while(position < (unsigned char*)pscodep->fmmap.data + pscodep->fmmap.size) { putc(*position,psstream); position++; } } if (pscodep->postcode!=NULL) { fputs(pscodep->postcode,psstream); putc('\n',psstream); DEBUG_PRINT(DEBUG_GS,("\n PS POST CODE:\t%s",pscodep->postcode)); } pscodep=pscodep->next; } } static bool psisnotjustcomments(struct pscode* pscodep) { while (pscodep!=NULL) { if (pscodep->code!=NULL) { const char* pos=pscodep->code; while (*pos!='\0') { while (*pos==' ' || *pos=='\t' || *pos=='\n' || *pos=='\r') pos++; /* skip whitespace */ if (*pos=='%') { while(*pos!='\0' && *pos!='\r' && *pos!='\n') pos++; /* skip comment */ } else if (*pos=='/' && *(pos+1)=='*') { pos+=2; while(*pos!='\0' && *pos!='*' && *(pos+1)!='/') pos++; /* skip comment */ } else if (*pos!='\0') return(true); } } if (pscodep->filename!=NULL) return(true); if (pscodep->fmmap.data!=NULL) return(true); if (pscodep->postcode!=NULL) return(true); pscodep=pscodep->next; } return(false); } static gdImagePtr ps2png(struct pscode* pscodep, const char *device, int hresolution, int vresolution, int llx, int lly, int urx, int ury, int bgred, int bggreen, int bgblue) { int pspipe[2], pngpipe[2]; #define READ_END 0 #define WRITE_END 1 FILE *psstream=NULL, *pngstream=NULL; char resolution[STRSIZE]; /* char devicesize[STRSIZE]; */ gdImagePtr psimage=NULL; #ifndef MIKTEX #ifndef WIN32 pid_t pid; #else /* WIN32 */ unsigned long nexitcode = STILL_ACTIVE; HANDLE hchild; int savestdin, savestdout; #endif /* WIN32 */ #else /* MIKTEX */ HANDLE hPngStream; HANDLE hPsStream; HANDLE hStdErr; PROCESS_INFORMATION pi; _TCHAR szCommandLine[2048]; _TCHAR szGsPath[_MAX_PATH]; #define GS_PATH szGsPath #define fdopen _tfdopen #define close _close #endif /* MIKTEX */ snprintf(resolution,STRSIZE,"-r%dx%d",hresolution,vresolution); /* Future extension for \rotatebox status=sprintf(devicesize, "-g%dx%d", //(int)((sin(atan(1.0))+1)* (urx - llx)*hresolution/72,//), //(int)((sin(atan(1.0))+1)* (ury - lly)*vresolution/72);//); */ DEBUG_PRINT(DEBUG_GS, ("\n GS CALL:\t%s %s %s %s %s %s %s %s %s %s %s",/* %s", */ GS_PATH, device, resolution, /*devicesize,*/ "-dBATCH", "-dNOPAUSE", "-q", "-sOutputFile=-", "-dTextAlphaBits=4", "-dGraphicsAlphaBits=4", (option_flags & NO_GSSAFER) ? "-": "-dSAFER", (option_flags & NO_GSSAFER) ? "": "- ")); #ifndef MIKTEX if (pipe(pspipe) || pipe(pngpipe)) return(NULL); #ifndef WIN32 /* We have fork: execute gs in child */ pid = fork(); if (pid == 0) { /* Child, execute gs. */ close(pspipe[WRITE_END]); dup2(pspipe[READ_END], STDIN_FILENO); close(pspipe[READ_END]); close(pngpipe[READ_END]); dup2(pngpipe[WRITE_END], STDOUT_FILENO); close(pngpipe[WRITE_END]); execlp(GS_PATH, GS_PATH, device, resolution, /*devicesize,*/ "-dBATCH", "-dNOPAUSE", "-q", "-sOutputFile=-", "-dTextAlphaBits=4", "-dGraphicsAlphaBits=4", (option_flags & NO_GSSAFER) ? "-": "-dSAFER", (option_flags & NO_GSSAFER) ? NULL: "-", NULL); _exit (EXIT_FAILURE); } #else /* WIN32 */ /* No fork but spawn: execute gs in present process environment. Save fileno's, attach pipes to this process' stdin and stdout. */ savestdin = _dup(fileno(stdin)); _dup2(pspipe[READ_END], fileno(stdin)); savestdout = _dup(fileno(stdout)); _dup2(pngpipe[WRITE_END], fileno(stdout)); if ((hchild= (HANDLE)_spawnlp(_P_NOWAIT, GS_PATH, GS_PATH, device, resolution, "-dBATCH", "-dNOPAUSE", "-q", "-sOutputFile=-", "-dTextAlphaBits=4", "-dGraphicsAlphaBits=4", (option_flags & NO_GSSAFER) ? "-": "-dSAFER", (option_flags & NO_GSSAFER) ? NULL : "-", NULL))==0) return NULL; #endif /* WIN32 */ close(pspipe[READ_END]); close(pngpipe[WRITE_END]); #else /* MIKTEX */ /* No fork but miktex_start_process3: execute gs using that. Attach file descriptors to that process' stdin and stdout. */ if (! miktex_find_miktex_executable("mgs.exe", szGsPath)) { Warning("Ghostscript could not be found"); return(NULL); } snprintf(szCommandLine,2048,"\"%s\" %s %s %s %s %s %s %s %s %s %s",/* %s",*/ szGsPath, device, resolution, /*devicesize,*/ "-dBATCH", "-dNOPAUSE", "-q", "-sOutputFile=-", "-dTextAlphaBits=4", "-dGraphicsAlphaBits=4", (option_flags & NO_GSSAFER) ? "-": "-dSAFER", (option_flags & NO_GSSAFER) ? "": "-"); if (! miktex_start_process_3(szCommandLine, &pi, INVALID_HANDLE_VALUE, &hPsStream, &hPngStream, &hStdErr, 0)) { Warning("Ghostscript could not be started"); return(NULL); } CloseHandle (pi.hThread); pspipe[WRITE_END] = _open_osfhandle((intptr_t)hPsStream, _O_WRONLY); pngpipe[READ_END] = _open_osfhandle((intptr_t)hPngStream, _O_RDONLY); #endif /* MIKTEX */ if (pspipe[WRITE_END] >= 0) { if ((psstream=fdopen(pspipe[WRITE_END],"wb")) == NULL) close(pspipe[WRITE_END]); else { writepscode(psstream,psheaderp); /* Page size */ DEBUG_PRINT(DEBUG_GS,("\n PS CODE:\t<>setpagedevice", urx - llx, ury - lly,llx,lly)); fprintf(psstream, "<>setpagedevice\n", urx - llx, ury - lly,llx,lly); /* Background color */ if ( bgred < 255 || bggreen < 255 || bgblue < 255 ) { DEBUG_PRINT(DEBUG_GS,("\n PS CODE:\tgsave %f %f %f setrgbcolor clippath fill grestore", bgred/255.0, bggreen/255.0, bgblue/255.0)); fprintf(psstream, "gsave %f %f %f setrgbcolor clippath fill grestore\n", bgred/255.0, bggreen/255.0, bgblue/255.0); } writepscode(psstream,pscodep); fclose(psstream); } } if (pngpipe[READ_END] >= 0) { if((pngstream=fdopen(pngpipe[READ_END],"rb")) == NULL) close(pngpipe[READ_END]); else { psimage = gdImageCreateFromPng(pngstream); fclose(pngstream); } } #ifndef MIKTEX #ifndef WIN32 /* Wait for child */ waitpid(pid,NULL,0); #else /* Wait for spawned process, restore stdin and stdout */ while(nexitcode == STILL_ACTIVE) GetExitCodeProcess((HANDLE)hchild, &nexitcode); CloseHandle((HANDLE)hchild); _dup2(savestdin, fileno(stdin)); _dup2(savestdout, fileno(stdout)); close(savestdin); close(savestdout); #endif /* WIN32 */ #else /* MIKTEX */ /* Close miktex process */ CloseHandle(pi.hProcess); #endif /* MIKTEX */ #ifdef DEBUG if (psimage == NULL) { DEBUG_PRINT(DEBUG_GS,("\n GS OUTPUT:\tNO IMAGE ")); } else { DEBUG_PRINT(DEBUG_GS,("\n GS OUTPUT:\t%dx%d image ", gdImageSX(psimage),gdImageSY(psimage))); } #endif return psimage; } static gdImagePtr rescale(gdImagePtr psimage, int pngwidth, int pngheight) { gdImagePtr scaledimage=psimage; /* Rescale unless correct size */ if (psimage!=NULL && gdImageSX(psimage)!=pngwidth && gdImageSY(psimage)!=pngheight) { DEBUG_PRINT(DEBUG_DVI, ("\n RESCALE INCLUDED BITMAP \t(%d,%d) -> (%d,%d)", gdImageSX(psimage),gdImageSY(psimage), pngwidth,pngheight)); #ifdef HAVE_GDIMAGECREATETRUECOLOR scaledimage=gdImageCreateTrueColor(pngwidth,pngheight); /* Copy with overwrite, remember that this is the rescaled source image. The real target has alpha blending on. */ gdImageAlphaBlending(scaledimage,0); gdImageCopyResampled(scaledimage,psimage,0,0,0,0, pngwidth,pngheight, gdImageSX(psimage),gdImageSY(psimage)); #else scaledimage=gdImageCreate(pngwidth,pngheight); gdImageCopyResized(scaledimage,psimage,0,0,0,0, pngwidth,pngheight, gdImageSX(psimage),gdImageSY(psimage)); #endif gdImageDestroy(psimage); } return(scaledimage); } static void newpsheader(const char* special) { struct pscode* tmp; char* txt; if (psheaderp==NULL && strcmp(special,"header=tex.pro")!=0) { newpsheader("header=tex.pro"); newpsheader("header=color.pro"); newpsheader("header=special.pro"); } if (strcmp(special+strlen(special)-4,".xcp")==0 && strncmp(special,"header=",7)==0) InitXColorPrologue(special+7); if (strncmp(special,"! /pgfH",7)==0) newpsheader("! TeXDict begin"); if (psheaderp==NULL) { if ((tmp=psheaderp=malloc(sizeof(struct pscode)))==NULL) Fatal("cannot malloc space for PostScript header struct"); } else { /* No duplicates. This still misses pre=..., because we still change that. To be fixed */ tmp=psheaderp; if (strcmp(tmp->special,special)==0) return; while(tmp->next!=NULL) { tmp=tmp->next; if (strcmp(tmp->special,special)==0) return; } if ((tmp->next=malloc(sizeof(struct pscode)))==NULL) Fatal("cannot malloc space for PostScript header struct"); tmp=tmp->next; } DEBUG_PRINT(DEBUG_GS,("\n PS HEADER ")); if ((txt=malloc(strlen(special)+1))==NULL) Fatal("cannot malloc space for PostScript header"); strcpy(txt,special); PSCodeInit(tmp,txt); } /*********************************************************************/ /**************************** SetSpecial ***************************/ /*********************************************************************/ void SetSpecial(char *start, char *end, int32_t hh, int32_t vv) /* interpret a \special command, made up of keyword=value pairs, * or !header or ps:raw_PostScript */ { char *buffer,*special; if ((buffer=malloc(end-start+1))==NULL) Fatal("Cannot allocate space for special"); special=memcpy(buffer,start,end-start); special[end-start]='\0'; DEBUG_PRINT(DEBUG_DVI,(" '%s'",special)); SKIPSPACES(special); /********************** Color specials ***********************/ if (strncmp(special,"background ",11)==0) { background(special+11); free(buffer); return; } if (strncmp(special,"color ",6)==0) { special+=6; SKIPSPACES(special); if (strncmp(special,"push ",5)==0) { pushcolor(special+5); } else { if (strcmp(special,"pop")==0) popcolor(); else resetcolorstack(special); } free(buffer); return; } /******************* Image inclusion ********************/ /* Needed tests for regression: PNG, GIF, JPEG and EPS inclusion, * for different gd versions */ if (strncmp(special,"PSfile=",7)==0) { /* PSfile */ char* psname = special+7; int llx=0,lly=0,urx=0,ury=0,rwi=0,rhi=0; bool clip=false; int hresolution=0,vresolution=0; int pngheight,pngwidth; /* Remove quotation marks around filename. If no quotation marks, use first word as filename */ if (*psname=='"') { psname++; special=strrchr(psname,'"'); } else { special=strchr(psname,' '); } if (special!=NULL) { *special='\0'; special++; } /* Retrieve parameters */ SKIPSPACES(special); while(special && *special) { if (strncmp(special,"llx=",4)==0) llx = strtol(special+4,&special,10); else if (strncmp(special,"lly=",4)==0) lly = strtol(special+4,&special,10); else if (strncmp(special,"urx=",4)==0) urx = strtol(special+4,&special,10); else if (strncmp(special,"ury=",4)==0) ury = strtol(special+4,&special,10); else if (strncmp(special,"rwi=",4)==0) rwi = strtol(special+4,&special,10); else if (strncmp(special,"rhi=",4)==0) rhi = strtol(special+4,&special,10); else if (strncmp(special,"clip",4)==0) {clip = true; special=special+4;} while (*special && *special!=' ') special++; SKIPSPACES(special); } /* Calculate resolution, and use our base resolution as a fallback. */ /* The factor 10 is magic, the dvips graphicx driver needs this. */ if (urx != llx) hresolution = ((dpi*rwi+urx-llx-1)/(urx - llx)+9)/10; if (ury != lly) vresolution = ((dpi*rhi+ury-lly-1)/(ury - lly)+9)/10; if (vresolution==0) vresolution = hresolution; if (hresolution==0) hresolution = vresolution; if (hresolution==0) hresolution = vresolution = dpi; /* Convert from postscript 72 dpi resolution to our given resolution */ pngwidth = (dpi*rwi+719)/720; /* +719: round up */ pngheight = (dpi*rhi+719)/720; if (pngwidth==0 && ury != lly) pngwidth = ((dpi*rhi*(urx-llx)+ury-lly-1)/(ury-lly)+719)/720; if (pngheight==0 && urx != llx) pngheight = ((dpi*rwi*(ury-lly)+urx-llx-1)/(urx-llx)+719)/720; if (pngheight==0) { pngwidth = (dpi*(urx-llx)+71)/72; pngheight = (dpi*(ury-lly)+71)/72; } if (page_imagep != NULL) { /* Draw into image */ struct pscode image; gdImagePtr psimage=NULL; #ifndef HAVE_GDIMAGECREATEFROMPNGPTR FILE* psstream; #endif PSCodeInit(&image, NULL); image.filename=kpse_find_file(psname,kpse_pict_format,0); if (image.filename == NULL) { Warning("Image file %s cannot be found, image will be left blank", psname); page_flags |= PAGE_GAVE_WARN; free(buffer); return; } if (MmapFile(image.filename,&(image.fmmap)) || image.fmmap.size==0) { Warning("Image file %s unusable, image will be left blank", image.filename); page_flags |= PAGE_GAVE_WARN; free(buffer); return; } Message(BE_NONQUIET," <%s",psname); switch ((unsigned char)*image.fmmap.data) { case 0x89: /* PNG magic: "\211PNG\r\n\032\n" */ DEBUG_PRINT(DEBUG_DVI,("\n INCLUDE PNG \t%s",image.filename)); #ifdef HAVE_GDIMAGECREATEFROMPNGPTR psimage=gdImageCreateFromPngPtr(image.fmmap.size,image.fmmap.data); #else psstream=fopen(image.filename,"rb"); psimage=gdImageCreateFromPng(psstream); fclose(psstream); #endif psimage=rescale(psimage,pngwidth,pngheight); break; case 'G': /* GIF magic: "GIF87" or "GIF89" */ DEBUG_PRINT(DEBUG_DVI,("\n INCLUDE GIF \t%s",image.filename)); #ifdef HAVE_GDIMAGEGIF psimage=rescale(gdImageCreateFromGifPtr(image.fmmap.size, image.fmmap.data), pngwidth,pngheight); #else DEBUG_PRINT(DEBUG_DVI,(" (NO GIF DECODER)")); #endif break; case 0xff: /* JPEG magic: 0xffd8 */ DEBUG_PRINT(DEBUG_DVI,("\n INCLUDE JPEG \t%s",image.filename)); #ifdef HAVE_GDIMAGECREATEFROMJPEG #ifdef HAVE_GDIMAGECREATEFROMPNGPTR psimage=gdImageCreateFromJpegPtr(image.fmmap.size,image.fmmap.data); #else psstream=fopen(image.filename,"rb"); psimage=gdImageCreateFromJpeg(psstream); fclose(psstream); #endif psimage=rescale(psimage,pngwidth,pngheight); #else DEBUG_PRINT(DEBUG_DVI,(" (NO JPEG DECODER)")); #endif break; default: /* Default, PostScript magic: "%!PS-Adobe" */ if (option_flags & NO_GHOSTSCRIPT) { Warning("GhostScript calls disallowed by --nogs" ); page_flags |= PAGE_GAVE_WARN; } else { /* Ensure one (and only one) showpage */ image.code=" /DVIPNGDICT 100 dict def DVIPNGDICT begin /showpage {} def "; image.postcode=" end showpage\n"; /* Use alpha blending, and render transparent postscript images. The alpha blending works correctly only from libgd 2.0.12 upwards */ #ifdef HAVE_GDIMAGEPNGEX if (page_imagep->trueColor) { int tllx=llx,tlly=lly,turx=urx,tury=ury; DEBUG_PRINT((DEBUG_DVI | DEBUG_GS), ("\n GS RENDER \t%s -> pngalpha ",image.filename)); if (!clip) { /* Render across the whole image */ tllx=llx-(hh+1)*72/hresolution; tlly=lly-(gdImageSY(page_imagep)-vv-1)*72/vresolution; turx=llx+(gdImageSX(page_imagep)-hh)*72/hresolution; tury=lly+(vv+1)*72/vresolution; DEBUG_PRINT((DEBUG_DVI | DEBUG_GS), ("\n EXPAND BBOX \t%d %d %d %d -> %d %d %d %d", llx,lly,urx,ury,tllx,tlly,turx,tury)); #ifdef DEBUG } else { DEBUG_PRINT((DEBUG_DVI | DEBUG_GS),(", CLIPPED TO BBOX")); #endif } psimage = ps2png(&image, "-sDEVICE=pngalpha", hresolution, vresolution, tllx, tlly, turx, tury, 255,255,255); if (psimage==NULL) Warning("No GhostScript pngalpha output, opaque image inclusion"); } else Warning("Palette output, opaque image inclusion"); #endif if (psimage==NULL) { /* png256 gives inferior result */ DEBUG_PRINT((DEBUG_DVI | DEBUG_GS), ("\n GS RENDER \t%s -> png16m", image.filename)); psimage = ps2png(&image, "-sDEVICE=png16m", hresolution, vresolution, llx, lly, urx, ury, cstack[0].red,cstack[0].green,cstack[0].blue); clip=true; page_flags |= PAGE_GAVE_WARN; } if (!clip) { /* Rendering across the whole image */ hh=0; vv=gdImageSY(psimage)-1; } } } UnMmapFile(&(image.fmmap)); if (psimage!=NULL) { DEBUG_PRINT(DEBUG_DVI, ("\n GRAPHIC(X|S) INCLUDE \t%s (%d,%d) res %dx%d at (%d,%d)", psname,gdImageSX(psimage),gdImageSY(psimage), hresolution,vresolution,hh,vv)); #ifdef HAVE_GDIMAGECREATETRUECOLOR if (psimage->trueColor && !page_imagep->trueColor) gdImageTrueColorToPalette(psimage,0,256); #endif #ifdef HAVE_GDIMAGEPNGEX gdImageAlphaBlending(page_imagep,1); #else Warning("Using libgd < 2.0.12, opaque image inclusion"); page_flags |= PAGE_GAVE_WARN; #endif gdImageCopy(page_imagep, psimage, hh, vv-gdImageSY(psimage)+1, 0,0, gdImageSX(psimage),gdImageSY(psimage)); #ifdef HAVE_GDIMAGEPNGEX gdImageAlphaBlending(page_imagep,0); #endif gdImageDestroy(psimage); } else { Warning("Unable to load %s, image will be left blank",image.filename); page_flags |= PAGE_GAVE_WARN; } free(image.filename); Message(BE_NONQUIET,">"); } else { /* Don't draw */ page_flags |= PAGE_TRUECOLOR; DEBUG_PRINT(DEBUG_DVI, ("\n GRAPHIC(X|S) INCLUDE \t%s (%d,%d) res %dx%d at (%d,%d)", psname,pngheight,pngwidth, hresolution,vresolution,hh,vv)); min(x_min,hh); min(y_min,vv-pngheight+1); max(x_max,hh+pngwidth); max(y_max,vv+1); } free(buffer); return; } /******************* Raw PostScript ********************/ if (strncmp(special,"!/preview@version(",18)==0) { int length=0; special+=18; while (special[length]!='\0' && special[length]!=')') length++; if (page_imagep==NULL) Message(BE_NONQUIET," (preview-latex version %.*s)",length,special); free(buffer); return; } /* preview-latex' tightpage option */ if (strncmp(special,"!/preview@tightpage",19)==0) { special+=19; SKIPSPACES(special); if (strncmp(special,"true",4)==0) { if (page_imagep==NULL) Message(BE_NONQUIET," (preview-latex tightpage option detected, will use its bounding box)"); dvi->flags |= DVI_PREVIEW_LATEX_TIGHTPAGE; } free(buffer); return; } if (strncmp(special,"!userdict",9)==0 && strstr(special+10,"7{currentfile token not{stop}if 65781.76 div")!=NULL) { if (page_imagep==NULL && ~dvi->flags & DVI_PREVIEW_LATEX_TIGHTPAGE) Message(BE_NONQUIET," (preview-latex <= 0.9.1 tightpage option detected, will use its bounding box)"); dvi->flags |= DVI_PREVIEW_LATEX_TIGHTPAGE; free(buffer); return; } /* preview-latex' dvips bop-hook redefinition */ if (strncmp(special,"!userdict",9)==0 && strstr(special+10,"preview-bop-")!=NULL) { dvi->flags |= DVI_PREVIEW_BOP_HOOK; if (page_imagep==NULL) Message(BE_VERBOSE," (preview-latex beginning-of-page-hook detected)"); free(buffer); return; } if (dvi->flags & DVI_PREVIEW_BOP_HOOK && ~page_flags & PAGE_PREVIEW_BOP && strncmp(special,"ps::",4)==0) { /* Hokay, decode bounding box */ dviunits adj_llx,adj_lly,adj_urx,adj_ury,ht,dp,wd; adj_llx = strtol(special+4,&special,10); adj_lly = strtol(special,&special,10); adj_urx = strtol(special,&special,10); adj_ury = strtol(special,&special,10); ht = strtol(special,&special,10); dp = strtol(special,&special,10); wd = strtol(special,&special,10); page_flags |= PAGE_PREVIEW_BOP; if (wd>0) { x_offset_tightpage = (-adj_llx+dvi->conv*shrinkfactor-1)/dvi->conv/shrinkfactor; x_width_tightpage = x_offset_tightpage +(wd+adj_urx+dvi->conv*shrinkfactor-1)/dvi->conv/shrinkfactor; } else { x_offset_tightpage = (-wd+adj_urx+dvi->conv*shrinkfactor-1)/dvi->conv/shrinkfactor; x_width_tightpage = x_offset_tightpage +(-adj_llx+dvi->conv*shrinkfactor-1)/dvi->conv/shrinkfactor; } /* y-offset = height - 1 */ y_offset_tightpage = (((ht>0)?ht:0)+adj_ury+dvi->conv*shrinkfactor-1)/dvi->conv/shrinkfactor-1; y_width_tightpage = y_offset_tightpage+1 +(((dp>0)?dp:0)-adj_lly+dvi->conv*shrinkfactor-1)/dvi->conv/shrinkfactor; free(buffer); return; } if (strncmp(special,"papersize=",10)==0) { /* papersize spec, ignored */ free(buffer); return; } if (special[0]=='!' || strncmp(special,"header=",7)==0) { /* PS header */ newpsheader(special); free(buffer); return; } if (strncmp(special,"src:",4)==0) { /* source special */ if ( page_imagep != NULL ) Message(BE_NONQUIET," at (%ld,%ld) source \\special{%s}", hh, vv, special); free(buffer); return; } if (special[0]=='"' || strncmp(special,"ps:",3)==0) { /* Raw PostScript */ if (option_flags & NO_RAW_PS) { Warning("Raw PostScript rendering disallowed by --norawps" ); page_flags |= PAGE_GAVE_WARN; free(buffer); return; } if (page_imagep != NULL) { /* Draw into image */ static struct pscode *pscodep=NULL; static bool psenvironment=false; bool nextisps; struct pscode *tmp; gdImagePtr psimage=NULL; char *txt; const char *specialend=special+strlen(special); const char *newspecial=NULL; /* hyperref non-rendering PostScript specials. */ if (strcmp(specialend-11,"pdfmark end")==0 || strcmp(specialend-7,"H.A end")==0 || strcmp(specialend-7,"H.B end")==0 || strcmp(specialend-7,"H.L end")==0 || strcmp(specialend-7,"H.R end")==0 || strcmp(specialend-7,"H.S end")==0 || strcmp(specialend-7,"H.V end")==0 || strncmp(special,"ps:SDict begin /product",23)==0) if (pscodep==NULL) { free(buffer); return; } else newspecial=""; /* pgf PostScript specials. */ else if (strcmp(special,"ps:: pgfo")==0) /* pgf page start. The first numbers are generally valid for the bop instruction, and the latter code is to move the origin to the right place. */ newspecial="ps:: 39139632 55387786 1000 600 600 (tikzdefault.dvi) @start 1 0 bop pgfo 0 0 matrix defaultmatrix transform itransform translate"; else if (strcmp(special,"ps:: pgfc")==0) newspecial="ps:: pgfc eop end"; /* Some packages split their raw PostScript code into several specials. Check for those, and concatenate them so that they're given to one and the same invocation of gs */ else if (strncmp(special,"ps::[begin]",11)==0) psenvironment=true; else if (strncmp(special,"ps::[end]",9)==0) psenvironment=false; if (pscodep==NULL) { Message(BE_NONQUIET," next != NULL) tmp=tmp->next; if ((tmp->next=malloc(sizeof(struct pscode)))==NULL) Fatal("cannot malloc space for raw PostScript struct"); tmp=tmp->next; } nextisps=DVIIsNextPSSpecial(dvi); if (psenvironment || nextisps) { if (!nextisps) { Warning("PostScript environment contains DVI commands"); page_flags |= PAGE_GAVE_WARN; } DEBUG_PRINT(DEBUG_GS,("\n PS SPECIAL ")); if (newspecial == NULL) newspecial=special; if ((txt=malloc(strlen(newspecial)+1))==NULL) Fatal("cannot allocate space for raw PostScript special"); strcpy(txt,newspecial); PSCodeInit(tmp,txt); free(buffer); return; } DEBUG_PRINT(DEBUG_DVI,("\n LAST PS SPECIAL ")); if (newspecial != NULL) { if ((special=malloc(strlen(newspecial)+1))==NULL) Fatal("cannot allocate space for raw PostScript special"); strcpy(special,newspecial); } PSCodeInit(tmp,special); /* Now, render image */ if (psisnotjustcomments(pscodep)) { if (option_flags & NO_GHOSTSCRIPT) Warning("GhostScript calls disallowed by --nogs" ); else { /* Use alpha blending, and render transparent postscript images. The alpha blending works correctly only from libgd 2.0.12 upwards */ #ifdef HAVE_GDIMAGEPNGEX if (page_imagep->trueColor) { /* Render across the whole image */ psimage = ps2png(pscodep, "-sDEVICE=pngalpha", dpi,dpi, -(hh+1)*72/dpi, -(gdImageSY(page_imagep)-vv-1)*72/dpi, (gdImageSX(page_imagep)-hh)*72/dpi, (vv+1)*72/dpi, 255,255,255); if (psimage!=NULL) { gdImageAlphaBlending(page_imagep,1); gdImageCopy(page_imagep, psimage, 0,0,0,0, gdImageSX(psimage),gdImageSY(psimage)); gdImageAlphaBlending(page_imagep,0); gdImageDestroy(psimage); } else Warning("No image output from inclusion of raw PostScript"); } else Warning("Palette output, cannot include raw PostScript"); #else Warning("Using libgd < 2.0.12, unable to include raw PostScript"); #endif } } while(pscodep->next != NULL) { tmp=pscodep->next; free(pscodep->special); free(pscodep); pscodep=tmp; } free(pscodep); pscodep=NULL; if (newspecial != NULL) free(special); if (psimage==NULL) page_flags |= PAGE_GAVE_WARN; Message(BE_NONQUIET,">"); } else { /* Don't draw */ page_flags |= PAGE_TRUECOLOR; } free(buffer); return; } if ( page_imagep != NULL ) { Warning("at (%ld,%ld) unimplemented \\special{%s}", hh, vv, special); page_flags |= PAGE_GAVE_WARN; } free(buffer); } test_dvipng.tex0000664000175000017500000000247514737210011013414 0ustar janla64janla64% test_dvipng.tex % % Part of the dvipng distribution % % This program is free software: you can redistribute it and/or modify % it under the terms of the GNU Lesser General Public License as % published by the Free Software Foundation, either version 3 of the % License, or (at your option) any later version. % % This program is distributed in the hope that it will be useful, but % WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this program. If not, see % . % % Copyright (C) 2002-2010 Jan-{\AA}ke Larsson \documentclass{article} %\usepackage[active,textmath]{preview} \usepackage{color} \pagestyle{empty} \begin{document} \begin{equation} \int dx \end{equation} \newpage $\int dx$ \newpage $\sqrt2+1=\frac1{\sqrt2-1}$ \newpage \framebox{\textbackslash\ttfamily framebox} \newpage \( \begin{array}{|r|} \hline a \cr \hline \end{array} \) \newpage fig, pig, flask, efficiency, effluent \newpage \Huge A \LARGE A \Large A \large A \normalsize A \small A \footnotesize A \scriptsize A \tiny A \newpage \color{yellow} \section*{Hello world} \pagecolor{blue} \end{document} tfm.c0000664000175000017500000000572214737210011011274 0ustar janla64janla64/* tfm.c */ /************************************************************************ Part of the dvipng distribution This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . Copyright (C) 2002-2009, 2019 Jan-Åke Larsson ************************************************************************/ #include "dvipng.h" bool ReadTFM(struct font_entry * tfontp, char* tfmname) { struct filemmap fmmap; struct char_entry *tcharptr; unsigned char *position; int lh,bc,ec,nw, c; dviunits* width; DEBUG_PRINT((DEBUG_DVI|DEBUG_FT|DEBUG_TFM), ("\n OPEN METRICS:\t'%s'", tfmname)); if (MmapFile(tfmname,&fmmap)) return(false); position=(unsigned char*)fmmap.data; if (fmmap.size<10) Fatal("TFM file %s ends prematurely",tfmname); lh = UNumRead(position+2,2); bc = UNumRead(position+4,2); ec = UNumRead(position+6,2); nw = UNumRead(position+8,2); DEBUG_PRINT(DEBUG_TFM,(" %d %d %d %d",lh,bc,ec,nw)); if (nw>0) { unsigned char *end=(unsigned char *) fmmap.data+fmmap.size; if ((width=malloc(nw*sizeof(dviunits)))==NULL) Fatal("cannot allocate memory for TFM widths"); c=0; position=position+24+(lh+ec-bc+1)*4; while( c < nw ) { if (position >= end - 4) Fatal("TFM file %s ends prematurely",tfmname); width[c] = SNumRead(position,4); c++; position += 4; } /* Read char widths */ c=bc; position=(unsigned char*)fmmap.data+24+lh*4; while(c <= ec) { if (position >= end) Fatal("TFM file %s ends prematurely",tfmname); DEBUG_PRINT(DEBUG_TFM,("\n@%ld TFM METRICS:\t", (long)((char *)position - fmmap.data))); if ((tcharptr=malloc(sizeof(struct char_entry)))==NULL) Fatal("cannot allocate memory for TFM char entry"); tcharptr->data=NULL; if (*position < nw) { tcharptr->tfmw=width[*position]; } else { Fatal("TFM file %s lacks width for char %u", tfmname, *position); } DEBUG_PRINT(DEBUG_TFM,("%d [%d] %d",c,*position,tcharptr->tfmw)); tcharptr->tfmw = (dviunits) ((int64_t) tcharptr->tfmw * tfontp->s / (1 << 20)); DEBUG_PRINT(DEBUG_TFM,(" (%d)",tcharptr->tfmw)); if (c >= NFNTCHARS) /* Only positive for now */ Fatal("tfm file %s exceeds char numbering limit %u",tfmname,NFNTCHARS); tfontp->chr[c] = tcharptr; c++; position += 4; } free(width); } UnMmapFile(&fmmap); return(true); } vf.c0000664000175000017500000001064014737210011011114 0ustar janla64janla64/* vf.c */ /************************************************************************ Part of the dvipng distribution This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . Copyright (C) 2002-2015 Jan-Åke Larsson ************************************************************************/ #include "dvipng.h" #define VF_ID 202 #define LONG_CHAR 242 int32_t SetVF(struct char_entry* ptr) { struct font_entry* currentvf; unsigned char *command,*end; currentvf=currentfont; BeginVFMacro(currentvf); command = ptr->data; end = command + ptr->length; while (command < end) { DEBUG_PRINT(DEBUG_DVI,("\n VF MACRO:\t%s ", dvi_commands[*command])); DrawCommand(command,currentvf); command += CommandLength(command); } EndVFMacro(); currentfont=currentvf; return(ptr->tfmw); } void InitVF(struct font_entry * tfontp) { unsigned char* position; int length; struct char_entry *tcharptr; uint32_t c=0; struct font_num *tfontnump; /* temporary font_num pointer */ DEBUG_PRINT((DEBUG_DVI|DEBUG_VF),("\n OPEN FONT:\t'%s'", tfontp->name)); Message(BE_VERBOSE,"<%s>", tfontp->name); if (MmapFile(tfontp->name,&(tfontp->fmmap))) Fatal("font file %s unusable", tfontp->name); position=(unsigned char*)tfontp->fmmap.data; if (*(position) != PRE) Fatal("unknown font format in file %s",tfontp->name); if (*(position+1) != VF_ID) Fatal( "wrong version %d of vf file %s (should be 202)", (int)*(position+1),tfontp->name); DEBUG_PRINT(DEBUG_VF,("\n VF_PRE:\t'%.*s'", (int)*(position+2), position+3)); position = position+3 + *(position+2); c=UNumRead(position, 4); DEBUG_PRINT(DEBUG_VF,(" %d", c)); CheckChecksum (tfontp->c, c, tfontp->name); tfontp->designsize = UNumRead(position+4,4); DEBUG_PRINT(DEBUG_VF,(" %d", tfontp->designsize)); tfontp->type = FONT_TYPE_VF; tfontp->vffontnump=NULL; /* Read font definitions */ position += 8; while(*position >= FNT_DEF1 && *position <= FNT_DEF4) { DEBUG_PRINT(DEBUG_VF,("\n @%ld VF:\t%s", (long)((char *)position - tfontp->fmmap.data), dvi_commands[*position])); FontDef(position,tfontp); length = dvi_commandlength[*position]; position += length + *(position + length-1) + *(position+length-2); } /* Default font is the first defined */ tfontnump = tfontp->vffontnump; while (tfontnump->next != NULL) { tfontnump = tfontnump->next; } tfontp->defaultfont=tfontnump->k; /* Read char definitions */ while(*position < FNT_DEF1) { DEBUG_PRINT(DEBUG_VF,("\n@%ld VF CHAR:\t", (long)((char *)position - tfontp->fmmap.data))); if ((tcharptr=malloc(sizeof(struct char_entry)))==NULL) Fatal("cannot allocate memory for VF char entry"); switch (*position) { case LONG_CHAR: tcharptr->length = UNumRead(position+1,4); c = UNumRead(position+5,4); tcharptr->tfmw = UNumRead(position+9,4); position += 13; break; default: tcharptr->length = UNumRead(position,1); c = UNumRead(position+1,1); tcharptr->tfmw = UNumRead(position+2,3); position += 5; } DEBUG_PRINT(DEBUG_VF,("%d %d %d",tcharptr->length,c,tcharptr->tfmw)); tcharptr->tfmw = (int32_t) ((int64_t) tcharptr->tfmw * tfontp->s / (1 << 20)); DEBUG_PRINT(DEBUG_VF,(" (%d)",tcharptr->tfmw)); if (c >= NFNTCHARS) /* Only positive for now */ Fatal("VF font %s exceeds char numbering limit",tfontp->name); tfontp->chr[c] = tcharptr; tcharptr->data=position; position += tcharptr->length; } } void DoneVF(struct font_entry *tfontp) { int c=FIRSTFNTCHAR; UnMmapFile(&(tfontp->fmmap)); while(c<=LASTFNTCHAR) { if (tfontp->chr[c]!=NULL) { free(tfontp->chr[c]); tfontp->chr[c]=NULL; } c++; } FreeFontNumP(tfontp->vffontnump); tfontp->vffontnump=NULL; if (tfontp->name!=NULL) free(tfontp->name); tfontp->name=NULL; }